My plan is to release a 1.0 as soon as possible. That's a release of
Exupery that is generally useful, even if only for a single platform.
The road map to 1.0 is:
* Compiled blocks
* Super Sends
* Compiled Object>>new
* Fully integrated dynamic primitive inlining.
Other likely items before 1.0:
* A compiled ExuperyBlockContext>>value
* Natively compiled String primitives (at least #at: and #at:put:)
* Removal of SmallInteger tagging in expression trees.
* Compiled inlined code to call Slang primitives
2.0 will probably just have full dynamically inlined messages. I'd
really like have them as soon as possible because they will really
change the costs of sends. I'd rather not do too much tuning of
compiled sends until they are in place because hopefully most sends
will be dynamically inlined.
3.0 is likely to have an SSA based optimiser. That should first
provide another 2-4 times increase in bytecode performance then
provide a good platform for further optimisations.
The changes are I've slipped the Point>>@ and object creation work to
0.09 and full dynamically inlined messages to 2.0. This isn't really
delaying either feature. Just focussing on improving the stability and
usefulness of the entire system first.
Dynamically inlined primitives are something that's been nearly fully
working for a few releases now. They allow primitives to be inlined
into a calling method which means that a primitive that's called
frequently will be as fast as if it was implemented as a
bytecode. Because they are dynamically inlined, they will be
specialised for the actual types used by the sender. I've been using
them for #at: and #at:put: in the bytecode benchmark. The only thing
missing is finishing the type feedback mechanism.
Chris Muller writes:
> That's good news Bryce! A blazing Squeak, if stable,
> would be truly compelling.
> Are you planning support for all three major
> platforms? I take it there is no (Slangy) way to make
> Exupery platform-independent?
Do you mean the three main x86 platforms? An operating system port
should be easy. There's only a few things that are likely to be
different. The most likely difference is the call to allocate
executable memory. There's a small chance that the C calling
conventions are different. The biggest problem may be building a
regular VM to port into.
I'm hoping that other people will step forward to do the ports. I'd
like there to be ports, but it's really up to you. For Exupery to be
fully accepted by the community, other people will need to be able to