freenode/#sicl - IRC Chatlog
Search
8:43:06
beach
First, up until now, I haven't really needed a reasonable implementation of TYPEP, but when I start filling up E5 with SICL-specific functions to replace ones that were imported from the host in previous phases, then TYPEP becomes necessary, simply because I often call it in those functions.
8:43:08
beach
Second, I have put off writing TYPEP because it seemed messy to me, but I think I finally understood how to write it.
8:45:16
splittist
After phoe's conditions book perhaps someone will write The Common Lisp Type Lattice...
9:08:54
beach
That sounds interesting. I guess org-mode is just what you need in order to hide stuff you don't always want to see.
9:18:09
ralt
splittist: use <s tab to generate code snippets + C-c ' to edit them in the correct mode. I've been using this for my Emacs config, it's pretty fun.
14:11:57
Bike
update on change-class atomicity: my code doesn't handle class slots correctly. doing so correctly and thread safely may be kind of involved
14:13:00
Bike
change-class has to handle slots that are class-allocated in the instance but will be instance-allocated with the new class.
14:13:56
Bike
in clasp the storage is that the slot-definition-location is a cons, and the value of the slot is stored in the car
14:14:43
Bike
since the info is in the rack and slot definitions are immutable and so on, there shouldn't be any additional thread safety concerns
14:15:12
Bike
does mean my earlier plan to store only instance-allocated slotds in the rack is a bust, but that's not important
14:15:49
beach
Right. Some code that uses that information to determine instance size, may have to be adapted.
15:10:18
beach
So I think I have the basic structure of TYPEP down. But TYPEP is implemented as three generic functions, and they have EQL specializers. I didn't teach satiation to handle those, because previously I didn't think I would need them during bootstrapping. But having TYPEP available solves a bunch of problems during bootstrapping, so I think I should teach satiation to handle them.
15:11:18
beach
I can still load this new TYPEP after I "tie the knot", but then the old TYPEP is invoked, and I would like to avoid that, so that I can completely replace the old one at some point.
15:14:28
beach
So in summary, I am pretty pleased with this (very long) day of work. Progress is steady. My tools are working better and better. The boot-specific backtrace inspector together with Clouseau are invaluable tools, and they work in more and more situations.
15:14:47
Bike
what do the three generic functions do? also, i thought on sicl eql specializers always put things on the slow path
15:16:00
beach
There is one for choosing between an atomic and a compound type specifier. Exaggerated, perhaps. One handles atomic type specifiers, and one handles compound type specifiers and the last one EQL specializes on the CAR of the type specifier.
15:16:21
beach
And yes, at the moment, just the slow path. So satiation is not going to do anything for it.
15:18:33
beach
And I will remove the version in first-class global environments, because it is not needed.
15:21:06
beach
There are relatively few methods on TYPEP-ATOMIC, because SICL has more classes than what the standard requires, so most cases are handled by checking the class precedence list of the class of the object.
15:22:19
beach
I mainly have to handle non-classes like ATOM, BASE-CHAR, etc. in the specific methods.