A completely object oriented machine
A fully self describing object system without external dependencies capable of executing dynamic object oriented languages like ruby or python.
The goal is to execute object oriented code without external dependencies, on modern hardware.
It must be possible to compile higher level, dynamic, object oriented languages into a typed intermediate representation, 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. No interpretation.
Using the compilation method on it's own runtime (and bootstraping with an exising vm), it is possible to write the whole system in a dynamic oo language (ruby), thus removing the two language problem (having to choose between nice and fast)
A first version of the lower level intermediate representation is now done. Currently there is staticaly typed layer is called SOML (salama object machine layers), which has roughly c-ish semantics, and introduces several new concept:
- Object based memory (no global memory)
- Multiple return addresses based on type
- Multiple implementations per function based on type
- Implicit type tracking using adaptive code
- Explicit message and frame objects(no stack)
- Register machine abstraction
- Extensible instruction set
An abstract risc like register level defines some abstraction from the actual hardware. The soml compiler compiles to this level, but a mapping to Arm is provided to produce working binaries.
There is also an interpreter (mostly for testing) and a basic visual debugger which not only helps debugging, but also understanding of the machine.
The short introduction is under the architecture menu.
The section on SOML gives an overview of the system layer.
The full documentation is in form of a gitbook and can be viewed here.
Last but not least, i try to get recent developments down on paper when they are still fresh.
26.07.16: The Road Ahead
07.03.16: Mixup Of Levels
28.11.15: One Compiler Down One To Go