It is generally difficult to create a compiler for interpreted
languages, specially if such a language is reflection-rich like Ruby.
If writing commercial applications and performance are your biggest
concerns, then perhaps what you're looking for is partial evaluation
and an application generator. Then you would still have Ruby
interpreted, but a speed possibly equivalent to compiled languages.
And the source of your program would be embedded in the interpreter
itself.

On Mon, 19 Jul 2004 20:57:18 +0900, Nospam
<news.home.nl-1 / nospam.no-nonsense.org> 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.
> 
> Am I right on this, or do I forget something important which makes the
> above quite hard to do?
> 
> With kind regards,
> 
> Peter
> 
>