Design Principles Behind Smalltalk, Revisited

Paul D. Fernhout pdfernhout at kurtz-fernhout.com
Tue Dec 26 18:35:57 UTC 2006


Jecel Assumpcao Jr wrote:
> if you haven't seen it already, you might find the description of the Us
> variation of Self (which makes it a kind of Smalltalk in my view)
> interesting:
> 
> 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.

I spent a few months working on adding prototypes to Python inspired by 
Squeak, Self, and Morphic (most of the effort was GUI related, as the 
internal mechanism was fairly easy to add to Python); I succeeded, to some 
extent, see:
   http://patapata.sourceforge.net/
but I did not like the results, see my postmortem critique here:
   http://patapata.sourceforge.net/critique.html

I would be curious about your opinion, as someone also very interested in 
prototype based systems. :-) Essentially, the part of the critique of most 
interest (or disinterest :-) to you would be this section: """The biggest 
issue is that I learned that the seductive idea of prototypes may not be 
as powerful as its execution (especially as an add-on to an existing 
language). Consider what I wrote to someone else: "I've been repeatedly 
confronted with the fact that prototype languages are powerful and elegant 
but ultimately, like Forth, end up losing something related to documenting 
programmer intent. Documenting intent is one of the most important part of 
programming, and that is something that Smalltalk's formal class structure 
enforces for most code over Self, just like C's named variables document 
intent which gets lost manipulating Forth's data stack. Plus, it is hard 
for any great language feature to offset issues like lack of community or 
lack of comprehensive libraries." And after at person suggested you 
usually need to name things before you can share them, I replied: "And I 
agree on the issue of "naming" something in order to share it. Which gets 
back to the issue I mentioned of "documenting intent". With the PataPata 
system I made for Python, there was a choice point where I decided that 
prototypes used by other prototypes as parents needed to be named (a 
difference from Self). And I liked that choice. But then, what am I really 
gaining over Smalltalk (except not having a class side, which is nice, but 
is it worth the extra trouble and confusion?)" So, this leaves me 
questioning the whole move to prototypes. That person also pointed out 
previous work on "Exemplar based Smalltalk", so that is something I should 
look into further, perhaps as a compromise with Prototypes when I 
understand such previous work better."""

Anyway, while I still like prototypes in the same way I like Forth (or now 
its functional cousin, "Joy");
   http://www.latrobe.edu.au/philosophy/phimvt/joy/forth-joy.html
it's just not clear to me that the cost (of being different from plain 
Smalltalk) is worth it to not have a class side (which just gets 
reinvented in other ways anyway, as one distinguished between the exemplar 
an instance inherits from versus the code used to actually build an 
appropriately configured prototype/instance on demand).

> You might also want to see Dan's Squeak-on-JVM (I don't have Java here,
> so I can't test whether this URL still works):
> 
> http://Weather-Dimensions.com/Dan/ForwardToThePast.jnlp

Thanks for the link; yet it works. It hangs on me when I try to do certain 
things with it (like resize the window) and some other things are broken 
(like when I try to save the image) but I can evaluate "1 + 1" and get 2 
in a Workspace! Launching via Web Start works exactly the way I hoped; one 
click (and a security question) later and I am in Squeak. Terrific! Great 
proof of concept. Redrawing is slower than it seems to me it has to be, 
but just stuff to start improving.

I'd imagine one could take a similar approach and get a similar thing 
working under an Apache license (the same idea perhaps but with an even 
earlier version (1.1? 1.13?) of Squeak?). Although even then it is GPL 
incompatible, and being GPL compatible is very important to me. Especially 
for Java, given Sun is going GPL instead of Apache. Frustrating, once 
again. So close, but so far.

Still, people run GPL applications on top of Apache web servers, so maybe 
an Apache Squeak core would be good enough?  Musing out loud, in order to 
make something like this meet the FSF definition of "free" or OSI "open 
source", I would need to know the details of what Squeak version was in 
the end put under Apache? And what an Apache license implied about 
applications written on top of it?

> 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.

> While I can see how Python might seem like a success to be emulated from
> a Squeaker's viewpoint, I am sure the notion would seem very funny to a
> VisualBasic programmer.
> 
> I think there is still an important role for systems which can be
> understood by a single person (an entirely separate issue from making it
> easy or not to collaborate). There are huge advatanges of being able to
> just pick up black boxes created by other people but there are also
> costs - such systems tend to grow exponentially in size for linear gains
> in functionality.

Good point.

--Paul Fernhout



More information about the Squeak-dev mailing list