2015-11-23 18:51:52 +01:00
|
|
|
---
|
|
|
|
layout: soml
|
|
|
|
title: Parfait, soml's runtime
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
#### Overview
|
|
|
|
|
|
|
|
Soml, like ruby, has open classes. This means that a class can be added to by loading another file
|
|
|
|
with the same class definition that adds fields or methods. The effect of this is that in designing
|
|
|
|
the runtime, we can concentrate on a minimal function set.
|
|
|
|
|
|
|
|
This means all the functionality the compiler need to get the job done, mostly class and type
|
|
|
|
structure related functionality with it's support.
|
|
|
|
|
|
|
|
### Value and Object
|
|
|
|
|
|
|
|
In soml object is not the root of the class hierarchy, but Value is. Integer, Float and Object are
|
|
|
|
derived from Value. So an integer is *not* an object, but still has a class and methods, just no
|
|
|
|
instance variables.
|
|
|
|
|
2016-02-26 04:10:56 +01:00
|
|
|
### Type and Class
|
2015-11-23 18:51:52 +01:00
|
|
|
|
2016-02-26 04:10:56 +01:00
|
|
|
Each object has a type that describes the instance variables and types of the object. It also
|
|
|
|
reference the class of the object. Type objects are constant, may not be changed over their
|
|
|
|
lifetime. When a field is added to a class, a new Type is created.
|
2015-11-23 18:51:52 +01:00
|
|
|
|
|
|
|
A Class describes a set of objects that respond to the same methods (methods are store in the class).
|
2016-02-26 04:10:56 +01:00
|
|
|
A Type describes a set of objects that have the same instance variables.
|
2015-11-23 18:51:52 +01:00
|
|
|
|
|
|
|
### Method, Message and Frame
|
|
|
|
|
|
|
|
The Method class describes a declared method. It carries a name, argument names and types and
|
|
|
|
several description of the code. The parsed ast is kept for later inlining, the register model
|
|
|
|
instruction stream for optimisation and further processing and finally the cpu specific binary
|
|
|
|
represents the executable code.
|
|
|
|
|
|
|
|
When Methods are invoked, A message object (instance of Message class) is populated. Message objects
|
|
|
|
are created at compile time and form a linked list. The data in the Message holds the receiver,
|
|
|
|
return addresses, arguments and a frame. Frames are also created at compile time and just reused
|
|
|
|
at runtime.
|
|
|
|
|
|
|
|
### Space and support
|
|
|
|
|
|
|
|
The single instance of Space hold a list of all Classes, which in turn hold the methods.
|
|
|
|
Also the space holds messages will hold memory management objects like pages.
|
|
|
|
|
|
|
|
Words represent short immutable text and other word processing (buffers, text) is still tbd.
|
|
|
|
Lists are number indexed, starting at one, and dictionaries are mappings from words to objects.
|