Eliminating assignments and variable syntax (accessors)

Bijan Parsia bparsia at email.unc.edu
Thu Aug 12 12:48:37 UTC 1999


At 10:55 PM -0400 8/11/99, Lex Spoon wrote:

>Well, it's certainly open to discussion :)  I'd think it best to count the
>first indent as just part of method definition.  So to get a block inside a
>method, you'd have to add *another* indentation, like this:
>
>	myMethod
>		| x y z |
>			x := 1
>			y := 2
>			z := 3

Blargh! That's gross! Imagine the errors! You can't *tell*, without a
comment, whether this is a misindentation or a block. *Silent*, *SEMANTIC*
errors due to copy and paste are evil. Python doesn't have *that* problem.

I *think* that *mere* indentation doesn't generate a new block in python.
Indendation replaces the role of braces in C or begin...end in Pascal--you
have *keywords* indicating *what sort* of block you're dealing with
(neither has closures, even ersatz ones, so this problem doesn't crop up).
And, IIRC, you have a *colon* marking the start, e.g.,:

def foo(bar):
	if bar == 3:
		return bar
	else:
		return bar * 10

So, really, the opening delimiter of a block is something like *colon*
newline, rather than just new line. (I get bit by this all the time!)

>
>This syntax also works out fine for storing a block into a variable:
>
>	myMethod
>		| b x y |
>		b :=
>			x := 1
>			y := 2
>		^b
>
>It doesn't *look* real nice, but the fact that it's different is surely a
>big contributor.

However big a contributer it may be, it's contribution is *totally* swamped
by the contribution of the intrinsic butt-ugliness of it :) Ugh. Espeically
with the caret making the "b"s visually misalign!

>Unfortunately, as you point out, it's tricky to send a message directly to
>a block.  Hadn't thought about that one...  Tough tough tough....  Maybe it
>would be worth living without this ability, just to have a syntax that is
>easier to scan through?

Maybe...but this syntax *isn't* easier to scan through!

[snip]

>
>Well, I for one am not yet convinced, but it still seems like a neat idea.
>For languages with lots of control structure, like Python, the code comes
>out looking *really* elegant.

I don't know about *elegant*. It surely comes out *consistent* which is
nice. I find Python rather syntax heavy and the main advantage of the
whitespace stuff is to lighten it a bit (since in *any* language, if you're
sane, you'll use whitespace & indentation to pragamtically indicate block
structure; Python merely turns the pragmatics into syntax, which has some
advantages.)

I know other langauges use whitespace "Pythonically" (ML? Icon?) but I have
little to no experience with them.

>  But is it useful in a language like Smalltalk, where blocks are so
>important and where there is next to nil syntax?

No. :) I'd say it's not useful in Lispy languages either, where indentation
plays a huge pragmatic role. I *don't* like the idea, for example, of
*eliminanting* the parens in an outlining editor (as some have done).
Rather *augmenting* them seems more sensible.

Cheers,
Bijan.





More information about the Squeak-dev mailing list