[cap-talk] Capabilities for immutable data
dmbarbour at gmail.com
Wed Apr 13 12:43:31 PDT 2011
On Wed, Apr 13, 2011 at 12:12 PM, Kevin Reid <kpreid at switchb.org> wrote:
> On Apr 13, 2011, at 14:16, David Barbour wrote:
> > On Wed, Apr 13, 2011 at 10:52 AM, Kevin Reid <kpreid at switchb.org>
> > wrote:
> >> E *is* 'everything is an object'.
> > Yes, but it achieves that by redefining 'object' to mean 'everything'.
> Perhaps you could give an example of a language which is EIAO but does
> not so “redefine 'object'”?
E isn't truly 'everything is an object' because references, time, control
flow, messaging, and protocols are not 'objects' in E. However, E does
stretch the definition of 'object' in an attempt to include values - i.e.
those 'immutable selfless pass-by-copy' things with no object identity are
called 'objects' for no reason other than to say that 'everything is an
object'. I consider that sort of play with vocabulary to be misleading and
harmful (since words don't do us any good except insofar as they make useful
There are languages where 'everything is a' truly holds. In pure simple
lambda calculus, everything is a lambda - numbers are represented using
Church encodings of lambdas. However, this is not a good quality; rather, it
simply forces users to carefully discipline themselves and work around the
language to develop sensible programs at any scale larger than a toy.
Consistency is important, but that doesn't mean "no distinctions". Rather,
it means "no gotchas". In distributed E, the fact that a remote host can
peek inside a pass-by-copy 'object' and extract any remote capabilities for
its own use is NOT consistent with the other objects. Due to this, we really
would be better off not calling them 'objects'.
> “Is an object” means to me “Can be manipulated by calling/sending, can
> be passed around as an argument, etc., without dependence on its
> specific type.”
In general, we cannot communicate objects in messages... only references to
objects. That is, if you go back to the *philosophy* that treats the world
as being constructed of 'objects', you can get a real handle on the issues
of bundle and substance, object identity, and even study questions such as
Ship of Theseus and John Locke's socks.
This is the meaning of 'object' that we then bring into OO programming - we
say that our program is built of such 'objects'. When we say something "is
an object", that means we communicate references about it in our messages,
and we might interact with the object so referenced.
> The point of EIAO is that “everything” then has more useful properties
> for actual programming; that “object” becomes indistinct from “thing”
> in the associated vocabulary is incidental.
Sure, that's a good intention. If it actually worked out the way it was
intended, I'd have no objection to it. But it doesn't. Useful distinctions
are the basis for intelligent expression, communication, and behavior.
Attempting to hide useful distinctions by stretching the vocabulary does us
more harm than good.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the cap-talk