In designing SELF, we have been led to some rather strange recurring themes. We
present them here for the reader to ponder.
Behaviorism: In many object languages, objects are passive; an object is what it
is. In SELF, an object is what it does. Since variable access is the same as
message passing, ordinary passive objects can be regarded merely as methods that
always return themselves. For example, consider the number 17. In Smalltalk, the
number 17 represents a particular (immutable) state. In SELF, the number 17 is
just an object that returns itself and behaves a certain way with respect to
arithmetic. The only way to know an object is by its actions.
Computation viewed as refinement: In Smalltalk, the number 17 is a number with
some particular state, and the state information is used by the arithmetic
primitives—addition, for example. In SELF, 17 can be viewed as a refinement of
shared behavior for numbers that responds to addition by returning 17 more than
its argument. Since in SELF, an activation record’s parent is set to the
receiver of the message, method activation can be viewed as the creation of a
short-lived refinement of the receiver. Likewise, block (closure) activation can
be viewed as the creation of a refinement of the activation record for the
enclosing context scope.
Parents viewed as shared parts: Finally, one can view the parents of an object
as shared parts of the object. From this perspective, a SELF point contains a
private part with x and y slots, a part shared with other points containing +,
-, etc. slots, and a part shared with all other objects containing behavior
common to all objects. Viewing parents as shared parts broadens the
applicability of inheritance.