Fear and loathing of the "perification" of Smalltalk
Alan Kay
alan.kay at vpri.org
Fri Sep 14 22:51:38 UTC 2007
Re: unification of blocks and methods (procedures).
I first saw this in EULER (Wirth and Weber ca 1966), but then saw an
earlier similar notion by Landin in ISWIM and its predessors. I used
the idea in my first OOP language (FLEX ca 1967-9), which also had
complete static nesting of scopes, etc.
But later I decided I didn't like blocks as values because they are
super time bombs when passed around and completely violate
encapsulation. I really wanted external objects (not internal blocks)
to be passed around, and wanted a simpler way to think of contexts
internally. So we left them out of the first few Smalltalks. (I still
don't like them ...)
Cheers,
Alan
At 03:11 PM 9/14/2007, Peter William Lount wrote:
>Hi,
>
>Martin Beck wrote:
>>Am Freitag, 14. September 2007 21:44:48 schrieb Peter William Lount:
>>
>>Hi Peter,
>>
>>
>>>>However, you indeed change the syntax of blocks for merging block syntax
>>>>with method syntax when you say
>>>>
>>>>[firstName: aString | firstName := aString ].
>>>>
>>>>aren't you?
>>>>
>>>Yes, the syntax adjusts towards a unification of Blocks and Methods.
>>>
>>Ok, but in my opinion, it is not necessary to adjust the syntax to
>>achieve this unification. I'd rather interprete a Method as a named Block.
>
>With the change that I suggest it can use either format. It's the
>most general approach.
>
>>Your syntax change does early binding of a name to an implementing
>>Block, which we don't want in Smalltalk... :)
>
>Please explain further, I didn't get your meaning.
>
>>The current block syntax does - as you stated, too - already
>>incorporate the features needed in a method, like temps and
>>arguments. So all you need, is to bind a Block to a class und a
>>special method name (which has to have the same arg count).
>>
>
>Yes, and resolve any "variable names" that need to be tied down to a
>scoping context. Either at the point the block is attached to a
>class (or traits node) or at the point when a block is evaluated as a block.
>
>
>>While running the VM/compiled code, the context decides, whether
>>the block is evaluated in a normal way, e.g. a home context and
>>correctly interpreting the return etc., or whether it is evaluated
>>in a method context. So we are at your differant evaluators again. ;)
>>
>
>Well I'm not sure that we'd need a new evaluator for that, but
>that's an interesting idea. Let me think on that some more.
>
>>
>>>>I personally like to see a Block as a simple collection of statements.
>>>>
>>>Yes, that's a very powerful perspective. It's a hierarchical collection
>>>of statements in the more general form.
>>>
>>A hierarchical collection which could be called Abstract Syntax Tree, hehe.
>>
>
>;-) Yes.
>
>>Not to convince you (which is not needed ;) ), but just to add my 2
>>cents: We all know, that in a standard Smalltalk VM a Block is
>>simple compiled code, which can [be] evaluated resulting in a
>>single value. However, if you try to explain such lambdas, closures
>>(or any other name you might think of) to Smalltalk newbies,
>>especially those from C/C++/Java backgrounds, you end up in saying
>>to them: "A Block is source code you can save in a variable and
>>execute it later". I don't want to discuss, whether that is right
>>or wrong, but I think it helps them to understand a little bit of
>>what is really meant.
>
>I find that it's a very effective approach of explaining it to
>people. At least it's a great place to get start explaining
>Smalltalk blocks to them.
>
>
>>That differs from the former statement, that it says "source code".
>>And source code is a (hierarchical) collection of statements, even
>>in Smalltalk - at least to some extent.
>>
>
>Yes.
>
>>I think the newbie way of thinking of blocks is indeed the more
>>natural one, than viewing it from the VM implementation side.
>>
>
>Yes. It's also the way to think about them at the language level.
>The VM is the implementation level and often it's job is to hide
>much of the details of the inner workings from the user and the
>language itself. That is why I prefer giving the language priority
>in driving the design over the concerns of the virtual machine
>implementation issues (if at all possible).
>
>
>>
>>>It's nice to move the discussion forward with someone who gets it for a
>>>change.
>>>
>>Thanks.
>
>Your welcome.
>
>>If I remember correctly Ian Piumarta does (somehow) similiar things
>>with his Id Smalltalk variant.
>
>Yes, Ian's work is really amazing.
>
>
>>I believe, he adds blocks to classes as named methods, too. So I've
>>got these ideas from him... *g*
>
>I did share my thoughts on the unification of Blocks and Methods
>with Alan Kay and Dan Ingalls a few years back; as well I've
>mentioned it at OOPSLA and in private conversations with various
>people. Alan or Dan may have mentioned it to Ian or I might have
>mentioned it to Ian at OOPSLA (I don't recall if I spoke with him
>there). Or maybe others thought of it before. We have to ask Alan,
>Dan and Ian about their coming to the idea. After telling Allen
>Wirfs-Brock about it a few years back he said he'd come across that
>idea before but that it seemed that no one did anything with it. So
>I don't claim ownership of the idea (other than co-originating it)
>but I do promote it vigorously since I see it's value. It's also not
>a big leap to make as Block and Method syntax is almost the same -
>the big leap is seeing it's value.
>
>Part of it's elegance is that it's such a minor change to make the
>unification happen and that it has such a powerful new dimension
>opening impact!
>
>If a change is required in syntax and it doesn't open a whole new
>dimension of extensibility as a result then chop it out. It's like
>Tilera's "kill design rule" for their N-Core chips (Tile64 or TileN)
>where a N% increase in surface area of the chip must increase
>performance by an equal N%! I apply a similar set of "design kill
>rules" for syntax changes to Smalltalk and ZokuScript. If it's not
>message based using existing syntax then I ask "how can it be made
>to work with messages?" - this was the line of thinking that lead me
>to see that all meta data and meta operations can be accomplished
>with the existing unary, binary and keyword messaging syntax. That
>was a breakthrough! It also means that almost all changes in syntax
>are not needed as most changes are attempts to add meta data or
>operations. The problem with new syntaxes is that they break the
>notion of one uniform messaging syntax and make the world much
>harder. This makes advanced topics such as code analysis and code
>rewriting much more difficult and cumbersome since multiple syntax
>forms are involved and they may not have bidirectional
>transformations available when being converted this way and back that way.
>
>I see the elegance and beauty of a unified block and method syntax
>for Smalltalk and ZokuScript such that I'm promoting it in the
>Smalltalk community. Certainly it will end up in ZokuScript as it's
>an essential building block for the future that I see for Smalltalk
>like or Smalltalk inspired systems.
>
>If we as designers of a computer language (or other software
>programs) fail to bring the principles of elegance, beauty and
>simplicity to the language (or program) design and the design
>process then how can we expect our products to be powerful or users
>to be elegant, use beauty and simplicity in their expressions with
>our languages and tools we make?
>
>All the best,
>
>peter
>
>
>
>
>
>
More information about the Squeak-dev
mailing list
|