Design Principles Behind Smalltalk, Revisited

Paul D. Fernhout pdfernhout at kurtz-fernhout.com
Wed Dec 27 02:39:30 UTC 2006


Jecel Assumpcao Jr wrote:
> Paul D. Fernhout wrote:
> 
>>Jecel Assumpcao Jr wrote:
>>
>>>[Us paper]
>>>http://citeseer.ist.psu.edu/5049.html
>>
>>Thanks for the link. I'm not sure how this differs from regular Self? And 
>>the paper is not online that I could find.
> 
> 
> Clicking on the "PDF" link in the upper right corner of that page worked
> for me just now. Self is an objective language, which means that the
> code to be executed depends on the type of the receiver and on the
> message selector. Us is a subjective language where the code to be
> executed also depends on the context from which the message was sent.
> This is an extension of the work on "layers" done in Smalltalk in the
> PIE project.
> 
> An idea closely related to the "viewpoints" introduced in Us is "roles"
> where the code also depends on the context. The difference is that when
> you change viewpoints all objects change at the same time (like moving
> your head in a 3D environment) while when you change a role only a
> single object is affected (like rotating an object in a 3D environment).
> Both of these features address some of your complaints about using
> objects exclusively for everything.

Thanks for the link and the explanation (Joshua also pointed me to the 
right link).

I just read the paper (well, my mind glazed over about half way through 
but I kept at it, skipping a few implementation details). I definitely 
liked the history review bit, including where is mentions "the notion of 
an object being a 'figment of its viewer's beliefs' is a feature in Alan 
Kay’s sketch of a language he called Rainbow" -- detailed apparently an 
unpublished Xerox Parc report of the 1980s (I would love to learn more 
about that). I repeatedly see why Alan Kay is surprised Squeakers are so 
satisfied with Smalltalk-80 and how he wants to go further. Clearly there 
are a lot of good ideas to explore, even if we limit ourselves to the 
1980s. :-)

I kind of lost faith in their proposal when their model had a common 
object ID across all layers; since part of my suggestion would be that 
what are the relevant objects would differ by perspective. Also, I am not 
sure they built a compelling case for adding complexity by not having 
enough worked out examples of how perspectives as they outlined them were 
a really big win. But in any case it is a clever set of ideas and shows 
that a lot of thinking can go point this which is moving *beyond* the 
original "Design Principles Behind Smalltalk", which was the main point I 
was making. And they make clear in their literature review how the notion 
of adding "context" is one many people have explored.

There are also solutions to some of the issues they raised in other 
directions, for example the classical one of the debugger not working when 
you mess up how any window in the system opens. In the PataPata 
(prototypes for Python) case, every prototype has a "world" it belongs to, 
and I have the debugger in a different "world", which has its own copies 
of core classes, so you can break the Window class in one world, but the 
debugger can still debug it. Prior to the ParcPlace-Digital merger they 
were working on something similar at PP using a "firewall" or something 
(just heard of it in passing). I did not bring PataPata to the point where 
worlds were in completely separate processes though, so you can still hang 
the system in other ways; ideally I wanted worlds to each be in their own 
VM process and to communicate using sockets or other means of sharing 
state across images.

>>[patapata and documenting intent]
> 
> 
> I think the issue is unrelated to class vs prototypes and is actually
> about having a global catalog vs allowing loose objects. Even in
> Smalltalk-80 you have loose objects (like "Set class"), of course, by
> they are so closely coupled with cataloged objects that they don't
> matter. As always, there are tradeoffs. Doing things one way will make
> some stuff easier and others worse (without loose objects there is a
> strong temptation to use block where you should really be defining new
> objects, for example). We have a lot to learn about how to best organize
> systems, specially when they are modular.
> 

Good points. I'll need to think about them. One of the PataPata decisions 
was to reference parents by *name* rather than *pointer*. In self, key 
objects can have names, but they are still referenced by pointer. The 
PataPata choice gave me a little more flexibility in some ways I think -- 
by adding yet another layer of "late binding" to the system. (And 
accompanying overhead, of course).

>>[Squeak-on-JVM and licenses]
> 
> 
> I think the extra step of getting Squeak 1.1 relicensed as Apache after
> Apple had already agreed to relicense it as APSL 2 was more than we
> could have hoped for. All code written after that is in the process of
> being relicensed using the old X11 (often called "MIT") license. The
> latter is GPL compatible, so as long as you are willing to do your own
> replacement for Squeak 1.1 your legal needs would be met.
> 

That's one strategy I guess. I would expect it probably fairly difficult 
to extract useful parts from a combined system built on 1.1 without 
running into various problems though. I'll be more curious how the Apache 
license is interpreted in a Squeak context -- whether it is considered to 
flows through to applications built on it as "derived works" (and so they 
cannot be GPL) or whether the license just applies to Squeak itself and 
not things you put on it.

In thinking more deeply about Dan's accomplishment (Squeak on the JVM, 
which I had not been aware of) and looking at discussions on it from April 
and comparing it in my mind to other Smalltalk on the JVM Bistro, A Little 
Smalltalk, Talks2 (another Squeak derivative), etc.) a big issue is 
whether you use Java objects as the base Object (like Jython) or if you 
try to build your own objects from bits (as I imagine Dan's port does?). 
It would seem more efficient to use Java objects -- because then you could 
just use the Java garbage collection system and so on -- maybe even the 
byte codes, or maybe not. However, that would not be Squeak-as-it-is 
obviously, but it could potentially be a good Smalltalk (or Self or Us) 
anyway. :-) In the past, I have looked at the thoughts of porting GNU 
Smalltalk on the JVM (total VM rewrite plus other core changes), improving 
A little Smalltalk (much work), or using Sharp Smalltalk (the best match 
in some ways, as it was written for a similar system, dot net, but also 
missing a GUI and so on). Squeak would be my first choice of what to work 
from based on completeness and community, except for licensing issues.

Perhaps the biggest single issue is, how do we have a community around new 
things inspired by Squeak? I brought this issue up many years ago, but was 
basically shot down in flames of people pushing "Squeak the artifact" not 
"Squeak the community". Still, it seems like it is community which makes 
the value in the free and open source world. Yet the Squeak community 
seems closely tied to Smalltalk-80 and Squeak-as-it-is, in part as a 
self-selecting process -- yet ironically as Alan Kay himself keeps saying 
he wants something better.

>>>Note that some people were interested in getting Squeak to run on top of
>>>Strongtalk's VM and that would match your request for a non Smalltalk
>>>syntax (it is written in C++).
>>
>>Again, I don't care if the VM is written in Smalltalk. I think it is 
>>clever to make a VM in an abstract way, especially as it is already done 
>>(even though there are some disadvantages). I'd much rather work in 
>>Smalltalk syntax than other syntaxes (even Python). I was using it more as 
>>an example of Squeak applying a design principle which may be obsolete in 
>>the internet and free software age.
> 
> The whole point of the Slang trick was to be able to debug using all the
> nice Squeak tools instead of gdb. Some people don't want that while for
> others it makes all the difference in the world.

True, you can use all the nice tools when developing the VM under Squeak, 
but you can't use them when you actually test your code after it has been 
translated. So, an unexpected "barrier". Which was my point again -- there 
are always barriers (even just conceptual ones) -- at best we can pick 
where they will be (which is similar to what you said above on 
prototypes). "Design Principles Behind Smalltalk" implicitly says some 
barriers are more worthy of lowering then others; it's perhaps worthwhile 
25 years later to revisit which those should be.

Increasing complexity is easy; moving it around in tradeoffs is harder; 
reducing it is hardest and generally require a leap of the imagination.
Sorry to say it, but Squeak still seems pretty complex to me, and moreso 
than ten years ago. :-)

--Paul Fernhout




More information about the Squeak-dev mailing list