deep into smalltalk

Download Deep into Smalltalk

Post on 20-May-2015

352 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • 1. Hazelnutdynamically create a kernelin a reflexive languageBenjamin Van Ryseghem

2. Introduction 2 3. Seed PineKernel: MicroSqueak portage Hazelnut: build a new kernel starting fromPharo kernel Both based on Micro-SqueakIntroduction 3 4. Micro-Squeak John Maloneys project Done in 2004 Released in september 2010 Proof of concept: minimal kernel (47 Classes)Introduction4 5. How to create a new image in3 steps ? 5 6. ContentsI Create a new kernelII Isolate the new kernelIII Create the new image6 7. ContentsI Create a new kernelII Isolate the new kernelIII Create the new image7 8. Which classes need to becollected ? First approach: collect all the classes neededby 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)Create a new kernel 8 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 Create a new kernel 9 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 systemCreate a new kernel10 11. ContentsI Create a new kernelII Isolate the new kernelIII Create the new image11 12. Remove dependencies to unneeded classesI. HazelTracer2 Detect references to unwanted classes Fix them using a wrapper (HazelMissingVariable) Isolate the new kernel 12 13. Remove dependencies to unneeded classesIsolate the new kernel 13 14. Remove dependencies to unneeded classesIsolate the new kernel 14 15. Remove dependencies to unneeded classesII. HazelKernelBuilder Detect references to the Pharo world in methods Fix them A method: remove it A class variable: set it to nilIsolate the new kernel 15 16. Bootstrap the new kernelI. HazelTracer2Nothing to do :) Isolate the new kernel 16 17. Bootstrap the new kernelII. HazelKernelBuilder Change Pharo referencesinto Hazel dependencies Fix methods literals Change the class ofHazelSmalltalk Change the class of theHazelSmalltalk associations Isolate the new kernel 17 18. ContentsI Create a new kernelII Isolate the new kernelIII Create the new image18 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 PharoCreate the new image19 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 Create the new image 20 21. What if we switch the SOA ? Change the SOA GarbageCollect unwanted objects Handled by the VM Cant switch some classes Modify method context during execution Hangs the VM Create the new image21 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 22 23. Conclusion Create a new structure Isolate it Create a new image 23