[cap-talk] [e-lang] Capabilities and value types - a conclusion?

Sandro Magi naasking at higherlogics.com
Thu Nov 2 07:59:39 CST 2006


Sandro Magi wrote:
> Also, structs have methods just like classes, which means they can
> encapsulate permissions too, just like capabilities.

A final example:

public struct FileStreamWrapper {
  FileStream output;
  //...
  public void Write(byte[] bytes) {
    output.Write(bytes);
  }
}

This struct encapsulates the permission to write to the file stream.
Every time this struct is passed, a new copy is allocated on the stack;
the FileStream is shared between all copies of the struct since it's a
reference type, but there is no way to access the underlying FileStream
except via the struct's methods (not like tuples).

So it behaves like an object, but also like a tuple. Hence my tentative
conclusion that it's a pass-by-copy object with mutable state.

Given this, perhaps the "capabilities == object reference" should be
generalized to "capability == language variable".

Every variable declared and assigned is thus a capability (and the
reference/value semantics are dictated by the type of the variable).
This seems closest to reality.

Sandro


More information about the cap-talk mailing list