# Ruby language: compiled or jited?

**URL:** <https://www.ruby-forum.com/t/ruby-language-compiled-or-jited/160347>\
**Category:** Ruby\
**Created:** [February 15, 2009, 2:43am UTC](https://www.ruby-forum.com/t/ruby-language-compiled-or-jited/160347 "2009-02-15T02:43:31Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![sohdubom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/dfb087/32.png) [@sohdubom](https://www.ruby-forum.com/u/sohdubom)\
**Post date:** [February 15, 2009, 2:43am UTC](https://www.ruby-forum.com/t/ruby-language-compiled-or-jited/160347/1 "2009-02-15T02:43:31Z")

</div>

Is it true that ruby language will change to a compiled or jited  
language, like .net or java?

---

<div class="post-metadata">

**Author:** ![sohdubom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/dfb087/32.png) [@sohdubom](https://www.ruby-forum.com/u/sohdubom)\
**Post date:** [February 15, 2009, 5:10am UTC](https://www.ruby-forum.com/t/ruby-language-compiled-or-jited/160347/2 "2009-02-15T05:10:47Z")

</div>

On Sat, 14 Feb 2009 20:41:52 -0500, Soh D. wrote:

> Is it true that ruby language will change to a compiled or jited  
> language, like .net or java?

Ruby 1.9 introduced a bytecode-based interpreter (which converts your  
program to its own bytecodes and then interprets those bytecodes a la  
very old Java VMs). JRuby already has an interpreter which compiles to  
the Java VM, and these days that is JITted, so I guess it’s already  
changed.

–Ken

---

<div class="post-metadata">

**Author:** ![sohdubom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/dfb087/32.png) [@sohdubom](https://www.ruby-forum.com/u/sohdubom)\
**Post date:** [February 15, 2009, 1:05pm UTC](https://www.ruby-forum.com/t/ruby-language-compiled-or-jited/160347/3 "2009-02-15T13:05:58Z")

</div>

Ken B. wrote:

> On Sat, 14 Feb 2009 20:41:52 -0500, Soh D. wrote:
> 
> > Is it true that ruby language will change to a compiled or jited  
> > language, like .net or java?
> 
> Ruby 1.9 introduced a bytecode-based interpreter (which converts your  
> program to its own bytecodes and then interprets those bytecodes a la  
> very old Java VMs). JRuby already has an interpreter which compiles to  
> the Java VM, and these days that is JITted, so I guess it’s already  
> changed.
> 
> –Ken

Hum, does it make Ruby 1.9 a compiled language as, let’s say C#? The  
reason I got interested in Ruby is because it’s an interpreted language  
and I don’t have to, for every change, re-compiled it

---

<div class="post-metadata">

**Author:** ![sohdubom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/dfb087/32.png) [@sohdubom](https://www.ruby-forum.com/u/sohdubom)\
**Post date:** [February 15, 2009, 2:28pm UTC](https://www.ruby-forum.com/t/ruby-language-compiled-or-jited/160347/4 "2009-02-15T14:28:29Z")

</div>

On Feb 15, 2009, at 7:04 AM, Soh D. wrote:

> > the Java VM, and these days that is JITted, so I guess it’s already  
> > changed.
> > 
> > –Ken
> 
> Hum, does it make Ruby 1.9 a compiled language as, let’s say C#? The  
> reason I got interested in Ruby is because it’s an interpreted  
> language  
> and I don’t have to, for every change, re-compiled it

Ruby 1.9 would be considered a compiled language since there is a  
process of converting Ruby code into bytecode (analogous to a C  
compiler converting C code into Assembly). However as far as I know,  
the 1.9 VM isn’t a JIT. It merely “compiles” that code each time and  
runs. Like Ken said though, since JRuby runs on the JVM, it  
technically JIT’d.

Every language has to be interpreted or parsed in some fashion so its  
always going to take at least some time (even if miniscule) to parse  
the program. If its a VM based language it’ll then either generate  
bytecode and run that on the VM, otherwise it will just begin  
executing code based on what the parse tree looks like (a la Ruby  
1.8.x).

So in short the process between compiling and interpreting isn’t  
hugely different from your point of view as far as time goes and  
you’ll still have to wait, but its not going to be any great length of  
time (unless its a huge script).

Hope that helps.

-Zac

Note: If I’m wrong about any of these details regarding Ruby, someone  
please correct me :).

---

<div class="post-metadata">

**Author:** ![sohdubom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/dfb087/32.png) [@sohdubom](https://www.ruby-forum.com/u/sohdubom)\
**Post date:** [February 15, 2009, 6:15pm UTC](https://www.ruby-forum.com/t/ruby-language-compiled-or-jited/160347/5 "2009-02-15T18:15:39Z")

</div>

On Sun, 15 Feb 2009 07:04:16 -0500, Soh D. wrote:

> > changed.
> > 
> > –Ken
> 
> Hum, does it make Ruby 1.9 a compiled language as, let’s say C#? The  
> reason I got interested in Ruby is because it’s an interpreted language  
> and I don’t have to, for every change, re-compiled it

Ruby 1.9 doesn’t have an ahead-of-time byte compilation mode as far as I  
know. That means you only have to run one command to run your modified  
code. Every time you run your script, the interpreter parses it and byte  
compiles it, which then results in a speed increase when the interpreter  
runs the script. JRuby has a mode where it parses and compiles the  
script  
every time (the jruby command) and an ahead-of-time compilation mode  
(the  
jrubyc command).

So Ruby 1.9 can run like perl/python. JRuby can run like perl/python or  
like C#.

–Ken

---

<div class="post-metadata">

**Author:** ![sohdubom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/dfb087/32.png) [@sohdubom](https://www.ruby-forum.com/u/sohdubom)\
**Post date:** [February 15, 2009, 11:37pm UTC](https://www.ruby-forum.com/t/ruby-language-compiled-or-jited/160347/6 "2009-02-15T23:37:12Z")

</div>

Thanx ken and Zachary,

One of the good things about a interpreted language is that if I change  
a single file and saved it, the whole app is still working perfectly …  
in a jited env like .net with c# (as an example) if I have to modify a  
single file, then I have to build the whole app and send to the  
production server this whole app again and imagine if I have a high  
traffic website, I probably will have to wait to do it at 3AM … just  
hope it’s not the case with new ruby 1.9 … otherwise i’ll have to look  
for other programming language … maybe go back to old asp or php …

---

<div class="post-metadata">

**Author:** ![sohdubom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/dfb087/32.png) [@sohdubom](https://www.ruby-forum.com/u/sohdubom)\
**Post date:** [February 16, 2009, 12:49pm UTC](https://www.ruby-forum.com/t/ruby-language-compiled-or-jited/160347/7 "2009-02-16T12:49:07Z")

</div>

thanks David … the short answer is my case scenario … i’m not really  
concerned with exceptional performance since my projects are relatively  
small ones…

---

<div class="post-metadata">

**Author:** ![sohdubom](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/dfb087/32.png) [@sohdubom](https://www.ruby-forum.com/u/sohdubom)\
**Post date:** [February 16, 2009, 8:49am UTC](https://www.ruby-forum.com/t/ruby-language-compiled-or-jited/160347/8 "2009-02-16T08:49:54Z")

</div>

Soh D. wrote:

> Hum, does it make Ruby 1.9 a compiled language as, let’s say C#? The  
> reason I got interested in Ruby is because it’s an interpreted language  
> and I don’t have to, for every change, re-compiled it

The short answer is: Yes, it’s interpreted, in roughly the same way that  
Perl, Python, PHP, and JavaScript are interpreted. No, you don’t have to  
recompile anything after every change – in fact, many frameworks (Rails  
included) have a “development mode” which lets most changes be  
incorporated immediately into your app while it’s running. And yes, it  
does mean you probably have to give your source code to anyone who needs  
to run your program on their local machine.

The longer answers you are getting are about the technical details,  
probably pre-emptively heading off questions like “If it’s interpreted,  
isn’t it slower?” And it turns out, what you’re talking about is  
completely different than the question of whether a language is actually  
compiled to native code.

For example, there’s no reason you couldn’t write a shell script which,  
when it’s run, immediately compiles a large string (as C) into a binary  
and runs that. Similarly, it’s probably possible to bundle up a JAR  
containing both JRuby and your app, and whether or not any of it was  
actually compiled ahead of time, such that it can simply be run as a  
Java program. There are even projects which embed Ruby source code and  
the Ruby interpreter to produce a single EXE (on Windows). Similarly,  
gcj can compile Java bytecode down to actual binary, and LLVM takes  
languages like C and makes them JIT.

So the longer answer is, unless your concern is performance, you should  
only care about the shorter answer.
