[MacRuby-devel] experimental branch: status update
lsansonetti at apple.com
Sun Apr 26 19:43:29 PDT 2009
A status update on the recent progresses on the experimental branch!
Last week did not see a status update, mea culpa.
- A new C/Objective-C dispatcher has been written. The idea is to use
LLVM to compile stubs instead of using libffi. The previous libffi-
based implementation is no longer used (yay for performance!) and we
are able to run most of the C/Objective-C APIs. According to some
early benchmarks, the new dispatcher is about 8 times faster than
trunk, and about 3 times slower than pure Objective-C, so it's very
promising. Getting rid of libffi was the goal, because it's very slow.
- C structures covered by BridgeSupport annotations are also exposed,
providing the exact same behavior as in trunk. The implementation is
however new, since we no longer use libffi to represent them.
Thanks to these changes, we are able to run some MacRuby Cocoa scripts
(like hello world).
- More work on the LLVM interpreter usage: we were able to plug some
of the VM primitives into it and therefore interpret naive
expressions. If everything goes well we could use it to run simple
expressions instead of using the JIT, which should accelerate the load
of large libraries (and make #eval a lot faster).
- The ultra lazy JIT is now enabled by default. A couple of specs are
now failing and will be investigated later, but on average it works
- We started writing specs for MacRuby-specific behaviors (currently
66 examples and 305 expectations).
- All 1.9 multiple assignment scenarios should now be implemented.
- RubySpec was upgraded from the upstream version.
- A RubyFFI-compatible API is under development. It uses the new C
dispatcher functionality under the covers. Currently most types are
supported except :pointer, structures (and maybe more). The cool thing
about this API is that it's implemented in different versions of Ruby,
so we should be able to reuse existing Ruby libraries based on it,
until we support MRI C extensions.
More information about the MacRuby-devel