ruby-x.github.io/index.html
2015-12-13 11:35:16 +02:00

102 lines
3.9 KiB
HTML
Executable File

---
layout: site
---
<div class="row vspace10">
<div class="span12">
<h2 class="center">A completely object oriented machine</h2>
<div>
<p class="center"><span>
A fully self describing object system without external dependencies capable of executing dynamic
object oriented languages like ruby or python.
</span></p>
<p class="center"><span>
<a href="/2015/12/12/the-baton-moves-on-go-go-go.html">Pick up the baton</a>
</span></p>
</div>
</div>
</div>
<div class="row vspace20">
<div class="span4">
<h2 class="center">Goal</h2>
<p>
The goal is to execute object oriented code without external dependencies, on modern hardware.
</p>
<p>
No external dependencies means a system that defines an object oriented system language
that compiles to assembler. A sort of object version of c, but without using c.
</p>
<p>
It must be possible to compile higher level, dynamic, object oriented languages into this
language, in a similar way that c++ is compiled into c (at least used to be). So ruby compiles
to soml which compiles to assembler which compiles to binaries. <b>No interpretation.</b>
</p>
<p>
Most of the system is defined in a higher level language (ruby) and only a small runtime,
mostly the class sytsem and os acccess, needs to be written in the system language.
</p>
</div>
<div class="span4">
<h2 class="center">Status</h2>
<p>
A first version of the system language is now <a href="/soml/soml.html">done.</a>.
The staticaly typed language is called SOML (salama object machine language), has a roughly
ruby-ish syntax while c-ish semantics, and introduces several new concept:
<ul>
<li> Object based memory (no global memory) </li>
<li> Multiple return addresses based on type </li>
<li> Multiple implementations per function based on type </li>
<li> Implicit type tracking using adaptive code</li>
<li> Explicit <a href="/2015/06/20/the-static-call-chain.html">message and frame objects</a>(no stack)</li>
<li> <a href="http://book.salama-vm.org/register/machine.html">Register machine abstraction</a></li>
<li> <a href="http://book.salama-vm.org/register/instructions.html">Extensible</a> instruction set</li>
</ul>
</p>
<p>
An abstract risc like register level defines some abstraction from the actual hardware. The
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/salama/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="/salama/layers.html">architecture</a> menu.
</p>
<p>
The section on SOML gives an overview of the <a href="/soml/soml.html">system language</a>.
</p>
<p>
The full documentation is in form of a gitbook and can be <a href="/book.html">viewed 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>
<h4 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>