And, I don't think Beta quite solves the block problem--
Consider that Beta still needs a built-in thing for if's, whereas ST & Self
(& Scheme) don't.
This is important because it means that it feels pretty heavyweight to use
control structure in Beta, compared to ST or Self.
Also, consider that Beta has lexical scoping, as Jecel points out.
This is great for some things, but does add complexity to the language--
should it be in or out? (Self has a little of it) I am not sure yet.
At 9:51 AM 8/30/95, Mario Wolczko wrote:
>Date: Wed, 30 Aug 1995 01:31:59 -0300
>From: "Jecel Mattos de Assumpcao Jr." <jecel(a)lsi.usp.br>
>Subject: implementation issues (was: types of people)
>rainer(a)physik3.gwdg.de (Rainer Blome) mentioned a few ways in which Self
>could become more scheme-like, including the tail-recursion optimization.
>"ian (i.r.) woollard" <wolfe(a)bnr.ca> also mentioned this optimization in
>While this optimization is invisible in a normal execution of a program,
>if you get an exception and reflect on the activations ( call the
>debugger, for example ) you will find that a large chunk of your stack
>is missing. This small deviation from strict source semantics is
>against the current Self philosophy.
>I am including a more general "tail-call" optimization in tinySelf as
>it reduces context allocation ( I use the heap rather than stacks :-( )
>and enhances parallelism in my active object model. When I get some
>numbers on this I will post them here.
>lpd(a)aladdin.com (L. Peter Deutsch) didn't like the suggestion of
>macros ( I don't either ) and talked about the Beta way. I have
>just finished the Beta tutorial and found it really neat how it
>doesn't need blocks. I wish objects could be used in the same way
>in Self, but it is not possible. It only works because Beta is
>a lexically scoped language, while Self is a dynamically scoped
>About non-LIFO blocks: Self doesn't need them as much as Smalltalk
>as it is so easy to create unique inline objects with their own
>methods and pass them around instead.