Here's a list if things that could be considered for 0.16 in rough
1) Full method inlining
2) Support for proper closures
3) Tuning to make the current compiler more useful
4) Saving the image without removing all native code
5) Saving native code with the image
I've fairly much settled on 1) as the main part of the
next release. It'll change the overall behaviour of Exupery
so it's worth doing before focusing on tuning the profiler
to pick the correct hot-spots. It's also hard to judge the
value of other send optimisations until I can see how well
dynamic inlining works.
2) would be nice and isn't that large. It'll involve freeing up the
"unused" slot in MethodContext, Exupery uses it as a flag to indicate
what methods are compiled and what methods are interpreted. That's a
legacy from back when it was the native PC. After freeing up the
"unused" slot closure support is just implementing a few more
3) was the original plan. As reliability has jumped up enough to
tackle full method inlining and relative send performance is so much
worse on Core 2 than it was on Athlon 1) looks more appealing.
4) and 5) will both make testing a little easier. Given Exupery
is a slow compiler it shouldn't really throw native code away
as readily as it does now. Being able to use native code for longer
will add significantly to the practicality of Exupery but the driver
at this stage is making long tests easier to perform.
At this stage, I'd guess 0.16 will have 1) and possibly 2). Full
method inlining is a fairly big task made up of various stages.
Inlining methods that don't create blocks is much simpler than
inlining methods that do refer to blocks.