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:
def hello(n)
1.upto(n) do
puts "hello world"
end
end
into the following C code:
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:
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!
nice work, that's really cool!