Updating system classes.
Andrew P. Black
black at cse.ogi.edu
Sat Jun 7 23:51:46 UTC 2003
At 16:29 -0700 06/06/2003, Andrew P. Black wrote:
>Along the way, I encountered a need to clean up the various kinds of
>Association, for example, so that ReadOnlyVariableBindings print as
>a -> b. But that is another topic.
Ok, so let's switch topic. I haven't been Squeaking for a bit, so
please be patient. I see this as a modest contribution to the Kernel
Cleaning Project, and it has given me an appreciation of how
difficult a task KCP is.
I decided, just for fun, to try to rationalize Association,
ReadOnlyVariableBinding (which should probably be called
ReadOnlyAssociation), and the two kinds of WeakAssociation.
First I wrote some tests, which duly failed in six places:
with Associations, WeakKeyAssociations, and ReadOnlyVariableBindings,
#one->1 is equal to #one->2
with ReadOnlyVariableBindings and WeakValueAssociations, only
the key is printed by printOn:
I think that I know what = should do, but now I'm asking the
customer: how should ReadOnlyVariableBindings and
WeakValueAssociations print? I am willing to believe that some
distinction between ReadOnlyVariableBindings and ordinary
associations is desirable, but I don't believe that omitting the
value is the right distinction! I suggest either
just like an association, or
to indicate the unchanging character of the mapping. I claim that
WeakValueAssociations should print just like WeakKeyAssociations,
i.e., the same as Associations.
Note that storeOn: passes my tests in every case, because here the
actual class name is printed on the stream.
OK, so I have implemented several new classes:
and they pass my tests.
So now the next question is: how do I install them in my image, that
is, use them to replace the corresponding classes without the APB
prefix. I can't rename APBAssociation to Association, because
Association already exists. I can't delete the class Association, or
rather, I can, but it crashes my image silently. I would think that
moving Association to Undefined, and then renaming APBAssociation to
Association, followed by 'becoming' all of the old Associations to
the new Associations might work, but I'm not clear how to do this in
Finally, what is the appropriate stage to hand this off to the KCP?
Right now I have a nice clean change set, but all it does is define a
few tests and some APB-classes. If I succeed in installing all of
this stuff, I won't have that any more. What would KCP like?
What's a weekend Squeaker to do? (OK, the answer is probably to
start with a less invasive project. But I plan to have a student
this summer work on installing the Collections that Nathanael and I
wrote with traits into an image *in place of* the ordinary
collections. This will be a similarly invasive change, and I would
like to figure out how to do it.)
More information about the Squeak-dev