Deep into Smalltalk

23
Hazelnut dynamically create a kernel in a reflexive language Benjamin Van Ryseghem

Transcript of Deep into Smalltalk

Page 1: Deep into Smalltalk

Hazelnutdynamically create a kernel

in a reflexive language

Benjamin Van Ryseghem

Page 2: Deep into Smalltalk

2

Introduction

Page 3: Deep into Smalltalk

Introduction 3

Seed

● PineKernel: MicroSqueak portage

● Hazelnut: build a new kernel starting from Pharo kernel

● Both based on Micro-Squeak

Page 4: Deep into Smalltalk

Introduction 4

Micro-Squeak

● John Maloney's project● Done in 2004● Released in september 2010● Proof of concept: minimal kernel (47 Classes)

Page 5: Deep into Smalltalk

5

How to create a new image in 3 steps ?

Page 6: Deep into Smalltalk

6

Contents

I – Create a new kernel

II – Isolate the new kernel

III – Create the new image

Page 7: Deep into Smalltalk

7

Contents

I – Create a new kernel

II – Isolate the new kernel

III – Create the new image

Page 8: Deep into Smalltalk

Create a new kernel 8

Which classes need to be collected ?

● First approach: collect all the classes needed by Object to have an autonomous system● About 800 classes on 1800 (½ of the system)

● Second approach: provide a list of classes● Start from Object● Recursively analyze dependencies● About 200 classes on 1800 (1/9 of the system)

Page 9: Deep into Smalltalk

Create a new kernel 9

How to to build a new kernel structure ?

I. Mark objects● Trace the objects and mark wanted ones

– Based on SystemTracer2

● Filling up a list

● Easy process● It works● No living kernel

Page 10: Deep into Smalltalk

Create a new kernel 10

How to to build a new kernel structure ?

II. A new “namespace”● Create a new System Dictionary

– HazelSmalltalk

● Filling it up with copies of wanted classes– Perform a very deep copy– Take care of the class and metaclass hierarchy

● No recompilation● Not handled by the system

Page 11: Deep into Smalltalk

11

Contents

I – Create a new kernel

II – Isolate the new kernel

III – Create the new image

Page 12: Deep into Smalltalk

Isolate the new kernel 12

Remove dependencies to unneeded classes

● Detect references to unwanted classes

● Fix them using a wrapper (HazelMissingVariable)

I. HazelTracer2

Page 13: Deep into Smalltalk

Isolate the new kernel 13

Remove dependencies to unneeded classes

Page 14: Deep into Smalltalk

Isolate the new kernel 14

Remove dependencies to unneeded classes

Page 15: Deep into Smalltalk

Isolate the new kernel 15

Remove dependencies to unneeded classes

● Detect references to the Pharo world in methods

● Fix them– A method: remove it– A class variable: set it to nil

II. HazelKernelBuilder

Page 16: Deep into Smalltalk

Isolate the new kernel 16

Bootstrap the new kernel

I. HazelTracer2Nothing to do :)

Page 17: Deep into Smalltalk

Isolate the new kernel 17

Bootstrap the new kernel

● Change Pharo references into Hazel dependencies– Fix methods literals– Change the class of

HazelSmalltalk– Change the class of the

HazelSmalltalk associations

II. HazelKernelBuilder

Page 18: Deep into Smalltalk

18

ContentsContents

I – Create a new kernel

II – Isolate the new kernel

III – Create the new image

Page 19: Deep into Smalltalk

Create the new image 19

SystemTracer2

● Tracing and writing process already coded● Collect all the needed objects● Check if there is in the granted list● Finally serialize them in a binary stream

● Error if some objects change between traces● Had to fix SystemTracer2 for Pharo

Page 20: Deep into Smalltalk

Create the new image 20

Micro-Squeak like serialization

● First approach● Collect all the needed objects● Parse them twice● Finally serialize them in a binary stream

● Objects untraced ● Error during the serialization● Code hard to debug or rewrite

Page 21: Deep into Smalltalk

Create the new image 21

What if we switch the SOA ?

● Change the SOA● GarbageCollect unwanted objects● Handled by the VM

● Can't switch some classes● Modify method context during execution● Hangs the VM

Page 22: Deep into Smalltalk

22

Next Steps

● Load code● What is the minimal image able to go back ?● How to load code without compiler ? (Fuel ?)

● Declarative kernel

● Get a better definition of the kernel

Page 23: Deep into Smalltalk

23

Conclusion

● Create a new structure

● Isolate it

● Create a new image