[ANN] Exupery 0.14 is released

bryce at kampjes.demon.co.uk bryce at kampjes.demon.co.uk
Sun Jul 27 21:25:58 UTC 2008

The major improvement is to the speed of register allocation. I've
fixed a couple of major performance problems so register allocation
takes 50% of compilation time even for the largest methods. Register
allocation now appears to take roughly linear time.

There's still plenty of room to improve compilation time. Every stage
copies the entire intermediate graph to produce the input to the next
stage which is redundant, most stages only change a few places. The
register allocator's liveness analyser still uses Sets to represent
which variables are live rather than bit vectors.

This release can compile cascades, the last missing core language
feature. Exupery still can only compile a handful of the core
primitives, it only compiles #at: for pointer objects. Cascades were
added because they were used more in 3.10, the choice was either
delete 2 system tests or add cascades. I delayed the release to add

There's a few bug fixes of old bugs but this release is not noticeably
more reliable than the previous release. It should be a bit more
reliable though, especially when running the new Exupery VM. The new
Exupery VM just has a single bug fix in it.

Here's the benchmarks:
  arithmaticLoopBenchmark 414 compiled  94 ratio: 4.404
  bytecodeBenchmark       726 compiled 264 ratio: 2.750
  sendBenchmark           707 compiled 454 ratio: 1.557
  doLoopsBenchmark        388 compiled 398 ratio: 0.975
  pointCreation           433 compiled 423 ratio: 1.024
  largeExplorers          257 compiled 258 ratio: 0.996
  compilerBenchmark       248 compiled 249 ratio: 0.996 
  Cumulative Time         419 compiled 275 ratio  1.519

  ExuperyBenchmarks>>arithmeticLoop              105ms
  SmallInteger>>benchmark                        362ms
  InstructionStream>>interpretExtension:in:for: 6051ms
  Average 612.691

The key benchmark for this release is the last one, compiling
interpretExtension:in:for: which now only takes 6 seconds. With
previous version of the compiler it used to take over 2 minutes
to compile.

The change in times in the other benchmarks are mostly due to
me upgrading from an Athlon 64 2.2GHz to a Core 2 3.0GHz. The
register allocator should be slightly more efficient especially
when compiling send heavy code.

Reliability and compile time performance has dominated the
last few releases. Now run time performance and reliability are
the biggest issues. Exupery still can crash after about an hour's
active use depending on what's being done.


P.S. I don't think it'll be that useful to have VMs for all
platforms. The old VM 0.12 should be fine for messing around.
The new VM would be useful if anyone felt like trying to capture
bugs though.  

If anyone want's to rebuild the VM for non-linux platforms, I'll delay
announcing the release for a few days. I doubt it's worth the effort
of re-creating a VM build environment though. I suspect that the major
remaining bug has to do with de-compilation of contexts and may
require VM changes to fix.

More information about the Exupery mailing list