Added basic FileStream implementation. Object hash values are now
[panda.git] / docs / bootstrapping.txt
blob4a833744aab76b1ec221e9e9bdcbfcc7b6ecbfc2
1 Bootstrapping an initial image is a tricky process, a real chicken-and-egg
2 problem.
5 Plan:
7 1.) Design Object Memory (Mostly Done)
10 2.)
12 Create C interfaces to some Smalltalk classes. These are needed for bootstrapping 
13 an initial image. For example, we need to manipulate method dictionaries at the
14 C level in order to initialize class objects.
16   Object
17     Class
18     Array
19     Dictionary
20     Symbol
21     Association
22     String
23     SmallInteger
24     Float
25     Character
26     CompiledMethod
28 4.)
30 Allocate important Smalltalk objects, which are only half-initialized at this
31 point. Set up rather complicated Class/Superclass/Metaclass hierarchy. Set
32 the instance size for each class.
34 Classes:
36   Object
37   True
38   False
39   UndefinedObject
40   MetaClass
41   Class
42   Array
43   ByteArray
44   Dictionary
45   Symbol
46   Association
47   String
48   CompiledMethod
49   BlockClosure
50   ...
51   
52 Instances:
54   nil
55   true
56   false
57   SymbolTable
58   Smalltalk (SystemDictionary)
60 Basic Class/Metaclass hierarchy:
62   Instance          Class               Metaclass
63   -------------------------------------------------------------
64   
65   Object            nil                  Object class
66   Behaviour         Object               Behaviour class
67   ClassDescription  Behaviour            ClassDescription class
68   Metaclass         ClassDescription     Metaclass class
69   Class             ClassDescription     Class class
71 3.)
73 Write a bootstrap lexer (Done) and parser in C. test lexer and parser as much as possible.
75 4.) 
77 Parse class descriptions, and properly initialize the class objects which were
78 allocated previously. This includes setting up the complicated Metaclass hierarchy.
80 Parse methods and add them to the class methodDictionaries.
82 5.)
84 Write a simple and minimal interpreter just for evaluating "3 + 4"
86 6.)
88 Testing! The Big Moment!
90 Does "3 + 4" actually evaluate without a crash? Does the result equal "7"?
92 After improving interpreter, do more complex tests
94 7.)
96 Write heap out to an image file. 
98 Ensure image loads correctly and that the tests in (6) pass.
102 Refactor Bootstrapping process. Consider whether to keep bootstrapping code or not.
106 Done! Now finish interpreter