nil or #nil?

Michael Donegan invader at oak.zilker.net
Sun Aug 23 17:49:31 UTC 1998


OK. I'm sufficiently chastised. I'll fix T-Gen.

        mkd

>>Table _ #( (-1 -1 ) 2 3 nil).
>>
>>Apparently, the Smalltalk that T-Gen was written for (?) treats nil as a
>>special case. But for Squeak, (Table at: 4) == #nil (not nil). This was
>>pretty tricky since it looks like a nil when you print it out. If you
>>inspect it, however, you see that it is an array with three elements.
>>
>>I'm thinking that this is so confusing that Squeak should adopt the
>>behavior of recognizing 'nil' as a special case inside of a constant array.
>>
>>Any thoughts?
>
>I think it is correct the way it is in Squeak -- literal vectors are
>built from unevaluated literals, where all literals are "self-evaluating"
>(evaluate to themselves).  The value of the symbol nil is the symbol nil,
>which is different from the standard value nil (the sole instance of
>UndefinedObject).
>
>Making a special case for nil here starts one down the slippery slope of
>mixing up symbols and variables (values).  What about #true and #false --
>would you expect them to exist in the literal vector as symbols or
>Booleans?  What about symbols which match existing entries in the
>SystemDictionary, such as classes?
>
>In fact, making such a change would break some existing code.  For
>example, TMethod>>isSubstitutableNode:intoMethod:in: uses exactly this
>construct:
>
>     .
>     .
>                (#(self true false nil) includes: var) ifTrue: [ ^ true ].
>     .
>     .
>
>Here the the code is expecting the literal vector #(self true false nil)
>to be the vector of symbols #self, #true, #false, and #nil.
>
>
>Squeak already has braceNodes to allow easy definition of evaluated
>arrays, for example:
>
>     Table := { {-1. -1}. 2. 3. nil}.
>
>More portably, one can explicitly build the array:
>
>     Table := Array
>          with: (Array with: -1 with: -1)
>          with: 2
>          with: 3
>          with: nil.
>
>
>
>
>     -- tim





More information about the Squeak-dev mailing list