<p dir="ltr">On 14 Aug 2013 10:56, "Timothy Jones" <<a href="mailto:Timothy.Jones@ecs.vuw.ac.nz">Timothy.Jones@ecs.vuw.ac.nz</a>> wrote:<br>
><br>
> If every variable is automatically a confidential method on the surrounding<br>
> object, then defining annotations to make reading and writing that variable<br>
> publicly available is significantly simpler.<br>
><br>
> Consider this object definition:<br>
><br>
> > object {<br>
> >   // Confidential getter<br>
> >   def a = 1<br>
> ><br>
> >   // Public getter<br>
> >   def b is public = 2<br>
> ><br>
> >   // Confidential getter and setter<br>
> >   var c := 3<br>
> ><br>
> >   // Public getter and confidential setter<br>
> >   var d is readable := 4<br>
> ><br>
> >   // Confidential getter and public setter<br>
> >   var e is writable := 5<br>
> ><br>
> >   // Public getter and setter<br>
> >   var f is public := 6<br>
> > }<br>
><br>
> These variables enumerate all of the possibilities.  Annotating a var as<br>
> readable, writable is equivalent to declaring it public.<br>
><br>
> If you really need private variables, just declare them outside the object.<br>
><br>
> > method newObject {<br>
> >   def x = 1<br>
> >   object {<br>
> >     method number { x }<br>
> >   }<br>
> > }<br>
It's also possible to do this same system with fields public by default. Then "confidential" restricts both, "readable" has just a public getter, and the other way around for "writable". Lexically-bound variables still work the same way. </p>

<p dir="ltr">Alternatively, there could be public getters by default. Then you only really need two annotations "confidential" and "writable" (or even "public"), because writable-only is a rare desire.<br>

-Michael</p>