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.