[ANN] ImageWriter, the SystemTracer's son

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[ANN] ImageWriter, the SystemTracer's son

Guillermo Polito
 
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