From: Michael Neumann Date: 2004-07-19T21:10:19+09:00 Subject: Re: Compiling Ruby code 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