🕷 zenspider.com

by ryan davis



sitemap
Looking for the Ruby Quickref?

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:

1
2
3
4
5
  def hello(n)
    1.upto(n) do
      puts "hello world"
    end
  end

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!