10
UMLClass
60
130
120
60
<Vool>
--
Concrete Tree
UMLClass
60
70
120
60
<Ruby>
--
Abstract Tree
UMLClass
60
190
120
60
<Mom>
--
Concrete Tree
+ Linked List
UMLClass
60
250
120
50
<Risc>
--
Linked List
UMLClass
60
300
120
50
<Arm>
--
Linked List
UMLClass
60
350
120
50
<Elf>
--
Binary / Array
UMLClass
220
70
670
60
Ruby is parsed into and abstract syntax tree. "Abstract" means all nodes are
represented by one class. Compiling to Vool happens by visitor pattern.
UMLClass
220
130
670
60
Vool (Virtual object oriented Language) is ruby without the fluff. Just simple oo.
Vool uses a concrete syntax tree, meaning one class per kind of statement.
Code to compile to Mom is in the statement classes.
UMLClass
220
190
670
60
Mom (Minimal object machine) is a very simple object oriented machine. It only deals in objects,
incuding the calling convention. A first pass still uses a tree structure to represent control.
The final representation is a list of instructions.
UMLClass
220
250
670
50
The Risc (reduced intruction set computer) layer is an (sane) subset of ARM. It models only those
instructions needed to implement Mom, about 20. It deals in memory, logic and jumps.
UMLClass
220
300
670
50
The arm chip is the most sold/used in the world, so it is our first "target". Arm has a simple
instruction set and we only use the part to implement what is used in Risc.
UMLClass
220
350
670
50
The lowest level, achieved by assembling arm instructions, is binary code that a cpu can execute.
Elf is used to wrap it into a file so Linux can start it. Elf includes debug info too.