libera/#sicl - IRC Chatlog
Search
10:30:37
hayley
I came up with a read barrier which would eliminate the double indirection entirely, but on the other hand, it's a read barrier, and I'm not sure if it's a great idea to fix all pointers in the heap, even if it's done concurrently and helped by background threads too. Also not sure how two concurrent redefinitions might interact with each other, as one might need to undo progress of the other.
10:32:55
hayley
It would also provide for "free" concurrent compacting; but I'm not sure how garbage collection might interact with redefinition too, as a concurrent collection using the same barrier and metadata could undo the progress of redefinition, and vice versa.
10:39:19
hayley
Suppose each pointer (n.b. pointer, not object) has another tag "visited" or "not visited". We redefine a class, and begin visiting every pointer. Before we finish, however, we redefine another class. As the last visit didn't consider the latter redefinition, we need to un-visit all pointers, before we can start visiting again.
10:40:32
hayley
We can't correctly do multiple concurrent visits, in other words. This seems especially nasty when garbage collection is involved.
10:42:21
moon-child
if I stack up an infinite stack of redefinitions, you'll never finish any of them
10:43:08
hayley
If not much of the heap was scanned, it might be faster to un-visit and start over, but one shouldn't do that too many times.
10:44:27
moon-child
oh, yeah, cus the max time you can stall the gc for is the time it takes to process a single definition. So probably no danger of its getting too far behind the mtuator
10:46:49
hayley
It'd still be tricky to get each thread to de-optimise without the kind of de-optimisation associated with JIT compilers though. Safepoints, of course, but we still need to enter de-optimised code, or code optimised for new layouts.
15:39:30
Bike
remembered the fasl format doesn't have random-states, but then, how could it, in any remotely portable way. that's annoying.
15:50:40
yitzi
Incless has the same problem...although it can punt to the implementation to implement print-object... or do contionals for each implementation.
18:06:05
jcowan
The representation of a random-state must exist, but is quite deliberately not portable.