An Introduction to Ruby2c - Automatic Translation of Ruby Code to C
Published 2005-01-27 @ 21:08
Tagged ruby, metaruby, ruby2c
An Introduction to Ruby2c
Automatic Translation of Ruby Code to C
This is an extract from our keynote presentation / PDF that we have online. If you’ve already read that, then this will bore you. Otherwise, read on…
The Problem
- Simply put, writing ruby internals in C requires a mental context switch every time you go from ruby to C and back.
-
C sucks.
- This makes the internals harder to understand.
-
Which makes it harder to recruit otherwise good coders to work on ruby internals.
- Which slows down ruby’s development.
Our Proposal
- Implement the whole thing in ruby, and translate to C.
- No more context switching. Able to test changes live in the system. More understandable internals. More accessible to others. Must be in a subset of ruby that is easily translatable to C.
Current Status
We currently have code that can convert the following example code:
into the following C code:
1 2 3 4 5 6 7 8 9 |
void hello(long n) { long temp_var1; temp_var1 = 1; while (temp_var1 <= n) { puts("hello world"); temp_var1 = temp_var1 + 1; } } |
An Extra Goodie
I wrote a 13 line class and now can do the following:
1 2 3 4 5 6 7 8 9 10 11 |
class MyTest def factorial(n) f = 1 n.downto(2) { |x| f *= x } return f end inline(:Ruby) do |builder| builder.optimize :factorial end end |
and dynamically replaces the ruby version, in this case, an 8.8x speed-up with zero effort!
Want to Help?
- Know what you are getting into… read the propaganda.
- Respond on my blog, send me email, talk to me on IRC, or contact Eric Hodel.
- A ruby2c subset spec is coming soon.
- Lots to write, and much of it should be fun!