Progress towards Exupery 0.11

bryce at kampjes.demon.co.uk bryce at kampjes.demon.co.uk
Sat Dec 30 18:58:34 UTC 2006


There is now a working new primitive and an ExuperyMethodContext
class. The stress test also is mostly working, there's a bug that
may not be due to Exupery but should probably be investigated further.
I've started work on interrupt support. Hopefully 0.11 should have all
the VM level support required for reasonable background compilation.

The new primitive only works for fixed size pointer objects that don't
need a large header. This covers many cases as a small object can have
up to 64 instance variables. Adding variable sized objects, larger
objects, and byte storage objects should be relatively easy but can
wait.


ExuperyMethodContext is there to deal with the differences between
Exupery's method contexts and the interpreters. When I added block
support I moved the compiled program counter into the interpreters
program counter slot which meant that the debugger stopped working
with Exupery's method contexts as the PC was no longer pointing to
bytecodes. Before blocks, the compiled PC was stored in an unused
slot in the MethodContext and compiled code would save the bytecode
PC so the debugger would work if the method wasn't changed by the
debugger.

The new ExuperyMethodContext class provides both a place to translate
a compiled PC to a bytecode PC and also a place to put deoptimisation
code if the context is modified. There is now some basic support for
deoptimisation in the debugger.


With both the new primitive and ExuperyMethodContext working and the
stress test mostly working, I've started work on interrupt
support. Squeak has it's own interrupts that are used for processes,
Alt-., and profiling. On backwards jumps and sends Squeak checks if
any events have happened that require a context switch. Until now
Exupery hasn't done this.

Interrupts are important for background compilation so infinite
loops inside compiled code are interruptible with Alt-. and so that
Squeak's profiler will see compiled code.


After 0.11, the next step will be the image side support required
for background compilation. Background compilation itself should be
fairly easy. It would be nice to have better ways to decide what
should be compiled. The current profiler doesn't track what's already
been compiled. Also methods should be deoptimised if they are changed.

Bryce


More information about the Exupery mailing list