Great news! I tried it on fresh 1.4 and I got: SmalltalkImage(Object)>>doesNotUnderstand: #shutDownImage: HzImageWriter>>writeImage: Do you plan to create a loader too? To be able to load objects from different image file. -- Pavel On Thu, Apr 26, 2012 at 1:00 PM, Guillermo Polito <guillermopolito@gmail.com> wrote:
First public push of the first step of the hazelnut GSoC project :)
In a nutshell
For those who didn't know SystemTracer (the father): It is a tool that traces a graph of objects and writes an image from it.
ImageWriter is a refactored, renamed and repackaged version of SystemTracer2 with the following changes: - The image format can be provided as a parameter. - You have to provide an SmalltalkImage object as root to write the image (so in the future we can write bootstrap with this). - The object format was reified in objects. So the code is easier to understand + change, and people can learn how are our objects in memory easily :D.
Right now, only 32 bit image format is supported.
Structure
- ImageWriter-Core has the image formats and the image writer in itself - ImageWriter-ObjectFormats contains objects that represent the memory layout of the objects and it's headers. - ImageWriter-Tests has some tests.
Tests done
 - Only tested in Pharo-1.4  - There are specific tests written for the size and headers of the objects  - Also, I've written a Pharo-1.4 image and then run the tests in the copied image. Only one failure compared to the original :)
Known Bugs :)
 - WeakRegistryTest>>#testFinalizationWithOnFork is failing, and when I run it manually it works :/. In the image I use to write, it does not happen, only in the clone.  - When opening the new image, the window is too small. It is not respecting the original image size. Don't know yet what is the problem.
How To Download
Gofer it    squeaksource3: 'ImageWriter';    package: 'ImageWriter-Core';    package: 'ImageWriter-ObjectFormats';    package: 'ImageWriter-Tests';    load
How to Use it
 HzImageWriter new    format: HzCogImageFormat new; "or HzInterpreterImageFormat new"    imageFileName: 'someFile.image';    onInitializeDo: [ "Some initialization?" ];  "this is optional, probably the same as an startup script, probably nonsense"    writeImage: Smalltalk "Yes, we provide the our lovely global Smalltak, but any SmalltalkImage instance could be"
Next steps on this direction
 - support to write an isolated image different from the host one (I'll know what I need later, hehe)  - class comments!  - metacello configuration  - better api :)
Links
http://ss3.gemstone.com/ss/ImageWriter.html
Cheers, Guille