Currently symbol-function of a special form will return nil
This means we will need to not unwind the stack, but instead collect the backtrace as we go down the call stack and halt it there.
We can use the std::panic::catch_unwind to handle any errors that occur during sorting and propogate them up.
- define the type and implement
GcManaged
for it - define in gc/alloc.rs
- add boxing function
- define in object
- add to
cast_gc!
macro - impl
IntoObject
- impl
TaggedPtr
- implement tryfrom object
- implement tracing
- Add to
OwnedObject
- Add to
ObjectAllocation
- Display a text widget in window
- display a buffer in the window
- custom widget the get’s a slice of the buffer
- allow buffer to be edited
- new UI thread
The new GC will be generational, copying collector based on immix. We need to break this up into as many small steps as possible. The hard thing is that all parts of this seem to rely on one another. The easiest stand alone thing might be to make a semi-space copying collector for the whole heap. This means we don’t have to worry about free-lists or immix or generational barriers. And then when we create the generation older immix heap we can work on copying to that.
We have two options to access the header of an object. We can either make the object itself be repr C so the header is always first, or we can add a wrapper type. I am going to go for the wrapper type
Change the allocation to used contiguous blocks of memory. We want to use immix style blocks for most things.
This will tell the compiler that the value can change. This will prevent some optimizations but supporting copying will be worth it.
We will need to define forwarding pointers for this. Miri will help to make sure we don’t break semantics.
Need a write barrier to track pointer across generations. The write barrier needs to both be used for checking for read-only and for tracking between generations. We are planning on using a remembered set via SSB with field logging.
This can be implemented later