<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.erights.org/mediawiki/skins/common/feed.css?207"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.erights.org/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Proposed_Asynchronous_Control_Flow_Operators</id>
		<title>Proposed Asynchronous Control Flow Operators - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.erights.org/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Proposed_Asynchronous_Control_Flow_Operators"/>
		<link rel="alternate" type="text/html" href="http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;action=history"/>
		<updated>2026-04-25T13:31:34Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.15.5-7</generator>

	<entry>
		<id>http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=1617&amp;oldid=prev</id>
		<title>Const at 18:54, 29 November 2007</title>
		<link rel="alternate" type="text/html" href="http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=1617&amp;oldid=prev"/>
				<updated>2007-11-29T18:54:35Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;TODO possibly there should be per-operator pages.&lt;br /&gt;
&lt;br /&gt;
This page describes some not implemented asynchronous control flow operators that could simplify creation of asynchronous application. The intial set of operators is based on experience of implementing the AsyncObjects framework and Sebyla project design.&lt;br /&gt;
&lt;br /&gt;
== Later ==&lt;br /&gt;
This is an extremely simple construct. But is useful when it is required to execute code in this or other vat at some later time. In AsyncObjects this constructs is implemented using AsyncAction class, and it was used quite a lot in applications.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	“later” ( “(” &amp;lt;vatHandle&amp;gt; “)” )? “-&amp;gt;” “{“ &lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
	“}”&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
When code is executed in other vat, the runtime checks that code closes only over deep frozen or pass by copy objects. If vat is not specified, the code is scheduled to be executed at later turn in this vat. The vatHandle is an expression that evaluates to capability of executing actions on the vat.&lt;br /&gt;
&lt;br /&gt;
==Using==&lt;br /&gt;
&lt;br /&gt;
This is a very simple construct that helps with resource management. The syntax is like the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	“using” “(“ ( (“def” &amp;lt;varName&amp;gt; “:=” )? &amp;lt;eventualOpenExpression&amp;gt; )+ “)” “-&amp;gt;” “{“&lt;br /&gt;
		&amp;lt;statements&amp;gt;&lt;br /&gt;
	“}”&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The operator is executed as the following:&lt;br /&gt;
#All resources are opened in the specified order. If expression returns promise, the next expression is not executed before first one complete. If &amp;lt;varName&amp;gt; is specified for resource, the resolved resource is assigned to it and it can be used in subsequent expressions and &amp;lt;statements&amp;gt;.&lt;br /&gt;
#If opening of some resource fails, the proposed result of operator is that failure.&lt;br /&gt;
#Statements are executed, the proposed result of operator is value of last expression. If the result is promise, the operator waits until it is resolved.&lt;br /&gt;
#All opened connections are closed, in reverse order. It includes connections that has not been named. If some close operations fail, the most top level one is returned.&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using(def r1 := factory1&amp;lt;-openConnection(),  def r2 := factory2&amp;lt;-openConnection(), lock&amp;lt;-lockEnter()) -&amp;gt; {&lt;br /&gt;
	doSomething(r1,r1)   # assuming that lock is being held&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The constructs expands to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
when(def r1 := factory1&amp;lt;-openConnection()) {&lt;br /&gt;
	when(def r2:= factory2&amp;lt;-openConnection()) {&lt;br /&gt;
		when( def tmpVar := lock&amp;lt;-lockEnter()) {&lt;br /&gt;
			doSomething(r1,r1); 	&lt;br /&gt;
		} finally {&lt;br /&gt;
			tmpVar&amp;lt;-close();			&lt;br /&gt;
		}&lt;br /&gt;
	} finally {&lt;br /&gt;
		r2&amp;lt;-close();&lt;br /&gt;
	}&lt;br /&gt;
} finally {&lt;br /&gt;
	r1&amp;lt;-close();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Seq==&lt;br /&gt;
&lt;br /&gt;
The are several form of seq operator.&lt;br /&gt;
The basis form is the following.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	“seq” (“def” &amp;lt;varName&amp;gt; “:=”)? “{“&lt;br /&gt;
		&amp;lt;statements-1&amp;gt;&lt;br /&gt;
 	“}”  ( “then” (“def” &amp;lt;varName&amp;gt; “:=”)? “{“&lt;br /&gt;
		&amp;lt;statements-i&amp;gt;&lt;br /&gt;
 	“}” ) * ( “catch” “(“ &amp;lt;exceptionVar&amp;gt; “)” “{“ &lt;br /&gt;
		&amp;lt;catchStatements&amp;gt;&lt;br /&gt;
	“}” )?  (“finally” “{“ &lt;br /&gt;
		&amp;lt;finallyStatements&amp;gt; &lt;br /&gt;
	“}”)?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The code  is executed like the following:&lt;br /&gt;
#The code in &amp;lt;statements-i&amp;gt; is executed sequentially. The next code block is executed only if promise returned from previous code block is resolved. If the block yields near value, the next block is executed on the same turn.&lt;br /&gt;
#The result of operator is the value of the last block.&lt;br /&gt;
#If some of blocks fails, the next blocks are not executed, and control is passed to the catch section and the result of operator will be the result of executing catch statement. If there is no catchSection, the operator fails with expression.&lt;br /&gt;
#If there is a finally statement, it is executed after last block or after catch statement. If it fails, the entire seq expression fails with the same exception.&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	seq def a := {&lt;br /&gt;
		doA()&lt;br /&gt;
	} then {&lt;br /&gt;
		doSomething(a)&lt;br /&gt;
	} catch(e) {&lt;br /&gt;
		print(e)&lt;br /&gt;
		throw e&lt;br /&gt;
	} finally {&lt;br /&gt;
		cleanup()&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Example is expanded as the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	when(someTempResolvedPromise) {&lt;br /&gt;
		def aVow := {&lt;br /&gt;
			doA()&lt;br /&gt;
		}&lt;br /&gt;
		when (def a := aVow) {&lt;br /&gt;
			doSomething(a)&lt;br /&gt;
		}&lt;br /&gt;
	}  catch(e) {&lt;br /&gt;
		print(e)&lt;br /&gt;
		throw e&lt;br /&gt;
	} finally {&lt;br /&gt;
		cleanup() &lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There is also a short form:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	“seq” “(“  (“def” &amp;lt;varName&amp;gt; “:=” )? &amp;lt;eventualExpression&amp;gt; ( “,” (“def” &amp;lt;varName&amp;gt; “:=” )? &amp;lt;eventualExpression&amp;gt; )* “)”&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The comma separated expressions are executed in sequence. The named values are available at later expressions.&lt;br /&gt;
The are three loops forms:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	“seq” “do” “{“&lt;br /&gt;
		&amp;lt;statements&amp;gt;&lt;br /&gt;
 	“}”  “while” “(“ &amp;lt;eventualExpressions&amp;gt; “)”&lt;br /&gt;
&lt;br /&gt;
	“seq” “while” “(“ &amp;lt;eventualExpressions&amp;gt; “)” “{“&lt;br /&gt;
		&amp;lt;statements&amp;gt;&lt;br /&gt;
 	“}”  &lt;br /&gt;
&lt;br /&gt;
	“seq” “for” &amp;lt;pattern&amp;gt; “in” &amp;lt;collection&amp;gt; “{“&lt;br /&gt;
		&amp;lt;statements&amp;gt;&lt;br /&gt;
 	“}”  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The semantics is the same as for normal loops. The next iteration starts only after previous completed. &lt;br /&gt;
TODO it might be useful to keep intermediate results of previous iteration and to make them available in the body of the loop and conditions. On other hand, it is quite easy to use basic seq operator to achieve the same result.&lt;br /&gt;
TODO “seq for” needs support for eventual iterators.&lt;br /&gt;
&lt;br /&gt;
==All==&lt;br /&gt;
This operator allows execution of eventual expressions in parallel. The basic form is the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
“all” “{“ &lt;br /&gt;
	&amp;lt;expression&amp;gt;&lt;br /&gt;
“}” ( “and” “{“&lt;br /&gt;
	&amp;lt;expression&amp;gt;&lt;br /&gt;
“}” )+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The short form is the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
“all” “(“ &amp;lt;expression&amp;gt; ( “,” &amp;lt;expression&amp;gt; )+ “)”&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Semantics is the following:&lt;br /&gt;
#All expressions starts to be executed.&lt;br /&gt;
#If all expressions completed successfully, a list of results is returned.&lt;br /&gt;
#If at least one expression fails, an exception that contains generated results and failures is generated.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
all {&lt;br /&gt;
	first()&lt;br /&gt;
} and {&lt;br /&gt;
	second()&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It is translated like the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	var wereFaults = false;&lt;br /&gt;
	var results = makeFlexList();&lt;br /&gt;
	results.setSize(2)&lt;br /&gt;
	var faults = makeFlexList();&lt;br /&gt;
	faults.setSize(2)&lt;br /&gt;
	def vow1 := seq def r: = {&lt;br /&gt;
		first()&lt;br /&gt;
	} then {&lt;br /&gt;
		results[0] := r&lt;br /&gt;
	} catch(e) {&lt;br /&gt;
		wereFaults = true&lt;br /&gt;
		faults[0] := e&lt;br /&gt;
		null&lt;br /&gt;
	}&lt;br /&gt;
	def vow2 := seq def r: = {&lt;br /&gt;
		second()&lt;br /&gt;
	} then {&lt;br /&gt;
		results[1] := r&lt;br /&gt;
	} catch(e) {&lt;br /&gt;
		wereFaults = true&lt;br /&gt;
		faults[1] := e&lt;br /&gt;
		null&lt;br /&gt;
	}&lt;br /&gt;
	when (def v1:=vow1, def v2:=vow2) {&lt;br /&gt;
		if(wereFaults) {&lt;br /&gt;
			throw makeAllFault(results,faults)&lt;br /&gt;
		} else {&lt;br /&gt;
			results.toConsList()&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There is also a loop form that returns conslist of results.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
“all” “for” &amp;lt;pattern&amp;gt; “in” &amp;lt;collection&amp;gt; “ “{“ &lt;br /&gt;
	&amp;lt;expression&amp;gt;&lt;br /&gt;
“}” &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Any==&lt;br /&gt;
Note: This is most tricky of the proposed operators. And I have not worked out details for E language yet. This construct is much simpler to do right in statically typed class based languages.&lt;br /&gt;
&lt;br /&gt;
This operator allows execution of several eventual expressions in parallel and picking the first available result. The basic form is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
“any” (“suppress_faults”)? (“compensated”)? “{” &lt;br /&gt;
	&amp;lt;expression&amp;gt;&lt;br /&gt;
“}” ( “or” (“compensated”)? “{”&lt;br /&gt;
	&amp;lt;expression&amp;gt;&lt;br /&gt;
“}” )+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The suppress faults modifier affects how faults are treated. If it presents, the faults are returned only if all alternatives returned failed. In this case the first received fault is thrown from any.&lt;br /&gt;
&lt;br /&gt;
The compensated modifier specifies that the branch will return a near value that implements a Compensated interface:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface Compensated {&lt;br /&gt;
    # this method is called by any operator to produce a value&lt;br /&gt;
    to run() : Vow[any]&lt;br /&gt;
    # this method is called by any operator if some branch has &lt;br /&gt;
    # produced a result. Implementation that does nothing&lt;br /&gt;
    # is a valid implementation. The method gives an branch&lt;br /&gt;
    # a chance to cancel production of result. &lt;br /&gt;
    to cancel()&lt;br /&gt;
    # If value from run method was produced but not returned &lt;br /&gt;
    # from any operator, this method is invoked with produced&lt;br /&gt;
    # value as an argument.&lt;br /&gt;
    to compensateValue(value : any)&lt;br /&gt;
    # If run method failed with fault, the resulting fault&lt;br /&gt;
    # can be compensated as well if it is not used (for example&lt;br /&gt;
    # logged).&lt;br /&gt;
    to compensateFailure(fault)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
any compensated {&lt;br /&gt;
  object _ {&lt;br /&gt;
    to run():Vow[any] {&lt;br /&gt;
      socketFactory&amp;lt;-connect(&amp;quot;localhost&amp;quot;, 2222)&lt;br /&gt;
    }&lt;br /&gt;
    to cancel() {}&lt;br /&gt;
    to compensateValue(socket) {&lt;br /&gt;
      print &amp;quot;eventually connected, but socket is closed&amp;quot;&lt;br /&gt;
      socket&amp;lt;-close()&lt;br /&gt;
    }&lt;br /&gt;
    to compensateFailure(e) {&lt;br /&gt;
      print e&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
} or {&lt;br /&gt;
  # The method is assumed to throw timeout fault after specified&lt;br /&gt;
  # amount of milliseconds. Note that might have been a good idea&lt;br /&gt;
  # to implement cancel operation for timer task. Note that this&lt;br /&gt;
  # method always finishes with a fault. &lt;br /&gt;
  timer&amp;lt;-timeoutMs(60000) &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is translated as the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
later {&lt;br /&gt;
  def [promise, resolver] := makePromise()&lt;br /&gt;
  var branch1_finished = false&lt;br /&gt;
  var branch2_finished = false&lt;br /&gt;
  var c1 = object _ {&lt;br /&gt;
    to run():Vow[any] {&lt;br /&gt;
      socketFactory&amp;lt;-connect(&amp;quot;localhost&amp;quot;, 2222)&lt;br /&gt;
    }&lt;br /&gt;
    to cancel() {}&lt;br /&gt;
    to compensateValue(socket) {&lt;br /&gt;
      print &amp;quot;eventually connected, but socket is closed&amp;quot;&lt;br /&gt;
      socket&amp;lt;-close()&lt;br /&gt;
    }&lt;br /&gt;
    to compensateFailure(e) {&lt;br /&gt;
      print e&lt;br /&gt;
    } &lt;br /&gt;
  }&lt;br /&gt;
  # run first branch&lt;br /&gt;
  seq def value := {&lt;br /&gt;
    c1.run()&lt;br /&gt;
  } then {&lt;br /&gt;
    branch1_finished := true&lt;br /&gt;
    if(!branch2_finished) {&lt;br /&gt;
       resolver&amp;lt;-resolve(value)&lt;br /&gt;
    } else {&lt;br /&gt;
       try {&lt;br /&gt;
         c.compensateValue(value)&lt;br /&gt;
       } catch(e) {log(e)}&lt;br /&gt;
    }&lt;br /&gt;
  } catch(e) {&lt;br /&gt;
    branch1_finished := true&lt;br /&gt;
    if(!branch2_finished) {&lt;br /&gt;
       resolver&amp;lt;-smash(e)&lt;br /&gt;
    } else {&lt;br /&gt;
       try {&lt;br /&gt;
         c.compensateFault(value)&lt;br /&gt;
       } catch(e) {log(e)}&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  # run second branch&lt;br /&gt;
  seq def value := {&lt;br /&gt;
    timer&amp;lt;-timeout(60000)&lt;br /&gt;
  } then {&lt;br /&gt;
    # a dead branch in our case&lt;br /&gt;
    branch2_finished := true&lt;br /&gt;
    if(!branch1_finished) {&lt;br /&gt;
       resolver&amp;lt;-resolve(value)&lt;br /&gt;
       try {&lt;br /&gt;
         c1.cancel()&lt;br /&gt;
       } catch(e) {log(e)}&lt;br /&gt;
    }&lt;br /&gt;
  } catch(e) {&lt;br /&gt;
    branch2_finished := true&lt;br /&gt;
    if(!branch1_finished) {&lt;br /&gt;
       resolver&amp;lt;-smash(e)&lt;br /&gt;
       try {&lt;br /&gt;
         c1.cancel()&lt;br /&gt;
       } catch(e2) {log(e2)}&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  promise&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is also a loop form that returns the first result.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
“any” (“suppress_faults”)? “for” &amp;lt;pattern&amp;gt; “in” &amp;lt;collection&amp;gt; (“compensated”)? “{” &lt;br /&gt;
	&amp;lt;expression&amp;gt;&lt;br /&gt;
“}” &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3371&amp;oldid=prev</id>
		<title>Markm:&amp;#32;/* Seq */</title>
		<link rel="alternate" type="text/html" href="http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3371&amp;oldid=prev"/>
				<updated>2007-11-20T20:40:18Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Seq&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 20:40, 20 November 2007&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 85:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 85:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	when(someTempResolvedPromise) {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	when(someTempResolvedPromise) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;		def aVow := {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;		def aVow := {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;			doA()&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;			doA()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;		}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;		}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;		when (def a := aVow) {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;		when (def a := aVow) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;			doSomething(a)&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;			doSomething(a)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;		}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;		}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	}&amp;nbsp; catch(e) {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	}&amp;nbsp; catch(e) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 119:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 119:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;TODO it might be useful to keep intermediate results of previous iteration and to make them available in the body of the loop and conditions. On other hand, it is quite easy to use basic seq operator to achieve the same result.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;TODO it might be useful to keep intermediate results of previous iteration and to make them available in the body of the loop and conditions. On other hand, it is quite easy to use basic seq operator to achieve the same result.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;TODO “seq for” needs support for eventual iterators.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;TODO “seq for” needs support for eventual iterators.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==All==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==All==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This operator allows execution of eventual expressions in parallel. The basic form is the following:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This operator allows execution of eventual expressions in parallel. The basic form is the following:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-25 13:31:35 --&gt;
&lt;/table&gt;</summary>
		<author><name>Markm</name></author>	</entry>

	<entry>
		<id>http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3370&amp;oldid=prev</id>
		<title>Markm:&amp;#32;/* Using */</title>
		<link rel="alternate" type="text/html" href="http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3370&amp;oldid=prev"/>
				<updated>2007-11-20T20:37:35Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Using&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 20:37, 20 November 2007&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 28:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 28:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;using(def r1 := factory1&amp;lt;-openConnection(),&amp;nbsp; def r2 := factory2&amp;lt;-openConnection(), lock&amp;lt;-lockEnter()) -&amp;gt; {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;using(def r1 := factory1&amp;lt;-openConnection(),&amp;nbsp; def r2 := factory2&amp;lt;-openConnection(), lock&amp;lt;-lockEnter()) -&amp;gt; {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	doSomething(r1,r1)&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;; // &lt;/del&gt;assuming that lock is being held&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	doSomething(r1,r1) &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;nbsp; # &lt;/ins&gt;assuming that lock is being held&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-25 13:31:35 --&gt;
&lt;/table&gt;</summary>
		<author><name>Markm</name></author>	</entry>

	<entry>
		<id>http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3369&amp;oldid=prev</id>
		<title>Markm:&amp;#32;/* Using */</title>
		<link rel="alternate" type="text/html" href="http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3369&amp;oldid=prev"/>
				<updated>2007-11-20T20:36:35Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Using&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 20:36, 20 November 2007&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 27:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 27:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Example:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Example:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;using(def r1 := factory1&amp;lt;-openConnection,&amp;nbsp; def r2 := factory2&amp;lt;-openConnection, lock&amp;lt;-lockEnter()) -&amp;gt; {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;using(def r1 := factory1&amp;lt;-openConnection&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;()&lt;/ins&gt;,&amp;nbsp; def r2 := factory2&amp;lt;-openConnection&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;()&lt;/ins&gt;, lock&amp;lt;-lockEnter()) -&amp;gt; {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	doSomething(r1,r1); // assuming that lock is being held&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	doSomething(r1,r1); // assuming that lock is being held&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-25 13:31:36 --&gt;
&lt;/table&gt;</summary>
		<author><name>Markm</name></author>	</entry>

	<entry>
		<id>http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3368&amp;oldid=prev</id>
		<title>Markm:&amp;#32;/* Later */</title>
		<link rel="alternate" type="text/html" href="http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3368&amp;oldid=prev"/>
				<updated>2007-11-20T20:33:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Later&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 20:33, 20 November 2007&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 4:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Later ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Later ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is an extremely simple construct. But is useful when it is &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;requited &lt;/del&gt;to execute code in this or other vat at some later time. In AsyncObjects this constructs is implemented using AsyncAction class, and it was used quite a lot in applications.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is an extremely simple construct. But is useful when it is &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;required &lt;/ins&gt;to execute code in this or other vat at some later time. In AsyncObjects this constructs is implemented using AsyncAction class, and it was used quite a lot in applications.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	“later” ( “(” &amp;lt;vatHandle&amp;gt; “)” )? “-&amp;gt;” “{“ &amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	“later” ( “(” &amp;lt;vatHandle&amp;gt; “)” )? “-&amp;gt;” “{“ &amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-25 13:31:36 --&gt;
&lt;/table&gt;</summary>
		<author><name>Markm</name></author>	</entry>

	<entry>
		<id>http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3367&amp;oldid=prev</id>
		<title>DavidHopwood:&amp;#32;/* Later */ typo</title>
		<link rel="alternate" type="text/html" href="http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3367&amp;oldid=prev"/>
				<updated>2007-11-20T19:49:56Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Later:&amp;#32;&lt;/span&gt; typo&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:49, 20 November 2007&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	“}”&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	“}”&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;When code is executed in other vat, the runtime checks that code closes only over deep frozen or &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;bass &lt;/del&gt;by copy objects. If vat is not specified, the code is scheduled to be executed at later turn in this vat. The vatHandle is an expression that evaluates to capability of executing actions on the vat.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;When code is executed in other vat, the runtime checks that code closes only over deep frozen or &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;pass &lt;/ins&gt;by copy objects. If vat is not specified, the code is scheduled to be executed at later turn in this vat. The vatHandle is an expression that evaluates to capability of executing actions on the vat.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Using==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Using==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-25 13:31:36 --&gt;
&lt;/table&gt;</summary>
		<author><name>DavidHopwood</name></author>	</entry>

	<entry>
		<id>http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3366&amp;oldid=prev</id>
		<title>Const at 18:13, 20 November 2007</title>
		<link rel="alternate" type="text/html" href="http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3366&amp;oldid=prev"/>
				<updated>2007-11-20T18:13:57Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 18:13, 20 November 2007&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 147:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 147:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;It is translated like the following:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;It is translated like the following:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;when(someResolvedPromise) -&amp;gt; &lt;/del&gt;{&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	var wereFaults = false;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	var wereFaults = false;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	var results = makeFlexList();&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	var results = makeFlexList();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-25 13:31:36 --&gt;
&lt;/table&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3365&amp;oldid=prev</id>
		<title>Const:&amp;#32;Initial submission</title>
		<link rel="alternate" type="text/html" href="http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;diff=3365&amp;oldid=prev"/>
				<updated>2007-11-20T17:49:00Z</updated>
		
		<summary type="html">&lt;p&gt;Initial submission&lt;/p&gt;
&lt;a href=&quot;http://wiki.erights.org/mediawiki/index.php?title=Proposed_Asynchronous_Control_Flow_Operators&amp;amp;diff=3365&amp;amp;oldid=1617&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Const</name></author>	</entry>

	</feed>