--- layout: site --- <div class="row vspace10"> <div class="span12"> <h2 class="center">Compiling Ruby to Binary.</h2> <div> <p class="center"> <span> Putting wings on ruby to let you fly (may take X years). </span> </p> </div> </div> </div> <div class="row vspace20"> <div class="span4"> <h2 class="center">Goal</h2> <p> The goal is to execute (not interpret) object oriented code without external dependencies, on modern hardware. </p> <p> This means compiling dynamic code into binary. Using type knowledge at run-time we optimise and cache method dispatch for know types. As the system is 100% in ruby, the ultimate goal is to carry on the compilation at run-time, ie after the program has started. <b>No interpretation.</b> </p> <p> Using the compilation method on it's own runtime (and bootstraping with an exising ruby), it is possible to write the whole system in a dynamic oo language (ruby), thus <b>removing the two language problem</b> (having to choose between nice and fast) </p> </div> <div class="span4"> <h2 class="center">Status</h2> <p> Work is progressing on the ruby compiler. This uses a pure <a href="https://github.com/whitequark/parser"> ruby parser</a> to create: <ul> <li> An Object model of <a href="/typed/parfait.html">classes, types</a>, methods and basic types </li> <li> Methods for every type (may be several per class) </li> </ul> </p> <p> The lower level, strongly typed layer is <a href="/typed/typed.html">finished</a>. While it has well known typed language data semantics, it introduces several new concept: <ul> <li> Object based memory (no global memory) </li> <li> Object oriented calling semantics (not stack based) </li> <li> Inline method caching. </li> <li> <a href="https://github.com/ruby-x/ruby/tree/master/lib/register" target="_blank">Register machine abstraction</a></li> <li> Extensible instruction set, with arm implementations </ul> </p> <p> An abstract risc like register level defines some abstraction from the actual hardware. The type compiler compiles to this level, but a mapping to Arm is provided to produce <b>working binaries</b>. </p> <p> There is also an interpreter (mostly for testing) and a basic <a href="https://github.com/ruby-x/salama-debugger"> visual debugger</a> which not only helps debugging, but also understanding of the machine. </p> </div> <div class="span4"> <h2 class="center">Docs</h2> <p> The short introduction is under the <a href="/rubyx/layers.html">architecture</a> menu. </p> <p> The section on the intermediate rerepresentation is <a href="/typed/typed.html">here</a>. </p> <p> The <a href="/project/motivation.html">about</a> section has some info of when and how this started. If you feel like contributing <a href="/contribute.html">read this</a> or write a <a href="https://groups.google.com/forum/#!forum/salama-dev"> mail </a>. </p> <h2 class="center">News</h2> <p> Last but not least, i try to get recent developments down on paper when they are still fresh. </p> <p> {{ site.posts[0].date | date: "%d.%m.%y" }}: <a href="{{ site.posts.first.url }}">{{ site.posts[0].title }} </a> </p> <p> {{ site.posts[1].date | date: "%d.%m.%y" }}: <a href="{{ site.posts.first.url }}">{{ site.posts[1].title }} </a> </p> <p> {{ site.posts[2].date | date: "%d.%m.%y" }}: <a href="{{ site.posts.first.url }}">{{ site.posts[2].title }} </a> </p> </div> </div>