If you defined the variable as an instance variable in the class side, you can access it as

Greeter instVarNamed: 'greeting'
or
Greeter instVarAt: 1


But also you can define class variables from the instance side, which is slightly different (and I think most common, isn't it?)

Object subclass: #Greeter
instanceVariableNames: ''
classVariableNames: 'greeting'
package: 'Greetings'

if that is the case, there is in fact a dictionary which is accessed by doing��

Greeting classPool


On Mon, Oct 3, 2016 at 10:23 PM, CodeDmitry <dimamakhnin@gmail.com> wrote:
I am trying to study Pharo's internals and I am now curious how it stores
class variables.

I notice that in order to have a class `Greeter` with a "static" variable
`greeting`, I need to make `greeting` an instance variable under "show show
the class side" and create a "Getter" and "Setter" for this "instance
variable".

First thing that confuses me is, why is this called an instance variable if
this particular "static" method is not bound to any particular instance? Is
it just because it is defined in an "instance" of a "ProtoClass"?

Second thing that confuses me is, where are these pairs of ("instance
variable name" => "instance variable value") stored? I know that I can call

Transcript show:
�� �� ((Greeter class) instanceVariables at: 1).

which prints "greeting".

and

Transcript show:
�� Greeter instanceVariables class.

which prints "Array"(curious, i expected a Dictionary mapping Strings to
Object).

Transcript show:
�� �� ((Greeter class) instanceVariables at: 1) class.

prints "ByteSymbol".

Now I am confused, where are the actual values of the "static variables"
stored? I can find the names, but�� can't understand where�� the values are
hidden.

Can somebody help me understand�� this?




--
View this message in context: http://forum.world.st/How-does-Pharo-store-instance-variables-tp4917924.html
Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.