Name as Parameter

Captured from Markm’s note of [09 Jul 2000 11:40:05 -0700] on the mail list

In a conventional capability system, the capability is the designation of the object it refers to. Think of an object reference in Smalltalk or Java. How do we know what object it refers to? Well, there’s no more meaningful answer than “the object that this very object reference refers to.” Sorry, I know that isn’t very satisfying, but I don’t see that there’s any other answer available or needed in Smalltalk or Java. Turn object reference into capability, and we have the same situation in E.

Or, one can answer by computational history: “This is the object reference I received as the third argument of the ‘foo’ message I’m currently processing.” Or “This is the object reference my creator endowed me with as my ‘zippy’ instance variable.” This notion of “which object” corresponds to the lambda calculus use of naming, or the capability operating system use of c-list indexes. It names not a particular object, but that object that has a particular relationship to the current object. Again, it seems to me that E-speak’s naming system has a very similar perspective, so I’m puzzled about why you’re puzzled.

To extend Markm’s description, a running Keykos application is tied together by capabilities just as a large Smalltalk application is tied together with object references. Directories play little role except perhaps as maps from the style of names that application end users find convenient. There are indeed ascii names in a SmallTalk program, but they play no role in the executing program. The programmer explains what is happening with these names.