[squeak-dev] List of all global variables? (Environments?)

H. Hirzel hannes.hirzel at gmail.com
Sat Dec 30 14:17:14 UTC 2017


An attempt to summarize this thread:


To create a list of globals  Levente proposes

   Array streamContents: [ :stream |
        Smalltalk globals associationsDo: [ :binding |
                binding class == Global ifTrue: [ stream nextPut: binding ] ] ].


Wheras Eliot has:

   Array streamContents: [ :stream |
       Smalltalk globals associationsDo: [ :binding |
           (binding class == Global
           and:  [ (binding value isBehavior
           		and: [ binding key == binding value name ]
		   ) not
		 ]
	   ) ifTrue:
                [ stream nextPut: binding ] ] ].



The question is what should be in the 'List of globals'?

a) 'bindings' which are an instance of Global (Levente)
b) 'bindings' which are an instance of Global and in addition do not
point to a class. (Eliot)


--Hannes

On 4/5/17, Bert Freudenberg <bert at freudenbergs.de> wrote:
> On Tue 4. Apr 2017 at 19:05, Levente Uzonyi <leves at caesar.elte.hu> wrote:
>
>> On Tue, 4 Apr 2017, Eliot Miranda wrote:
>>
>> >
>> >
>> > On Apr 4, 2017, at 7:02 AM, Bert Freudenberg <bert at freudenbergs.de>
>> wrote:
>> >
>> >       On Tue, Apr 4, 2017 at 3:47 PM, Eliot Miranda <
>> eliot.miranda at gmail.com> wrote:
>> >             Hi Levente,
>> >
>> >             > On Apr 3, 2017, at 11:14 AM, Levente Uzonyi <
>> leves at caesar.elte.hu> wrote:
>> >             >
>> >             >  The correct solution is:
>> >             >
>> >             > Array streamContents: [ :stream |
>> >             >    Smalltalk globals associationsDo: [ :binding |
>> >             >        binding class == Global ifTrue: [ stream nextPut:
>> binding ] ] ].
>> >
>> >
>> > Or shorter
>> >
>> >     Smalltalk globals declarations select: #canAssign
>> >
>> > maybe? Unlike class bindings, global vars are writable.
>> >
>> >
>> > I don't like this.  I see writability as orthogonal.  I'm sure there's
>> good uses for read-only globals that are not classes.  I like the
>> tenseness
>> though.  So
>> >     Smalltalk globals declarations reject: #isClassBinding
>> >
>> > with
>> > isClassBinding ^value isBehavior and: [key == value name]
>>
>> Why not just ^true?
>> It's a ClassBinding even if it's not initialized properly. And that
>> should
>> be the Environment's responibility.
>>
>> >
>> >
>> >       Why not
>> >
>> >       Array streamContents: [ :stream |
>> >          Smalltalk globals associationsDo: [ :binding |
>> >              (binding class == Global
>> >              and: [ binding value isBehavior
>> >              and: [ binding key == binding value name ] ]) ifTrue:
>> >                   [ stream nextPut: binding ] ] ].
>> >
>> >
>> > Because we want to know the global *variables*, that is everything
>> > *but*
>> the class bindings. So we look for instances of Global, not ClassBinding,
>> no matter the value.
>> >
>> >
>> > Forgive me; I missed a not in there.  But my point is that the classes
>> in global are in bindings whose keys are == to their name.  Everything
>> else
>> is a global variable.
>>
>> We have separate subclasses: ClassBinding and Global. We should use
>> those.
>>
>> Levente
>>
>
>
> Yep. Besides, with renaming on import the name of the class is not
> necessarily the same as its binding key.
>
> - Bert -
>
>
>> >
>> >
>> >       > The role of declarations and bindings is still not clear in
>> Environments, therefore, as I wrote it before, unrelated to tool support,
>> I
>> still consider Environments to be incomplete.
>> >
>> >
>> > I thought 'declarations' are the things owned by this environment
>> (excluding imports), whereas 'bindings' are the things visible in this
>> environment (including imports).
>> >
>> >
>> > Is there a definition in text somewhere?  Colin?
>> >
>> >       - Bert -
>> >
>> >
>> >
>>
>


More information about the Squeak-dev mailing list