<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://50.77.162.165/mediawiki/skins/common/feed.css?207"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Erights - User contributions [en]</title>
		<link>http://50.77.162.165/wiki/Special:Contributions/Const</link>
		<description>From Erights</description>
		<language>en</language>
		<generator>MediaWiki 1.15.5-7</generator>
		<lastBuildDate>Mon, 20 Apr 2026 15:48:38 GMT</lastBuildDate>
		<item>
			<title>Proposed Asynchronous Control Flow Operators</title>
			<link>http://50.77.162.165/wiki/Proposed_Asynchronous_Control_Flow_Operators</link>
			<guid>http://50.77.162.165/wiki/Proposed_Asynchronous_Control_Flow_Operators</guid>
			<description>&lt;p&gt;Const:&amp;#32;&lt;/p&gt;
&lt;hr /&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;</description>
			<pubDate>Thu, 29 Nov 2007 18:54:35 GMT</pubDate>			<dc:creator>Const</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Proposed_Asynchronous_Control_Flow_Operators</comments>		</item>
		<item>
			<title>Proposed Asynchronous Control Flow Operators</title>
			<link>http://50.77.162.165/wiki/Proposed_Asynchronous_Control_Flow_Operators</link>
			<guid>http://50.77.162.165/wiki/Proposed_Asynchronous_Control_Flow_Operators</guid>
			<description>&lt;p&gt;Const:&amp;#32;&lt;/p&gt;
&lt;hr /&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 requited 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 bass 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;
==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;/div&gt;</description>
			<pubDate>Tue, 20 Nov 2007 18:13:57 GMT</pubDate>			<dc:creator>Const</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Proposed_Asynchronous_Control_Flow_Operators</comments>		</item>
		<item>
			<title>Proposed Asynchronous Control Flow Operators</title>
			<link>http://50.77.162.165/wiki/Proposed_Asynchronous_Control_Flow_Operators</link>
			<guid>http://50.77.162.165/wiki/Proposed_Asynchronous_Control_Flow_Operators</guid>
			<description>&lt;p&gt;Const:&amp;#32;Initial submission&lt;/p&gt;
&lt;hr /&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 requited 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 bass 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;
==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;
when(someResolvedPromise) -&amp;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;/div&gt;</description>
			<pubDate>Tue, 20 Nov 2007 17:49:00 GMT</pubDate>			<dc:creator>Const</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Proposed_Asynchronous_Control_Flow_Operators</comments>		</item>
		<item>
			<title>Future research topics</title>
			<link>http://50.77.162.165/wiki/Future_research_topics</link>
			<guid>http://50.77.162.165/wiki/Future_research_topics</guid>
			<description>&lt;p&gt;Const:&amp;#32;Added entry on stalled question of possible control flow enhancements (the proposal text will follow shortly to the link)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Develop a translator from E to some formalism that's good for reasoning about authority, such as SCOLL or perhaps an appropriate process algebra. This would have obvious connections to language design and translation, as well as some mathematical / formal analysis leanings. One might even be able to consider this in the context of proof carrying code -- E modules carrying proofs about their security properties would be an interesting thing indeed.&lt;br /&gt;
&lt;br /&gt;
*Investigate the connection between E and the work on using type systems to enforce capability security ala &amp;quot;lightweight static capabilities&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*Take up the CapDesk mantle and build a robust POLA desktop on top of E, using available tools such as Plash or other permission-limiting application environments in order to allow the integration of legacy applications. This would likely also include looking at how existing application launching and packaging frameworks can be leveraged (such as the XML .desktop files used by GNOME for example)&lt;br /&gt;
&lt;br /&gt;
*Complete the E-Native work, which would result in an E runtime environment that isn't layered on top of another runtime environment (e.g., JR, Lisp, Squeak). Unique Research Contributions:&lt;br /&gt;
**Develop a VM (OCVM?) that embodies object capability semantics&lt;br /&gt;
**Implement the OCVM in a verifiable language (e.g., BitC)&lt;br /&gt;
**Develop the Kernel-E AST to OCVM compiler&lt;br /&gt;
**Develop a (verifiable?) native implementation of CapTP (although the current implementation of CapTP in Java will probably be replaced soon with one written in E)&lt;br /&gt;
&lt;br /&gt;
*Re-implement COUGAAR [http://www.cougaar.org/] in E to show how object-capability security and promises can be used to simplify and secure distributed, concurrent agent planning systems. Unique Research Contributions:&lt;br /&gt;
**Intrinsically secure distributed agent system&lt;br /&gt;
**Early (first?) large-scale E (object capability) application&lt;br /&gt;
**Worked example of applying object capability patterns to the design of a large distributed system&lt;br /&gt;
&lt;br /&gt;
*EBASS (E-Based Application Server System). Develop an E application server framework (like J2EE or the CORBA Component Model) that provides an infrastructure for deploying general-purpose E services, while orthogonally managing and enforcing organization security policies using object capability patterns. Unique Research Contributions:&lt;br /&gt;
**Intrinsically secure application server system&lt;br /&gt;
**Early (first?) large-scale E (object capability) application&lt;br /&gt;
**Worked example of applying object capability patterns to the design of a large distributed system&lt;br /&gt;
&lt;br /&gt;
*Invent a way to securely re-use native code libraries in E applications or perhaps Emily. Details can be found in [http://www.eros-os.org/pipermail/e-lang/2007-April/011985.html], [http://www.eros-os.org/pipermail/e-lang/2007-April/011987.html], [http://www.eros-os.org/pipermail/e-lang/2007-April/011988.html] and [http://www.eros-os.org/pipermail/e-lang/2007-April/011989.html].&lt;br /&gt;
&lt;br /&gt;
*Implement a version of Second Life that works in a more distributed manner.  Instead of relying on just centralized servers, spread the processing and storage of objects to all the end-user machines instead.&lt;br /&gt;
&lt;br /&gt;
*Implement a content management system - like ZOPE - in E. This would be especially true if E moves to using Tyler Close's HTTPSY protocol beneath CapTP, since it would then be directly usable by standard web browsers.&lt;br /&gt;
&lt;br /&gt;
*Expanding CapDesk to become a generalized secure rich client platform (CapClient?) would be a tremendous development. Combined with EBASS, we would then have the ability to create end-to-end secure applications.&lt;br /&gt;
&lt;br /&gt;
*Auditing [http://www.erights.org/elang/kernel/auditors/]. Note that the E-on-CL auditing system is quite different from the one documented here, with interesting advantages and disadvantages. The current E-on-Java is slowly working towards yet another take on an auditing architecture, but it's much less far along. Joe-E special cases some built-in auditors, but we've talked about generalizing it to an openly extensible static auditing framework. During the Waterken security review, we found that around 25% of the classes in the Waterken system were Powerless. In other words, they had passed the Joe-E static checker assuring that they were authority-free. As a result, we were able to ignore these regarding many security-relevant questions during the review. This demonstrates that the auditing idea has a lot of value.&lt;br /&gt;
&lt;br /&gt;
*Safe Serialization Under Mutual Suspicion [http://erights.org/data/serial/jhu-paper/]. The issues involved in serializing a graph of mutually suspicious objects is otherwise unexplored. At these pages, I think we raise more questions than we answer. The need for a good serialization framework meeting these goals seems to come up over and over again in different contexts. The notion (due to Jonathan Rees) of serialization as un-evaluations seems like a very rich starting point. In a recent conversation with Alan Karp and Marc Stiegler, we arrived at a new perspective on un-evaluation. At one simple extreme, we have the literal realism of orthogonal persistence, where objects simply get to keep whatever rights they acquired. We assume that a held permission can only be acquired &amp;quot;legitimately&amp;quot;, so the holding of a permission is an adequate demonstration of a the right to continue holding that permission. At a hypothetical simple opposite extreme approximated by SPKI, the entire delegation chain by which a permission was actually acquired is recorded, and is presented afresh each time the permission is exercised, effectively as a chain of title (sharings, not transfers), enabling a fresh check each time that the permission was acquired legitimately. When these two give extremes always give the same answer, the difference is uninteresting. However, if the &amp;quot;rules&amp;quot; change, the first &amp;quot;historyless&amp;quot; system can only grandfather-in all permissions acquired so far by the old rules. OTOH, the SPKI-like system can determine whether to accept as legitimate, under the new rules, the means by which the permissions were acquired under the old. (Note: in general, and especially in the human world, I generally prefer historyless rights systems over retro-active re-evaluations. But both have a place.) Un-evaluation is a complex expressive mid-point between these two. In order for the object to retain its rights across a serialization boundary, i.e., to reconstitute an object like itself with permissions like those it currently holds, it must be able to construct from its current state a rationalization (the uncall), i.e., a simplified story about how it could have gotten these permissions. In the world in which this expression is evaluated, it may or may not succeed at re-obtaining permissions like those it held.&lt;br /&gt;
&lt;br /&gt;
*Decision Alignment (see [http://www.eros-os.org/pipermail/e-lang/2007-April/011997.html]).&lt;br /&gt;
&lt;br /&gt;
*Solve upgrade and legacy compatibility issues (see [http://www.eros-os.org/pipermail/e-lang/2007-April/011998.html]).&lt;br /&gt;
&lt;br /&gt;
*Continue the work of Alfred Spiessens on formal systems for reasoning about authority propagation and practical tools using them.  This work would continue his thesis work: [http://www.info.ucl.ac.be/people/PVR/fsp_thesis.pdf].&lt;br /&gt;
&lt;br /&gt;
*Alfred Spiessens' point 2 on page 282 of his thesis.&lt;br /&gt;
&lt;br /&gt;
*Investigate possible enhancement to set of E asynchronous control flow operators [[Proposed Asynchronous Control Flow Operators]]&lt;/div&gt;</description>
			<pubDate>Tue, 20 Nov 2007 17:35:03 GMT</pubDate>			<dc:creator>Const</dc:creator>			<comments>http://50.77.162.165/wiki/Talk:Future_research_topics</comments>		</item>
	</channel>
</rss>