# Need a simplified understanding of Rubinius

**URL:** <https://www.ruby-forum.com/t/need-a-simplified-understanding-of-rubinius/115710>\
**Category:** Ruby\
**Created:** [September 27, 2007, 9:05pm UTC](https://www.ruby-forum.com/t/need-a-simplified-understanding-of-rubinius/115710 "2007-09-27T21:05:43Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![bitsmith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/9de053/32.png) [@bitsmith](https://www.ruby-forum.com/u/bitsmith)\
**Post date:** [September 27, 2007, 9:05pm UTC](https://www.ruby-forum.com/t/need-a-simplified-understanding-of-rubinius/115710/1 "2007-09-27T21:05:43Z")

</div>

…just curious…how does Rubinius ‘boot’ itself up and how does  
translate ruby into bytecode… i know a little about parsing and  
compilers … but what makes rubinius different? i hear it is actually  
written in ruby… but that’s circular? like MC Ecsher the hand drawing  
a hand?..tia dave

---

<div class="post-metadata">

**Author:** ![bitsmith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/9de053/32.png) [@bitsmith](https://www.ruby-forum.com/u/bitsmith)\
**Post date:** [September 28, 2007, 5:48pm UTC](https://www.ruby-forum.com/t/need-a-simplified-understanding-of-rubinius/115710/2 "2007-09-28T17:48:20Z")

</div>

On 9/27/07, Dave R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> …just curious…how does Rubinius ‘boot’ itself up and how does  
> translate ruby into bytecode… i know a little about parsing and  
> compilers … but what makes rubinius different? i hear it is actually  
> written in ruby… but that’s circular? like MC Ecsher the hand drawing  
> a hand?..tia dave

Basically what you do is you write a first implementation using  
language A. Then you use that implementation to create an ‘artifact’  
that is capable of running language B. If you do this carefully, you  
can then discard everything you wrote in language A.

For example, Pascal was first implemented in FORTRAN. Once that  
worked, they rewrote the compiler in Pascal, and away they go… etc.

Instead of an Ecsher drawing, it is more like using scaffolding to  
build a house. When you are done, the house is made entirely out of  
“house”. Heh.

In answer to your second question… Rubinius isn’t really ‘different’.  
It uses only time-honored implementation techniques. They just happen  
to be techniques that have not often been used to implement dynamic  
languages.

---

<div class="post-metadata">

**Author:** ![bitsmith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/9de053/32.png) [@bitsmith](https://www.ruby-forum.com/u/bitsmith)\
**Post date:** [September 28, 2007, 6:10pm UTC](https://www.ruby-forum.com/t/need-a-simplified-understanding-of-rubinius/115710/3 "2007-09-28T18:10:03Z")

</div>

On 9/28/07, James Edward G. II [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > Basically what you do is you write a first implementation using  
> > language A. Then you use that implementation to create an ‘artifact’  
> > that is capable of running language B. If you do this carefully, you  
> > can then discard everything you wrote in language A.
> 
> Isn’t there a Scheme book with a Scheme implementation written in  
> Scheme in it? If my memory serves, I think I even remember Evan  
> talking about this being some of the inspiration for Rubinius.

That is true, yeah. However, our more direct inspiration is the  
Smalltalk-80 book. The last section of that book is a Smalltalk VM  
written in Smalltalk.

Here is a link with some links to more links. 🙂

> **[Meta-circular evaluator](https://en.wikipedia.org/wiki/Meta-circular_evaluator)**
>
> In computing, a meta-circular evaluator (MCE) or meta-circular interpreter (MCI) is an interpreter which defines each feature of the interpreted language using a similar facility of the interpreter's host language. For example, interpreting a lambda application may be implemented using function application. Meta-circular evaluation is most prominent in the context of Lisp.
> A self-interpreter is a meta-circular interpreter where the interpreted language is nearly identical to the host la The diss...

---

<div class="post-metadata">

**Author:** ![bitsmith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/9de053/32.png) [@bitsmith](https://www.ruby-forum.com/u/bitsmith)\
**Post date:** [September 29, 2007, 7:41am UTC](https://www.ruby-forum.com/t/need-a-simplified-understanding-of-rubinius/115710/4 "2007-09-29T07:41:18Z")

</div>

James Edward G. II wrote:

> Isn’t there a Scheme book with a Scheme implementation written in Scheme  
> in it? If my memory serves, I think I even remember Evan talking about  
> this being some of the inspiration for Rubinius.

1. Few entry-level books on Lisp or Scheme _don’t_ contain an evaluator  
written in the language itself. It’s a tradition. 🙂

2. I thought the inspiration for Rubinius was Smalltalk, not Scheme.  
Then again, Lisp was one of the inspirations for _Smalltalk_.

---

<div class="post-metadata">

**Author:** ![bitsmith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/9de053/32.png) [@bitsmith](https://www.ruby-forum.com/u/bitsmith)\
**Post date:** [September 28, 2007, 5:58pm UTC](https://www.ruby-forum.com/t/need-a-simplified-understanding-of-rubinius/115710/5 "2007-09-28T17:58:19Z")

</div>

On Sep 28, 2007, at 10:47 AM, Wilson B. wrote:

> language A. Then you use that implementation to create an ‘artifact’  
> that is capable of running language B. If you do this carefully, you  
> can then discard everything you wrote in language A.

Isn’t there a Scheme book with a Scheme implementation written in  
Scheme in it? If my memory serves, I think I even remember Evan  
talking about this being some of the inspiration for Rubinius.

James Edward G. II

---

<div class="post-metadata">

**Author:** ![bitsmith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/9de053/32.png) [@bitsmith](https://www.ruby-forum.com/u/bitsmith)\
**Post date:** [September 29, 2007, 4:30pm UTC](https://www.ruby-forum.com/t/need-a-simplified-understanding-of-rubinius/115710/6 "2007-09-29T16:30:33Z")

</div>

On Sat, 29 Sep 2007 00:47:53 +0900, Wilson B. wrote:

> In answer to your second question… Rubinius isn’t really ‘different’.  
> It uses only time-honored implementation techniques. They just happen  
> to be techniques that have not often been used to implement dynamic  
> languages.

also PyPy, many Schemes and Squeak come to mind. I believe a better  
wording may be “not often used to implement dynamic languages of the  
unix  
legacy” 🙂

---

<div class="post-metadata">

**Author:** ![bitsmith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/9de053/32.png) [@bitsmith](https://www.ruby-forum.com/u/bitsmith)\
**Post date:** [October 2, 2007, 7:20pm UTC](https://www.ruby-forum.com/t/need-a-simplified-understanding-of-rubinius/115710/7 "2007-10-02T19:20:33Z")

</div>

On 9/28/07, Wilson B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > > > a hand?..tia dave
> 
> That is true, yeah. However, our more direct inspiration is the  
> Smalltalk-80 book. The last section of that book is a Smalltalk VM  
> written in Smalltalk.

Although that was done for pedagogical purposes, AFAIK, the  
Smalltalk-80 was never actually written in Smalltalk (or at least not  
executed that way).

Squeak’s VM is actually written in a language called Slang  
[Slang](http://wiki.squeak.org/squeak/2267) which is a small language with a  
restricted Smalltalk syntax easily translated to C.

At one point Rubinius was going down a similar path, but the last time  
I looked, they had moved on to hand written C, unless it’s changed  
again.

–  
Rick DeNatale

My blog on Ruby  
[http://talklikeaduck.denhaven2.com/](http://talklikeaduck.denhaven2.com/)

---

<div class="post-metadata">

**Author:** ![bitsmith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/9de053/32.png) [@bitsmith](https://www.ruby-forum.com/u/bitsmith)\
**Post date:** [October 2, 2007, 9:14pm UTC](https://www.ruby-forum.com/t/need-a-simplified-understanding-of-rubinius/115710/8 "2007-10-02T21:14:54Z")

</div>

On 10/2/07, Rick DeNatale [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> [Slang](http://wiki.squeak.org/squeak/2267) which is a small language with a  
> restricted Smalltalk syntax easily translated to C.
> 
> At one point Rubinius was going down a similar path, but the last time  
> I looked, they had moved on to hand written C, unless it’s changed  
> again.

Actually, the hand-written C is a cheat until Cuby is mature enough to  
handle the bits of the VM that can’t be written in Ruby. (Cuby is to  
Ruby like Slang is to Smalltalk.)

---

<div class="post-metadata">

**Author:** ![bitsmith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/9de053/32.png) [@bitsmith](https://www.ruby-forum.com/u/bitsmith)\
**Post date:** [September 30, 2007, 5:02am UTC](https://www.ruby-forum.com/t/need-a-simplified-understanding-of-rubinius/115710/9 "2007-09-30T05:02:34Z")

</div>

On 9/29/07, gabriele renzi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> legacy" 🙂

I was thinking of all of those. Five or so out of all of the language  
implementations, to mind mind, counts as “not often”. 🙂
