Mariano Martinez Peck wrote:
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!

A passing naive thought...
Does ProtoObject then need #behavior? ...which can be overridden to return Class, Metaclass or Other as appropriate? ...such that Mocketry, #cannotInterpret and #pointsTo etc can use this instead of #class?

- 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.






Reply via email to