A
Alexander Kellett
Whoa, say what?
---
Rubydium is aiming to become an optimising reimplementation
of the Ruby 1.8 interpreter, currently its as good as vapourware
however the key mechanism has been prototyped, thusly before
commencing a major rewrite I thought i'd release the
current state of the art.
Why oh why?
---
Rubydium works by generating optimized platform specific code
on the fly, as needed, using instance type information gathered
during the execution itself.
Optimisations are possible as the generated code can be specialized
for the types in question, therefore allowing heavy inlining of
speed critical sections.
Where ya at?
---
This preview can execute an primitive subset of the
Ruby language, its slow, buggy, more complex than i'd
really like, and will probably make you loose a fair
amount of hair just getting the preview working
However, its a proof of concept that does show that
The Twist is implementable using the libjit library.
Whats you using mate?
---
As a backend code generator libjit (http://www.southern-storm.com.au/libjit.html)
is being used. The first component of Rubydium is therefore
a small and incomplete binding to the libjit library. The CVS
version of libjit is required for the Rubydium tech preview.
As a Ruby parser Robert Feldt's awesome Ruth library is used.
The AST is used directly during code generation at this point.
Several minor modifications were needed so a custom Ruth library
is required for Rubydium.
Dude, where's my car?
---
I've given Rubydium a nice cozy and well furnished apartment
at the RubyForge estate:
http://rubyforge.org/frs/?group_id=362
Or for the wgetters out there:
http://rubyforge.org/frs/download.php/1546/libjit-cvs-snapshot-2004-09-27.tar.gz
http://rubyforge.org/frs/download.php/1548/ruth-0.10-rubydium.tar.gz
http://rubyforge.org/frs/download.php/1547/rubydium-0.1-1.tar.gz
Didn't downloading that just feel sooo damn good?
All excited? Hope so
But, Geez, Dude, How do I start her up ?
---
The Libjit CVS snapshot (needs base system - c/c++/bison-1.35/flex)
(more information can be found in the included README)
:
./configure --prefix=/path/to/install/prefix --enable-interpreter
(example prefix: /home/alex/install/libjit)
make
make install
Please note, the "--enable-interpreter" option is required.
Ruth with my local modifications (1.8.x ruby is known to work)
(see included README file for more information)
:
ruby helpers/make.rb
ruby helpers/install.rb
Rubydium
:
export JIT_DIR=/path/to/install/prefix
./build_script
This will configure, then build, and finally execute the test suite.
The test suite will produce an obscene amount of information,
take a look through it on a rainy day sometime if you wish
Any failed tests?, first please check that you actually do have an
interpreter build of libjit rather than a x86 backend build. If you're
certain that there are other errors, feel free to email me the failure
reports
And now what?
---
Take a look around at the source. Given its current state
its certainly not useful for executing anything, but
its sure fun to see all that output whizz past!
Here's to hoping at least some of
you guys/gals can get this working!
Enjoy
Alex
---
Rubydium is aiming to become an optimising reimplementation
of the Ruby 1.8 interpreter, currently its as good as vapourware
however the key mechanism has been prototyped, thusly before
commencing a major rewrite I thought i'd release the
current state of the art.
Why oh why?
---
Rubydium works by generating optimized platform specific code
on the fly, as needed, using instance type information gathered
during the execution itself.
Optimisations are possible as the generated code can be specialized
for the types in question, therefore allowing heavy inlining of
speed critical sections.
Where ya at?
---
This preview can execute an primitive subset of the
Ruby language, its slow, buggy, more complex than i'd
really like, and will probably make you loose a fair
amount of hair just getting the preview working
However, its a proof of concept that does show that
The Twist is implementable using the libjit library.
Whats you using mate?
---
As a backend code generator libjit (http://www.southern-storm.com.au/libjit.html)
is being used. The first component of Rubydium is therefore
a small and incomplete binding to the libjit library. The CVS
version of libjit is required for the Rubydium tech preview.
As a Ruby parser Robert Feldt's awesome Ruth library is used.
The AST is used directly during code generation at this point.
Several minor modifications were needed so a custom Ruth library
is required for Rubydium.
Dude, where's my car?
---
I've given Rubydium a nice cozy and well furnished apartment
at the RubyForge estate:
http://rubyforge.org/frs/?group_id=362
Or for the wgetters out there:
http://rubyforge.org/frs/download.php/1546/libjit-cvs-snapshot-2004-09-27.tar.gz
http://rubyforge.org/frs/download.php/1548/ruth-0.10-rubydium.tar.gz
http://rubyforge.org/frs/download.php/1547/rubydium-0.1-1.tar.gz
Didn't downloading that just feel sooo damn good?
All excited? Hope so
But, Geez, Dude, How do I start her up ?
---
The Libjit CVS snapshot (needs base system - c/c++/bison-1.35/flex)
(more information can be found in the included README)
:
./configure --prefix=/path/to/install/prefix --enable-interpreter
(example prefix: /home/alex/install/libjit)
make
make install
Please note, the "--enable-interpreter" option is required.
Ruth with my local modifications (1.8.x ruby is known to work)
(see included README file for more information)
:
ruby helpers/make.rb
ruby helpers/install.rb
Rubydium
:
export JIT_DIR=/path/to/install/prefix
./build_script
This will configure, then build, and finally execute the test suite.
The test suite will produce an obscene amount of information,
take a look through it on a rainy day sometime if you wish
Any failed tests?, first please check that you actually do have an
interpreter build of libjit rather than a x86 backend build. If you're
certain that there are other errors, feel free to email me the failure
reports
And now what?
---
Take a look around at the source. Given its current state
its certainly not useful for executing anything, but
its sure fun to see all that output whizz past!
Here's to hoping at least some of
you guys/gals can get this working!
Enjoy
Alex