>> >> So questions:
>> >> Is ProtoObject should implement #class?
>> >> Can we move #class method from Object to ProtoObject?
>> >>
>> >
>> > ups....good catch! indeed, we should move it to ProtoObject.
>> >
>> mm.. why?
>
>
> Because ALL objects do have a class. Right? if you want to change the
> semantics of #class then just subclass and change it.
mmm.. no.
IMO, in pure sense, all objects having behavior. but behavior is not a
class (and we can even have
two classes to discriminate between them).
yes, it is _almost_ a class.. but much more obscure.. i doesn't needs to
be compatible with Class protocol.. You should know pretty well, what
requirements VM side puts
for a valid behavior: - superclass, methoddict, format.
which enables VM to do method lookup and creating an instances.
now, if you make ProtoObject to answer message #class, one will assume that
the object it answers should conform to a full-fledged Class protocol.
But of course it should not.
Maybe i nitpicking about terminology.. but i think at that level we
should make it clear:
- all objects having behavior!
- some object's behaviors are Classes
- some object's behaviors are Metaclasses
- but there could be any other.
I agree with all that. But as you said, I think you are going too low level in details.
For example, I would call class to all your previous list. All objects have a class, which can be Class, Metaclass, whatever.
In addition, if we don't add #class in ProtoObject, then there are some of broken messages like #cannotInterpret: and #pointsTo since they send #class to self.