[MacRuby-devel] roadmap for 0.5

Laurent Sansonetti lsansonetti at apple.com
Mon Jul 27 00:30:56 PDT 2009


So, we are progressing well, but there are still many things to do  
before reaching the major goal: the 0.5 release.

Here is a roadmap I cooked. Let me know if you have any feedback (or  
if I forgot anything).

First, we need to merge the experimental branch merge into trunk. I  
think we need 3 important things first:

* irb should work. This mostly implies minor bug fixes around the  
Binding class.

* rake should work. Also, minor bug fixes.

* hotcocoa should work. Most of the hotcocoa framework is already  
working except the part where it loads YAML expressions, because the  
yaml library doesn't exist yet. We need a yaml implementation and I  
personally don't want syck. I think we will go with a quick wrapper  
around the libyaml C library (http://pyyaml.org/wiki/LibYAML), which  
seems to be fast and stable.

We expect to reach this goal within a few days. Then, we will merge  
experimental into trunk and we can finally start polishing the project  
to prepare the next release.

Here is the list of things I think we must support for the release:

* implement/port Marshal, Enumerable::Enumerator, Rational, Complex to  
the new runtime APIs.

* 32-bit support should be back. This implies fixing the compilation  
of C stubs and backporting the floating point optimization to 32-bit  
floats.

* Array/Hash subclasses for immediates. We need a new subclass that  
can hold immediates (fixnums, floats, true, false, nil) directly, for  
performance reasons.

* Backtracing/symbolication. As you could surely experience,  
backtraces from MacRuby are mostly empty, because this part has not  
been implemented yet!

* try/catch should use a C++ exception instead of SjLj.

* rewrite of load.c. The current file is just too evil and it contains  
silly bugs.

* FFI API should be fully implemented. The current implementation is  
super minimal (we only have #attach_function) and all the specs are in  
the repository, so we can start.

* rubyspec: pass almost all language+core+library specs only with a  
very few and well controlled exceptions.

* compiler should always generate valid code. To achieve this, we need  
to enable the module verifier (disabled by default because it's super  
slow) and try to run spec:ci.

* the bigdecimal, stringio, json, zlib extensions should be  
implemented in pure Ruby (with FFI calls when needed).

* socket APIs should be implemented, preferably using CFStreams, for  
performance reasons.

* rubygems should fully work (except for C extensions gems).  This  
means we need the socket APIs and most likely a few bug fixes. We will  
run the rubygems test suite.

* merge stdlib with ruby 1.9.2 upstream.

Now, here is a list of tentative items, things that are not  
necessarily critical for the release but nevertheless important. Some  
of them might be completed by then, some not.

* rakefile-ize the instruby.rb script. Chance: low.

* massign arrays elimination pass. Multiple assignments generate an  
array as the return value. Most of the time, this array is not needed.  
Chance: medium.

* bignum vectorization. Use a bignum vectorization library to re- 
implement Bignum. Chance: medium.

* Finish the AOT compiler. Chance: high.

* multithreaded JIT. Compiling Ruby from different threads to improve  
startup time when loading large libraries. Requires the new LLVM trunk  
changes. Chance: low.

* debugger interface. Chance: low.

* work with LLVM trunk / future 2.6 release. LLVM trunk moves too  
fast, adds lots of API changes and sometimes doesn't build at all.  
Chance: low.

Laurent


More information about the MacRuby-devel mailing list