update parfait doc
This commit is contained in:
parent
5c7367d8f5
commit
d9f29765df
@ -2,34 +2,79 @@
|
|||||||
|
|
||||||
%h1= title "Parfait, a minimal runtime"
|
%h1= title "Parfait, a minimal runtime"
|
||||||
|
|
||||||
%h3#type-and-class Type and Class
|
RubyX uses the these following classes at compile time to build the base of an object
|
||||||
|
oriented system.
|
||||||
%p
|
%p
|
||||||
Each object has a type that describes the instance variables and basic types of the object.
|
In RubyX every object really is an object and data is hidden to the language level.
|
||||||
Types also reference the class they implement.
|
|
||||||
Type objects are unique and constant, may not be changed over their lifetime.
|
|
||||||
When a field is added to a class, a new Type is created. For a given class and combination
|
|
||||||
of instance names and basic types, only one instance every exists describing that type (a bit
|
|
||||||
similar to symbols)
|
|
||||||
%p
|
%p
|
||||||
A Class describes a set of objects that respond to the same methods (the methods source is stored
|
Objects have a Type and constant size. See memory for more on memory layout and
|
||||||
in the RubyMethod class).
|
management.
|
||||||
A Type describes a set of objects that have the same instance variables.
|
|
||||||
%h3#method-message-and-frame Method, Message and Frame
|
%h3 Types
|
||||||
|
%ul
|
||||||
|
%li every object has a type as it's first variable
|
||||||
|
%li types are immutable
|
||||||
|
%li an object's type may change at run-time
|
||||||
|
%li
|
||||||
|
a type describes a class
|
||||||
|
%em at a certain time
|
||||||
|
%p
|
||||||
|
If we would be talking about a language, this would be like Javascript, or previously
|
||||||
|
=ext_link "Self." , "https://en.wikipedia.org/wiki/Self_(programming_language)"
|
||||||
|
Basically rubyx's types would be (immutable) prototypes in a
|
||||||
|
=ext_link "prototype based language." , "https://en.wikipedia.org/wiki/Prototype-based_programming"
|
||||||
|
|
||||||
|
%p
|
||||||
|
It may be easiest to understand types by how they are used. When rubyx parses a class,
|
||||||
|
it creates a Vool::Class, which in turn creates a Parfait::Class. This class carries
|
||||||
|
the Vool methods, basically the language code for the methods.
|
||||||
|
%br
|
||||||
|
At this point a type, representing the object layout as known at the time, is created.
|
||||||
|
Vool::Methods are compiled to binary (Parfait::Method) according to the type information
|
||||||
|
and stored in the type.
|
||||||
|
%br
|
||||||
|
If the class changes at run-time, ie variables are added or removed, a new type object is
|
||||||
|
created (with the updated layout) and the same ruby code is compiled to new Parfait::Methods.
|
||||||
|
|
||||||
|
%h3 Method, Message and Frame
|
||||||
%p
|
%p
|
||||||
The TypedMethod class describes a callable method. It carries a name, argument and local variable
|
The TypedMethod class describes a callable method. It carries a name, argument and local variable
|
||||||
type and several descriptions of the code.
|
type and several descriptions of the code:
|
||||||
The typed ast is kept for debugging, the register model instruction stream for optimisation
|
%ul
|
||||||
and further processing and finally the cpu specific binary
|
%li The risc instructions
|
||||||
represents the executable code.
|
%li Cpu level instructions
|
||||||
|
%li Binary code
|
||||||
%p
|
%p
|
||||||
When TypedMethods are invoked, A message object (instance of Message class) is populated.
|
When TypedMethods 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.
|
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.
|
Frames are also created at compile time and just reused at runtime.
|
||||||
%h3#space-and-support Space and support
|
=link_to "Calling" , "calling.html"
|
||||||
|
describes more detail about the calling convention, while
|
||||||
|
=link_to "method resolution" ,"method_resolution.html"
|
||||||
|
described how the methods are found, mainly at run-time.
|
||||||
|
|
||||||
|
%h3 Memory
|
||||||
%p
|
%p
|
||||||
The single instance of Space hold a list of all Types and all Classes, which in turn hold
|
The single instance of
|
||||||
|
%b Space
|
||||||
|
holds a list of all Types and all Classes, which in turn hold
|
||||||
the methods.
|
the methods.
|
||||||
Also the space holds messages and will hold memory management objects like pages.
|
The space also holds messages and will hold memory management objects like pages.
|
||||||
%p Words represent short immutable text and other word processing (buffers, text) is still tbd.
|
%p
|
||||||
%p Lists (aka Array) are number indexed, starting at one, and dictionaries (aka Hash) are mappings from words to objects.
|
%b Pages
|
||||||
|
are currently not implemented but will be used to realise the aproach described in
|
||||||
|
the page about
|
||||||
|
=link_to "memory management." , "memory.html"
|
||||||
|
|
||||||
|
%h3 Util
|
||||||
|
%p
|
||||||
|
There are off course several utility classes necessary just to implement the type
|
||||||
|
and class system.
|
||||||
|
%ul
|
||||||
|
%li Words represent short immutable text and other word processing (buffers, text) is still tbd.
|
||||||
|
%li Lists (aka Array) are number indexed containers
|
||||||
|
%li Dictionaries (aka Hash) are mappings from words to objects.
|
||||||
|
%li
|
||||||
|
DataObjects are just objects that hold data. Data can not be accessed at the
|
||||||
|
language level, only through methods that are programmed at the risc level.
|
||||||
|
%li Integers, which are DataObjects that hold data interpreted as an integer
|
||||||
|
Loading…
Reference in New Issue
Block a user