Rubinius

Use Ruby™

Roadmap

Current Status and Goals

The roadmap is part of a extended 1.0RC process where we focus on running real-world applications, deployments, and assisting package maintainers to build packages for major OS distributions.

The sections below explain the roadmap by answering these questions:

Status

Since May 2009, Rubinius development has substantially improved aspects of core library compatibility and performance, compatibility of the C-API interface, and implementation of the JIT compiler, including FFI method inlining and some generic Ruby method inlining.

Goals

There are three primary goals for this roadmap:

  • Compatibility (C)
  • Performance (P)
  • Code Quality (Q)

We focus on compatibility rather than "completeness" because the goal is to run real-world code. The RubySpec project is attempting to provide a progressively more complete measure of completeness, but that process is fairly open-ended. The metric for compatibility is successfully running people's applications.

The focus for performance work is parity with MRI 1.8.6. Rubinius is already faster, sometimes significantly faster, than MRI on micro-benchmarks but is often slower than MRI running applications. Most of the performance work has been done on the infrastructure (i.e. the core VM execution speed and the performance of the garbage collector). The next work will focus on the JIT and the algorithmic performance of the core library.

The focus on code quality is to make the code more accessible and to assist contributors so the pace of development can be accelerated. Part of code quality is better documentation for the VM and garbage collector. Another part is an improved build system to make packaging Rubinius easier, or even just checking out the code and experimenting with it.

Steps

The following are specific areas that we will focus on under the broad C, P, Q goals detailed above. The steps are categorized according to the main Rubinius components. The goals are listed in () after the item if appropriate. The JIT items are all focused on performance (P).

  1. Core Library
    1. Fix failures in main classes, especially Kernel, Module, Numeric (C, Q)
    2. Algorithmic performance of Array, String, Regexp (Q, P)
  2. FFI
    1. Conform Rubinius FFI to MRI gem (C, Q)
  3. C-API
    1. Continue getting essential C extensions to run (C, Q)
  4. Garbage collector
    1. Add compaction to the Immix collector (Q, P)
    2. Improve performance of object allocation (Q, P)
    3. Implement generic memory facility to eliminate need to iterate entire young heap during collection (Q, P)
  5. JIT
    1. Reduce quantity of code created per method (especially frame state) (P)
    2. Implement block inlining (P)
    3. Improve type guard elimination (P)
    4. Fix any areas where JITd code is slower than interpreted (P)
  6. Compiler
    1. Complete AST generation refactoring (P, Q)
    2. Improve organization of compiler files to enable the compiler the be easily loaded in MRI (Q)
    3. Improve compiler performance (P)
  7. Build System
    1. Rewrite instruction generation (Q)
    2. Add configuration task (Q)
    3. Simplify build tasks (Q)
    4. Investigate/refactor field_extract.rb (Q)
  8. Packaging
    1. Framework on OS X
    2. Macports package
    3. Ubuntu package