Traits approaching mainstream Squeak

Bryce Kampjes bryce at kampjes.demon.co.uk
Sat Sep 3 16:08:30 UTC 2005


stéphane ducasse writes:
 > Hi bryce
 > 
 > can you explain to me what is the squeak part of Exupery?
 > You have your own compiler? bytecode emitter?
 > Did you base it on fullClosure/ RB AST?
 > 
 > Stef

Hi Stef,

Exupery is a bytecode to native machine code compiler. The compiler
itself is written entirely in Squeak. The compiler written in Squeak
produces a ByteArray containing generated machine code which is passed
to a primitive to load into a machine code cache. There are a few
modifications to the VM so it will run native compiled methods and a
plug-in which provides the machine code cache.

The goal is to make Squeak much faster, Exupery is only designed to
compile hotspot methods, all other methods will be interpreted.  It's
designed to produce very high quality code at the cost of slow compile
times. It's meant to compile in a background Squeak thread so there
shouldn't be visible compilation pauses.

The Squeak part is everything except some run-time support code. The
Squeak code reads a CompiledMethod then translates that into
intermediate code which is optimised, converted into instructions,
register allocated, and assembled producing the the ByteArray
containing machine code.

So, so long as traits or the fullClosure compiler hasn't changed the
semantics of any bytecodes they should still be compatable with
Exupery. From memory the fullClosure compiler adds two bytecodes,
Exupery will need to support them to be able to optimise full
closures. But currently Exupery can not compile methods that create
blocks this isn't yet an issue.

Bryce



More information about the Squeak-dev mailing list