[self-interest] Caper needs Self Help
Jecel Assumpcao Jr
jecel at merlintec.com
Tue Nov 18 18:59:29 UTC 2003
On Tuesday 18 November 2003 11:35, Paul Chapman wrote:
> My other message today reveals that I've still been unable to get
> Self running under Cygwin.
I have never tried it, so I can't help you there. Personally, I would
just boot some CD-based Linux (such as Knoppix) and use that to try out
Self (which could be on the Windows partition on the hd).
> So here are a couple of questions about
> Self the answers to which would help me with Caper's semantics.
>
> (1) Is there any use for an inline object-with-code? It seems to me
> that there isn't, because there is no selector associated with such
> an object, and therefore it's rather difficult to invoke the code.
This was a feature in Self 1.0 that was replaced by a parser
optimization in later versions. So it used to be that if you wrote
3 + (4 * 5)
and looked at the bytecodes, you would see what you call an
"object-with-code" as the argument for the '+' message. There is no
selector, but just pushing it to the stack was enough to invoke it.
Something like
3 + [4 * 5] value
Since these were full method objects, you could write
3 + (|z| z: 4 * 5. 10 + z)
which in a more recent version of Self will give you an "inner methods
are no longer supported" error.
> (2) Conversely, what happens if a keyword slot contains an object-
> without-code?
That gives you a syntax error. "Empty objects" (even if they have
slots!) can only live in unary slots.
> I assume that accessing the object in such a slot by
> sending a keyword message to its container would return (a copy of)
> the object itself with the parameter slots filled in. Is that right?
That is not how the current implementation works, but is a very
reasonable thing to expect. In fact, there are good arguments for both
returning the object itself and for returning a copy of it.
> I'm trying to work out what the deep meaning of Self's objects-with-
> and-without-code is (cf Smalltalk's separation of methods and
> instance variables into two namespaces), in order to find the best
> way for Caper to distinguish between "values" (evaled at definition)
> and "methods" (evaled at invocation) in fields.
You might also find you need something like blocks, which are a huge
complication.
-- Jecel
More information about the Self-interest
mailing list