Nospam wrote:
> Hi,
> 
> Once in a while the question pops up if it is possible to compile Ruby 
> code to native machine code. The answer has always been no. But I keep 
> wondering how hard it would really be to make this possible.
> 
> Ruby is written in C. And when Ruby parses a Ruby script it converts 
> each statement to a C call. Probably the same calls you can use on your 
> own in a Ruby C extension. So why wouldn't it be possible to parse a 
> Ruby script and convert all statements to Ruby C code and put it in a 
> *.c file (instead of calling the Ruby C statements directly). This *.c 
> file can then be compiled into machine code with a C compiler like gcc. 
> If each *.rb file is converted to a C file it could be compiled to a 
> dynamically loadable library which could then be used on require 
> statements (just like regular Ruby C extensions).
> 
> What I mean is, this...
> 
> class Example
>   def example
>     puts "Hello World!"
>   end
> end
> 
> .... can also be written in C using the Ruby C API, am I right? So why 
> wouldn't it be possible to convert all Ruby code to C code using the 
> Ruby C API?
> 
> This would probably result in some performance gain (no need to parse 
> the code anymore at run-time), but for some people more important, you 
> can distribute your Ruby applications closed-source. In the future the 
> performance gain maybe could be increased by performing special 
> optimizations during the conversion process.

I remember that a long time ago, there was a ruby-to-c compiler (was it 
called r2c?). But IIRC, there was only little performance gain. Remember 
that you still need a Ruby parser, due to "eval". It would be nice, but 
I'd even more like to see a bytecode compiler (written in pure Ruby 
running on top of the bytecode interpreter).

Regards,

   Michael