PassByConstruction

From Erights

(Difference between revisions)
Jump to: navigation, search
(revert)
(Initial entry)
Line 1: Line 1:
-
A PassByConstruction (also 'pbc') object is one which, when sent over a [[comm system]] (e.g. [[CapTP]]) to another vat, is sent as some serialized representation, and will typically arive [[near]] rather than as a [[far reference]] back to the originating vat ([[PassByProxy]]).
+
An object declared as, for example
-
 
+
-
{{XXX|Are there any references neither PBP nor PBC?}}
+
-
 
+
-
PassByConstruction objects may additionally be [[Selfless]], which by definition makes them [[PassByCopy]], i.e. exactly duplicated. On the other hand, [[Selfish]] PassByConstruction objects are used, for example, for [[una]].
+
-
 
+
-
==Defining pass-by-construction objects==
+
-
 
+
-
E [[comm system]]s serialize any object approved by the <code>pbc</code> auditor as the [[portrayal]] returned by its [[Miranda optUncall|__optUncall/0]] method. For example, this is an object which will always arrive as the number 3:
+
-
 
+
<code>
<code>
     def foo implements pbc {
     def foo implements pbc {
-
         to [[Miranda optUncall|__optUncall]]() { return [1, "add", [2]] }
+
         to __optUncall() { return [1, "add", [2]] }
         # ...
         # ...
     }
     }
</code>
</code>
-
 
+
will be passed-by-construction across CapTP. This means that its __optUncall() method will be called on the sending side, the elements of the result triple will be passed, and the corresponding triple as received will be called (here, as “E.call(1, "add", [2])) to create the object as received.
-
===Example===
+
-
 
+
-
The first part of the example is a maker for a 2D Vector. The created vectors are Pass By Construction, they should pass the guard :pbc.
+
-
This code should be positioned in an [[emaker]] file in the java classpath at the location "tests/makeVector.emaker"
+
-
 
+
-
<pre>def makeVector implements pbc {
+
-
    to run(var x, var y) {
+
-
        def vector implements pbc {
+
-
            to getX() :any { return x }
+
-
            to getY() :any { return y }
+
-
            to __optUncall() :any { return [makeVector, "run", [x,y]] }
+
-
            to __printOn(out) {out.print(`&lt;Vector $x $y&gt;`)}
+
-
        }
+
-
        return vector
+
-
    }
+
-
    to __optUncall() :any {
+
-
        return [&lt;import&gt;, "get", ["tests.makeVector"]]
+
-
    }
+
-
}</pre>
+
-
 
+
-
Example of usage:
+
-
 
+
-
<pre># create a new Vector object
+
-
? def makeVector := &lt;import:tests.makeVector&gt;
+
-
# value: &lt;makeVector&gt;
+
-
 
+
-
? def vector := makeVector(6.6,7.7)
+
-
# value: &lt;Vector 6.6 7.7&gt;
+
-
 
+
-
? introducer.onTheAir()
+
-
# value: ["3DES_SDH_M2", "3DES_SDH_M"]
+
-
 
+
-
# function for creating a new local vat
+
-
? def seedVatAuthor := &lt;elang:interp.seedVatAuthor&gt;(&lt;unsafe&gt;).virtualize(introducer)
+
-
# value: &lt;virtualSeedVat&gt;
+
-
 
+
-
# Run this source code in the new vat. The method accepts a pbc object and prints it.
+
-
? def scriptSource:="def run(thing :pbc) {println(`Thing: $thing`)}"
+
-
# value: "def run(thing :near) {println(`Thing: $thing`)}"
+
-
 
+
-
# create the new vat. Return a far reference to the object and a reference to the vat object
+
-
? def [scriptObj, vat] := seedVatAuthor(scriptSource)
+
-
# value: [&lt;Promise&gt;, &lt;Vat newVirtualSeedVat in &lt;runs in newVirtualSeedVat&gt;&gt;]
+
-
 
+
-
# pass the pbc object into the new vat
+
-
? scriptObj &lt;- run(vector)
+
-
# value: &lt;Remote Promise&gt;
+
-
 
+
-
? Thing: &lt;Vector 6.6 7.7&gt;</pre>
+
-
 
+
-
{{stub}}
+
-
[[Category:ELib specification]]
+

Revision as of 07:06, 18 April 2007

An object declared as, for example

   def foo implements pbc {
       to __optUncall() { return [1, "add", [2]] }
       # ...
   }

will be passed-by-construction across CapTP. This means that its __optUncall() method will be called on the sending side, the elements of the result triple will be passed, and the corresponding triple as received will be called (here, as “E.call(1, "add", [2])”) to create the object as received.

Personal tools
more tools