[self-interest] Improvements to Self?

Ian Woollard ian.woollard at tesco.net
Mon Aug 13 21:16:30 UTC 2001


Jecel Assumpcao Jr wrote:
> Ian,
> 
> 
>>a) 'references'
>>
> 
> This is a cute idea which reminds me of the "value holders" ParcPlace 
> introduced into its GUI classes.
> 
> If you made the reference object point to its value using an assignable 
> parent slot, then you would have no problems sending references 
> messages that the value is actually supposed to execute. Of course, 
> then you have the "what is the value of self?" problem that is the 
> curse of any proxying scheme.
> 
> But how does sending the ":" message to the reference work (in theory, 
> not in the actual implementation which, as you say, can be optimized
> to be anything we like)? If it is some kind of slot, then we are back 
> where we started. If it is built in somehow then it makes more sense 
> but the language is still irregular since it needs a special case.

All languages need primitives. The point is to get the greatest
expressibility from the primitives.

> In case you missed my own silly proposal for this (which would also 
> handle your b): http://groups.yahoo.com/group/self-interest/message/1066
> 
> 
>>b) 'Allow optional parameters'
>>
> 
> While Self doesn't allow this, you can define a series of methods 
> manually to get a similar effect (this is used in quite a few places, 
> including the scheme to allow optional parameters to blocks). Where 
> this doesn't work too well is when there are too many combinations, 
> usually in initialization methods. Given that assignment slots return 
> the receiver, all of the following should work:
> 
>          button size: 40 at 10
> 
>          button font: f
> 
>          button color: bc
> 
>          (button size: 40 at 10) font: f
> 
>          (button color: bc) font: f
> 
>          ((button font: f) size: 40 at 10) color: bc
> 
> and so on. Of course, the needed parenthesis ruin it for scripting.

Yes. More like:

myNewButton: button new: Size: 40 at 10 Font: f Color: bc

It makes all the difference in readability.

>>c) No lexical scoping
>>
>>Methods instantiations should inherit off an assignable slot, that is
>>set to point to self.
>>
> 
> They do, though it is actually an argument slot named ":self*". Think 
> of argument slots as "assign once" data slots and it should be more or 
> less what you want.

I didn't know that! That's the way it SHOULD be! ;-)

>>Statements should inherit off method
>>instantiations. This simplifies the language, and regularises it.
>>
> 
> Blocks do that (through an invisible <lexicalParent*> slot). Statements 
> don't exist at the bytecode level, but earlier Selfs had "inner 
> methods" for representing nested expressions in parenthesis and they 
> also are set to inherit from the execution context.
> 
> Self didn't have lexical scoping until the latest release - Self 4.0 
> still faked it with inheritance.

That's odd. Why add lexical scoping?

OK. I clearly don't understand lexical scoping! What's the point of
it; how can it be better than inheritance?

>>d) Privacy
>>
>>Some mechanism is needed for this. The minimal implementation is a
>>slot that can only be accessed when called from a method found in a
>>slot of self; but that's a bit cumbersome to code with. (If that
>>sounds completely bizarre, don't worry, there are much better
>>implementations.)
>>
> 
> That implementation was used in Self 1 and 2. You would put a "_" in 
> front of a slot name to make it private or a "^" to make it public 
> (putting nothing at all also made it public). For data slots, you could 
> set the visibility of the corresponding assignment slot separately. 
> Normal message sends ignored private slots, but implicit self sends 
> would find them.

Not really the same thing. If I inherit off an object I have
access to the private slots. That's bad.

> This was dropped from the virtual machine in Self 3, but even in the 
> current user interface you can declare the visibility of slots (public 
> slots are shown in bold face, private ones in italics). It is simply 
> documentation now and has no effect on execution.
> 
> A more interesting scheme was created for the Us variant of Self 
> (http://citeseer.nj.nec.com/smith96simple.html) although the 
> programming environment would have to help automate the process 
> somewhat.

Hmm. Interesting. I'll check it out.

> -- Jecel
-- 
- Ian Woollard (ian.woollard at tesco.net)

"Is a planetary surface the right place for an expanding technological 
civilization?"
- Gerard O'Neill




More information about the Self-interest mailing list