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.
Installation instructions are here:
http://wiki.squeak.org/squeak/3945
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 cascades.
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.
Bryce
squeak-dev@lists.squeakfoundation.org