About removing global variables

goran.krampe at bluefish.se goran.krampe at bluefish.se
Fri Nov 26 09:16:52 UTC 2004


Hi folks!

Just can't resist. :)

Noury Bouraqadi <bouraqadi at ensm-douai.fr> wrote:
> Stef,
> 
> In PocketSmalltalk globals are replaced by class variables in Object...
> But, in PocketSmalltalk there is a set of things done behind the scene 
> developpers don't seem to have access to them.
> 
> Now, if we make the decision to remove gloabals we need to bootstrap the 
> system somehow. Eg. how will we kow that Smalltalk refers to the global 
> system dictionary?
> 
> Actually, I didn't think a lot about it. But, I have the feeling that we 
> still need globals but need some extra scoping hierarachical mechanism: 
> a kind of namespaces where the root namespace would named... Smalltalk...
> 
> Noury

Well, my Namespace package on SM allows this. I just installed it into
3.8-6465, and played with it. Read the class comment of Namespace, and
then you can try these steps in a workspace:

"Let's create a namespace for globals:"
Namespace newNamed: #Globals

"And put the Transcript in there:"
Globals at: #Transcript put: Transcript

"Here we can see it has been added:"
Globals keys ==>  a Set(#Transcript)

"It is still also referenced in Smalltalk though:"
(Smalltalk at: #Transcript) == Globals::Transcript              ==> true

"Given how my namespaces work we have two keys in Smalltalk now:"
Smalltalk keys select: [:k | k endsWith: 'Transcript']
	==>
 an IdentitySet(#Globals::Transcript #Transcript)

"So let's toast the old entry!"
Smalltalk removeKey: #Transcript

"Now this should work:"
Globals::Transcript show: 'Hi!'

"But this also still works! It gets expanded to Globals::Transcript:"
Transcript show: 'Hi'

"So if you recompile a method that looks like this:"
method
	Transcript show: 'Hi'.
	Globals::Transcript show: ' there!'

"It will autocontract because there is just one entry (in all
Namespaces)
that is called Transcript so the short name still fully identifies it."
method
	Transcript show: 'Hi'.
	Transcript show: ' there!'

"But if you decompile it, you will see that it actually says this in the
stored source:"
method
	Globals::Transcript show: 'Hi'.
	Globals::Transcript show: ' there!'

----
Note though that the Namespace package is not fully working yet. But it
is sufficiently working that you can play with it using a helmet.

regards, Göran



More information about the Squeak-dev mailing list