libera/#sicl - IRC Chatlog
Search
22:53:10
Mondenkind
Bike: 'there aren't really a lot of options for a non in house GC' have you looked at mps?
23:01:52
Bike
i'm not sure if it was a lock or a shared atomic flag, but yeah, multithread performance was not good
23:03:23
hayley
The code is quite nice for C. I ported it to ARM about half a year before Ravenbrook did.
23:03:57
Bike
might have been, but neither i nor drmeister is especially interested in (re)writing a GC. kind of kills the non in house aspect
23:06:42
hayley
I still think some not-entirely-essential modifications are better than full in-house; but it's still maintenance effort, yes.
23:41:28
Bike
also fixing mps in this way would have required some pretty deep work, since the allocation stuff is all a bunch of hyper optimized macros and functions
2:21:55
hayley
Though, in the context of BOCL which I assume wouldn't be threaded, MPS failing to scale wouldn't be a big problem either.
3:02:14
Mondenkind
beach: the OED cites the first appearance of 'ersatz' as an 1875 entry in the encyclopaedia britannica: “(German army), Those who are exempted..are passed into the Ersatz reserve.”
3:02:48
beach
Mondenkind: Oh, interesting. Merriam-Webster mentioned the date, but not the original use.
3:19:57
beach
So, I wasn't looking forward to the messy code in COMPUTE-POINTER that would result from all the special cases of ersatz objects. But by going to bed early last night, I found a better way. I will have that part of the computation done by SICL code in E5, in the form of a generic function.
3:22:22
beach
The generic function will return the number of words of the prefix of the rack that must be recursively traversed. The remaining words contain binary stuff and should be stored without processing. The number of words in the prefix is different from the rack size only for specialized arrays.
3:22:51
beach
This is trivial to do as a SICL generic function, but very messy to do using host code.
3:49:32
drmeister
hayley: Boehm is pretty much the only choice at the moment. You should look at mmtk.io
3:50:43
drmeister
I need to get to bed - I'm trying to get more sleep these days. Catch me tomorrow earlier if you want to talk about it.
3:55:51
beach
I can't figure out how a good garbage collector can be written independently of other aspects of the client system, like object representation, stack scanning, etc.
3:56:30
hayley
In the case of the MPS, you do have to implement object scanning yourself (but not stack scanning, which is conservative).
3:57:14
beach
So, I used the adjective "good", and I don't see how a good garbage collector can be had with conservative stack scanning.
4:50:32
hayley
Bike: Would it be possible to have something like UPGRADED-ARRAY-ELEMENT-TYPE to find an appropriate supertype that can be operated on atomically? I recall you wrote that atomic updates are essentially defined by the capabilities of the implementation (which is of course true).
4:52:10
hayley
It would be useful to write e.g. (make-array 256 :element-type (atomic-element-type 'bit)) if we'd like a bitmap, but any supertype of BIT is also acceptable. (Though the performance would vary due to false sharing, of course.)
5:34:24
beach
I need to prepare to go buy food. I'll look at this when I get back in less than 2 hours I hope.
5:34:44
Mondenkind
in unicode, #xd800 is a surrogate codepoint, and so not legal. The glossary entry for 'character code' says: 'a non-negative integer less than the value of char-code-limit that is suitable for use as a character code'. So perhaps #xd800 is non-negative and less than char-code-limit, but still not suitable for use as a character code
5:35:29
Mondenkind
however code-char 'Returns a character with the code attribute given by code. If no such character exists and one cannot be created, nil is returned'
5:35:52
Mondenkind
so perhaps #xd800 is _suitable_ for use as a character code, but no character exists with that code
5:37:07
Mondenkind
from a more practical perspective, existing applications may assume that, if (<= 0 x char-code-limit), then (code-char x) will return _something_. So perhaps compatibility ought to be maintained with such applications
5:38:00
Mondenkind
(so, really, the wscl issue is: should the character code space consist of _all_ non-negative integers below char-code-limit)
5:38:44
Mondenkind
none of the cl implementations I tried do anything special with surrogate codepoints at all, except for ccl, which returns nil if you try to create a character based on one
5:50:09
Mondenkind
13.1.2.1 seems as though it ought to be relevant, but does not distinguish between _suitability_ of a code for characterhood vs _existence_ of a character with a given code
6:00:33
Mondenkind
hmm. Thinking about it a bit more, I think the intent may have been that, if the character code space were not contiguous, the holes would separate distinct scripts. However seeing as this is not explicitly stated anywhere, and that model is no longer an accurate representation of the way characters are modeled, maybe it is appropriate to willfully ignore that intent
7:26:58
pjb
(code-char #x10000000000d800) #| ERROR: The value 72057594037983232 is not of the expected type (mod 1114112). |#
7:37:07
beach
Mondenkind: Returning NIL seems to be the most appropriate solution. But my feeling is that the entire Unicode thing is going to be slightly incompatible with the Common Lisp standard in several respects.
7:38:29
Mondenkind
pjb: yes, I understand what the difference is; what I am asking is what _should_ be done
7:40:09
Mondenkind
I think returning nil is correct, but only because user code _has no way_ of checking whether a number is a valid character code other than (and (<= 0 x (1- char-code-limit)) (not (null (code-char x))))
7:40:29
beach
Today, my favorite coauthor is coming over for lunch, so I won't get much done today in terms of programming.
7:40:32
Mondenkind
which being the case I think that code-char should return nil for _all_ non-negative integers
7:51:36
pjb
(defun valid-char-code-p (x) (and (integerp x) (< -1 x char-code-limit) (code-char x))) (mapcar 'valid-char-code-p '(65 #xd800 100000000000)) #| --> (#\A nil nil) |#
7:54:11
Mondenkind
pjb: right, and only if the holes are guaranteed to turn into nil; which is why I suggested that they do that instead of signalling an error
7:54:27
Mondenkind
(I suppose you could also catch the error if it were guaranteed, but that would be even worse)
9:01:54
pjb
Mondenkind: returning nil for non-character codes. I would argue that ascii control codes should have a code-char nil. (apart of course #\newline).
9:03:45
pjb
Mondenkind: then for #xd800 it's a matter of interpretation of unicode, the cl character specification cannot take into account all the complexity of unicode, so some interpretation and extensions are required. I'd argue for the specification of a UNICODE package with all the operators needed to deal sanely with unicode. This could be integrated in implementations supporting unicode like gray streams or the mop.
9:48:53
hayley
Once someone offered to add a feature they wanted to a library I wrote, but I thought it needed some adjustments, so I made a local branch with their commits, made my adjustments, then merged that branch.
9:49:57
Mondenkind
switched. I thought somebody might say something like that. However, to fight pedantry with pedantry, I will also note that the test should be switched; the expected case comes first
9:50:09
Mondenkind
beach: check-type signals the error if it has to. It's also shorter, and provides a restart
9:51:57
beach
OK, I'm confused, and I need to prepare lunch for my favorite coauthor, so I'll catch up later.
9:51:58
hayley
Line 4 of https://github.com/robert-strandh/SICL/pull/217/files has a CHECK-TYPE form, no?
9:52:34
hayley
Mondenkind: Aha, now I realise why you and beach were talking about German yesterday.
9:53:59
beach
I would use the Vietnamese word for "beach" but it contains characters not allowed by IRC.
9:55:28
hayley
Whoever said that people only examine the small pull requests was unfortunately very right.
9:56:04
jackdaniel
re backquote, (check-type code #.(1- char-code-limit)) would be fine if you can guarantee, that this limit won't change between reading the file and calling the function
9:57:08
hayley
jackdaniel: Sort of, but someone made a point about this specific instance of bikeshedding once.