Summary: Neo Smalltalk groups
Last updated at 7:44 pm UTC on 3 March 2005
Reported by Jecel Assumpcao Jr
What problem is being addressed
It should be a powerful enough infrastructure to enable computing nodes to have safe local views of a virtual worldwide image. It should be simple enough so that it can be explained to, and used by, children. It should be simple for them to program something like, for example, the SqueakMap using this.
How it solves the problem
"Groups" are used as a unit of swapping for virtual memory, a unit of concurrency, a unit for allocation of main memory (garbage collection) and even security related issues. These concepts certainly overlap, but are not the same thing so using a single structure to implement them means that typical use will be simpler at the cost of making less common use more awkward.
The other concept is that objects are built from one or more "facets". These facets can be stored in different groups, but once loaded into memory they are combined into a single entity. A state vector (instance variables) combines data from all facets and the code caches (and PICs) combine the various method dictionaries. Note that an object can have facets in groups other than those currently loaded into memory, but the partial view that is created there is enough for the currently executing code. If more is needed, it will be loaded and the partial view will be updated.
Groups have compressed representations and are immutable. The objects they contain can only be changed by creating a new group and associating the two as a sequence of versions of the same thing. When a group is loaded into memory it remains compressed and only the facets actually needed are expanded and patched ("swizzled") to use in-memory pointers. References to stuff in other groups form a dependency graph and cause these groups to be loaded on an "object not present" fault.
It is possible to have more than one partial view of an object in a single node's memory. Having a different method cache for each viewpoint is not possible due to the shared PICs, so the alternative of giving the same object more than one "virtual class" is used instead. A different set (actually sequence since methods with the same name in earlier facets override those in later ones) of facets is combined to form each virtual class.
This description sounds complicated, but the visual representation should make it easy to understand and use.
Useful links
http://www.merlintec.com:8080/software/8 is a more detailed description (needs to be updated to use the same terms as above).
http://citeseer.ist.psu.edu/smith96simple.html describes the subjective version of Self (called "Us") and some applications of multiple viewpoints.
http://www.dolphinharbor.org/dh/smalltalk/documents/ has links to the PIE documents, which talk about multiple viewpoints in Smalltalk.
For coherence I think the author should write the sections above this line.
People can add what they want to these later sections, and can suggest that the author change the rest.
What's cool about it
What's not
- It doesn't exist yet.
- It is being designed for special hardware and so uses things like object tables which are not efficient on stock hardware.
Commentary
Back to New Modules