[squeak-dev] isSelfEvaluating (was: Re: The Trunk: Collections-nice.173.mcz)

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Fri Oct 30 21:38:57 UTC 2009


2009/10/30 Eliot Miranda <eliot.miranda at gmail.com>:
>
>
> On Fri, Oct 30, 2009 at 1:45 PM, Nicolas Cellier
> <nicolas.cellier.aka.nice at gmail.com> wrote:
>>
>> 2009/10/30 Eliot Miranda <eliot.miranda at gmail.com>:
>> >
>> >
>> > On Fri, Oct 30, 2009 at 12:55 PM, Andreas Raab <andreas.raab at gmx.de>
>> > wrote:
>> >>
>> >> Question: I've always wondered what this "isSelfEvaluating" stuff is
>> >> good
>> >> for. There are thirteen implementors and a single user in
>> >> Array>>printOn:.
>> >> Is there any *need* for Array>>printOn: to print a "self evaluating"
>> >> expression? Why not just Array(element1, element2, ....) just like any
>> >> other
>> >> collection?
>> >>
>> >> We'd remove some 20 methods with no downside that I am aware of.
>> >
>> > Shouldn't the test be isLiteral instead of isSelfEvaluating? c.f.
>> > storeOn:
>> > storeOnStream:.
>> >
>>
>> Yes that's the default behaviour of Object>>isSelfEvaluating.
>> But the 3.9 team wanted to extend this to a few other objects, like
>> Point, Rectangle, ...
>> The reason for this extension is the presence of brace notation.
>
> Right.  So with braces one either prints arrays as literals or as braces.
>  Whether an element of an array prints as self-evaluating is up to it right?
>  e.g. I would prefer it if
>     Array with: OrderedCollection new
>

currently it is a 3 stages rocket:

Array with: 1. -> #(1)
Array with: 1 at 2. -> {1 at 2}
Array with: OrderedCollection new. -> an Array(an OrderedCollection())

> prints as { OrderedCollection () } than #(OrderedCollection ()).  The first
> is a syntax error but the second is completely ambiguous (i.e. evaluates to
>  #(#OrderedCollection #())).
> So I don't see the need to provide isSelfEvaluating.  isLiteral gives you
> all that you need to avoid printing an Array as a literal when it isn't.
>  And if you've drunk the braces kool aid (which I have, while studying my
> agrippa) you're happy with Arrays printing themselves as brace constructs
> naively even when the naive print produces non-code.

That's a fair and simple approach.

>>
>> Nicolas
>>
>> >>
>> >> Cheers,
>> >>  - Andreas



More information about the Squeak-dev mailing list