An Introduction to Ruby2c - Automatic Translation of Ruby Code to C

| | Comments (1)

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!

1 Comments

nice work, that's really cool!

Leave a comment