objectification (was: Jython vs Squeak for teaching multimedia)

Jecel Assumpcao Jr jecel at merlintec.com
Tue Jul 9 03:38:44 UTC 2002


On Friday 05 July 2002 13:27, Alan Kay wrote:
>       On this list, I've mentioned several times that variables and
> instances should be objectified. This has been done in several other
> systems to provide much better leverage on a number of important
> problems.

I don't know what you mean by objectified instances, but had an 
interesting idea on how to deal with variables. I borrowed the term 
"slices" from ZX81 Basic, but the inspiration was mostly from APL.

A slice would be related to a part of an object (or a parts of several 
objects) in a similar way that a stream is related to its collection. 
So if I create

     s := ArraySlice on: #(6 5 4 3 2 1 0) from: 2 to: 4

then I could do something like

            s put: 9

and have #(6 9 9 9 2 1 0) as a result. This might also be interesting

         v := VariableSlice on: 7 at 8 named: #y

And we should be able to combine slices in various neat ways. The 
original idea was more as a GUI level device and David Ungar has 
recently partly implemented this in Self. There is a little more about 
slices at http://www.lsi.usp.br/~jecel/tech.html

>       Messages and message sending could be more objectified. This
> would allow a much more flexible approach to trying delegation
> schemes, finding alternatives to inheritance, etc.
>       Another larger area that I'm astounded that no grad student has
> done a thesis on, would be to take the "Smalltalk VM in itself" that
> we use for bootstrapping, and make it into a real OOP model itself. A
> large part of this is just to restructure the messy workable thing we
> have now.

My Ecoop95 paper (http://www.lsi.usp.br/~jecel/jabs7.html with a later 
version published as a chapter in a book) was exactly about this. If 
you find that grad student in the next few months, have him (is it ever 
a "her" in this field?) talk to me.

>      Methods could stand to be more objectified. I'd like to see
> methods that have a vertical bar down the middle. On the left would
> be the "reference code": the simplest code that does what the method
> should do. On the right would be the "pragmatic code": a bunch of
> cases for running the meaning efficiently. You should be able to run
> both sides when debugging, etc.

One big difference between the reference code and the pragmatic code is 
the cacheing of results. Up to a certain point it would be possible to 
transform the former into the latter by adding annotations for a "cache 
manager". I have more details about this in the same page that talks 
about slices.

>      Another method objectification would be to have many polymorphic
> methods be instances of a class that guards the meaning of the
> polymorphism. This is part of having a model for both variables and
> "slots", etc.

In the CoDA reflective Smalltalk system, this would be handled by 
replacing an object's default Protocol meta-object.

>       One way to play with this would be to just take the three
> "principles" above and make a complete model. This is pretty easy.
> The important thing that CLOS (e.g.) did was to make the additions to
> the models compilable so that metachanges could be as efficient as
> the kernel. We kind of have this with SLANG, but the whole apparatus
> could be much much cleaner.

A Jitter in Smalltalk would do the job.

-- Jecel



More information about the Squeak-dev mailing list