Re: [friam] Formal modeling of systems based on E/CapTP/(Water)Ken/Cap'n Proto ideas

Mark Miller <[email protected]> Tue, 7 Jul 2015 04:47:59 +0200
Newsgroups gmane.comp.capabilities.general
Message-ID <CAK5yZYiD3LwbxzTWFfGmh9TZC19E+DcRSsqFKDQDqfcD21qfPQ@mail.gmail.com>
On Tue, Jul 7, 2015 at 12:10 AM, Dan Connolly <[email protected]> wrote:

> On Mon, Jul 6, 2015 at 3:59 PM, Mark Miller <[email protected]> wrote:
> > IANAF -- I am not a formalist. But my co-authors (Sophia and James,
> cc'ed) are. Today at PLAS (Programming Languages and Security) Sophia
> presented
> >
> > Swapsies on the Internet: First Steps towards Reasoning about Risk and
> Trust in an Open World
> > <http://research.google.com/pubs/pub43808.html>
>
> Very interesting. I'm just starting to read it; first detail that stands
> out:
>
> "We model private fields as they are simpler than nested lexical scopes"
>
>
Both of my coauthors already know that I strongly disagree with that ;).

That said, here's the way in which I think it is true and relevant. In, for
example, E or W7, the instance variables of an object (i.e., closure) are
simple the lexical variables that it captures. In FOCaL, the classes are
all top level, and the instance variables of its instances are explicitly
enumerated in the class. If you want to reason about connectivity as we do,
this explicit enumeration is helpful. Put another way, simple top level
classes are a lower level representation that a lambda language can compile
to by the following transformation:

     .... (lambda ... x ... y ...) ....

where x and y appear freely within this lambda expression itself, and
therefore are captured from the lexical context. IOW, x and y are instance
variables of the closures this lambda expression evaluates to. Given unique
name f and ignoring side effects, this is equivalent to

     (def (f x y) (lambda ... x ... y ...))
     .... (f x y) ....

By applying this transformation repeatedly, we move all lambda expressions
to be directly under a top-level def in this way. A top level def whose
body is a single lambda is equivalent to a class whose instance variables
are the f's parameters and whose behavior is the behavior of that lambda
expression. The top level scope of such a program consists only of class
names such as f, which are therefore the only variables that these class
definitions can use freely. Other than those, they are closed.

To account for side effects to shared variables, we would need to first do
the usual trick of replacing shared variables that are assigned to with
slot objects (so-called "references" in ML or "boxes" in Sophia's
terminology) where reading and writing the original variable turns into get
and set operations on the slot. The variables serving as class names are
assumed unassignable and so would not be subject to this "boxing".

Coauthors, does this adequately capture the lambda vs class equivalence you
have in mind?




> --
> Dan Connolly
> http://www.madmode.com/
> _______________________________________________
> cap-talk mailing list
> [email protected]
> http://www.eros-os.org/mailman/listinfo/cap-talk
>



-- 
Text by me above is hereby placed in the public domain

  Cheers,
  --MarkM

_______________________________________________
cap-talk mailing list
[email protected]
http://www.eros-os.org/mailman/listinfo/cap-talk