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

About this Entry

This page contains a single entry by zenspider published on January 27, 2005 9:08 PM.

Parse Tree Visualization was the previous entry in this blog.

R2C, RSN (no really) is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Pages

Powered by Movable Type 4.32-en