I'm a new comer to Smalltalk, and learned it in Squeak. But I find many things confusing in Smalltalk. In Squeak, MetaClass
and MetaClass class
are each other's class mutually. If I want to create the object MetaClass
I should send a message new
to its class which is MetaClass class
. But it must have already existed as an object in the first place to accept the message. So I must create the object MetaClass class
first, which can only be done by sending a message new
to the object MetaClass
which has not been created yet. So it is a chicken-or-the-egg problem.
Of course I can create the objects in Squeak now, because the MetaClass
and MetaClass class
objects have already been created auto-magically when Squeak is opened. But I don't know how. Maybe they are created somehow rather by sending messages. But then it contradicts Smalltalk's spirits: everything happens by sending messages except a few points (variable declaration, assignments, returns and primitives).
Is there something wrong with the above reasoning? Thanks in advance.