James Tucker
3/13/2008 4:08:00 PM
On 13 Mar 2008, at 13:24, Tim Hunter wrote:
> James Tucker wrote:
>> On 12 Mar 2008, at 01:58, Tim Hunter wrote:
>>
>>> t3chn0n3rd wrote:
>>>> right now I am running ruby on red hat 8. Is there a compiler for
>>>> windows vista?
>>>
>>> If by "compiler" you mean "interpreter," then yes. Google "ruby
>>> +windows". If by "compiler" you mean "a thing that turns Ruby code
>>> into object code," then no. There are no Ruby compilers. If you mean
>>> something else, please clarify.
>>
>> Except the one in jruby. oh and rubinius (is that working yet?). Oh
>> and 1.9.
>>
>> ;)
>
> I knew somebody would quibble. That's why I specified "a thing that
> turns Ruby code into object code." Neither JRuby nor YARV is turns
> Ruby
> code into object code. VM instructions, yes. Object code, no.
I don't really want to argue, but I do feel it's important to point
this out. Most code that you will ever write (including C or any form
of assembler to run under an operating system (any of the 6 most
common OSes), runs inside a virtual machine). Whilst some or even most
of the instructions may run directly on the processor, there are many
layers of indirection providing a genuine virtual machine experience.
That is, memory management, scheduling, memory access security, and so
on and so forth. Many C heads (of which I am actually not one) will
tell you that "most C code is written for a virtual machine on any
modern OS".
Now if you want to get 1 step closer to the processor, and this is
your definition (of object code), that's fine, but there are often no
genuine benefits to doing so, by comparison to what becomes available
expanding the size (or more specifically capability) of the VM you run
on. Start up time aside, it's relatively well known that Java is
starting to push these boundaries.
The real gain that businesses see to 'object code' is that it is very
hard to 'steal implementation code' from 'object code'. This is partly
a product of optimization and of the effective (co-incidental)
obfuscation of the code. According to some of the Jruby folks, it's
very hard indeed, to get 'implementation code' from jruby compiled
classes.
Moreover, I'm not sure it's practical, or even entirely possible, to
implement ruby without at least some 'VM' style code running in the
background, even under an attempt to make that all static, stateless
code. I'd like to be proven wrong, though.
As I say, I don't want to argue on the definition of object code. We
probably share different opinions. This is just mine, and I'm happy to
discuss it, but not to argue. :-)