<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://ds7.deltamobile.com/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://ds7.deltamobile.com/wiki/Special:Contributions/Kevin_Reid</link>
		<description>From Erights</description>
		<language>en</language>
		<generator>MediaWiki 1.15.5-7</generator>
		<lastBuildDate>Wed, 08 Apr 2026 13:49:27 GMT</lastBuildDate>
		<item>
			<title>Test bin</title>
			<link>http://ds7.deltamobile.com/wiki/Test_bin</link>
			<guid>http://ds7.deltamobile.com/wiki/Test_bin</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;/* Expansion of bare try */ new test case&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for E implementation conformance tests for which a more specific location has not ''yet'' been found.&lt;br /&gt;
&lt;br /&gt;
===How [[User:Kevin Reid]] thinks doc-comments ought to work===&lt;br /&gt;
&lt;br /&gt;
(1 outside space is dropped, function obj doc goes on the method) {{XXX|add multiline doc tests, w roundtrip}}&lt;br /&gt;
&lt;br /&gt;
 ? /** foo */ def x {}&lt;br /&gt;
 # value: &amp;lt;x&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? x.__getAllegedType().getDocComment()&lt;br /&gt;
 # value: &amp;quot;foo&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ? /** foo */ def y() :void {}&lt;br /&gt;
 # value: &amp;lt;y&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? y.__getAllegedType().getDocComment()&lt;br /&gt;
 # value: &amp;quot;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ? y.__getAllegedType().getMessageTypes()[&amp;quot;run/0&amp;quot;].getDocComment()&lt;br /&gt;
 # value: &amp;quot;foo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Trailing commas===&lt;br /&gt;
&lt;br /&gt;
Trailing commas should be consistently accepted everywhere (aren't in map-patterns):&lt;br /&gt;
 ? __identityFunc(1,)&lt;br /&gt;
 # value: 1&lt;br /&gt;
 &lt;br /&gt;
 ? [1,]&lt;br /&gt;
 # value: [1]&lt;br /&gt;
 &lt;br /&gt;
 ? [1 =&amp;gt; 2,]&lt;br /&gt;
 # value: [1 =&amp;gt; 2]&lt;br /&gt;
 &lt;br /&gt;
 ? [null, true, false][1,]&lt;br /&gt;
 # value: true&lt;br /&gt;
 &lt;br /&gt;
 ? def [a,] := [1]&lt;br /&gt;
 # value: [1]&lt;br /&gt;
 &lt;br /&gt;
 ? def foo(a,) :void {}&lt;br /&gt;
 # value: &amp;lt;foo&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===Expansion of multiple try-catch===&lt;br /&gt;
&lt;br /&gt;
 ? try { throw(&amp;quot;oops&amp;quot;) } catch ==1 {}&lt;br /&gt;
 # problem: oops&lt;br /&gt;
 &lt;br /&gt;
 ? try { throw(&amp;quot;oops&amp;quot;) } catch ==1 {} catch ==2 {}&lt;br /&gt;
 # problem: oops&lt;br /&gt;
That is, none of the patterns matching should be equivalent to a single catch not matching (Fails in [[EoJ]] 0.9.1b)&lt;br /&gt;
&lt;br /&gt;
===Expansion of bare try===&lt;br /&gt;
&lt;br /&gt;
 ? def x := 1; try { def x := 2 }; x&lt;br /&gt;
 # value: 1&lt;br /&gt;
&lt;br /&gt;
General &amp;lt;code&amp;gt;try&amp;lt;/code&amp;gt; should expand to a [[HideExpr]] for the sake of scoping if there are no clauses. (Currently fails in [[E-on-CL]].)&lt;br /&gt;
&lt;br /&gt;
===Expansion of bind===&lt;br /&gt;
&lt;br /&gt;
 ? def x&lt;br /&gt;
 # value: &amp;lt;Resolver&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? bind x {}&lt;br /&gt;
 # value: &amp;lt;x&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? x.__getAllegedType().getFQName()&lt;br /&gt;
 # value: &amp;quot;__main$x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Expansion of map pattern===&lt;br /&gt;
&lt;br /&gt;
 ? def a := &amp;quot;43&amp;quot;&lt;br /&gt;
 # value: &amp;quot;43&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ? def b :int := a&lt;br /&gt;
 # problem: &amp;lt;ClassCastException: String doesn't coerce to an int&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? def [b :int] := [a]&lt;br /&gt;
 # problem: &amp;lt;ClassCastException: String doesn't coerce to an int&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? def [&amp;quot;&amp;quot; =&amp;gt; b :int] := [&amp;quot;&amp;quot; =&amp;gt; a]&lt;br /&gt;
 # problem: &amp;lt;ClassCastException: String doesn't coerce to an int&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? def [&amp;quot;x&amp;quot; =&amp;gt; _] := [&amp;quot;&amp;quot; =&amp;gt; a]&lt;br /&gt;
 # problem: x not found&lt;br /&gt;
&lt;br /&gt;
===Serialization===&lt;br /&gt;
&lt;br /&gt;
 ? pragma.syntax(&amp;quot;0.9&amp;quot;)&lt;br /&gt;
 &amp;gt; pragma.enable(&amp;quot;accumulator&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 ? def makeSurgeon := &amp;lt;elib:serial.makeSurgeon&amp;gt;&lt;br /&gt;
 # value: &amp;lt;makeSurgeon&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? def surgeons := [&amp;quot;default&amp;quot; =&amp;gt; makeSurgeon(), &amp;quot;src&amp;quot; =&amp;gt; makeSurgeon.withSrcKit(null)]&lt;br /&gt;
 # value: [&amp;quot;default&amp;quot; =&amp;gt; &amp;lt;surgeon&amp;gt;, &amp;quot;src&amp;quot; =&amp;gt; &amp;lt;readOnlySurgeon&amp;gt;]&lt;br /&gt;
 &lt;br /&gt;
 ? def check(x, ignore) {&lt;br /&gt;
 &amp;gt;   def diffs := accum [].asMap() for k =&amp;gt; surgeon in surgeons { _.with(k,&lt;br /&gt;
 &amp;gt;     def y := surgeon.unserialize(surgeon.serialize(x))&lt;br /&gt;
 &amp;gt;     accum [] for check ? (!ignore.contains(check)) =&amp;gt; r ? (!r) in [&lt;br /&gt;
 &amp;gt;       &amp;quot;same&amp;quot;  =&amp;gt; x == y,&lt;br /&gt;
 &amp;gt;       &amp;quot;equiv&amp;quot; =&amp;gt; !x.__respondsTo(&amp;quot;compareTo&amp;quot;,1) || x &amp;lt;=&amp;gt; y,&lt;br /&gt;
 &amp;gt;       &amp;quot;print&amp;quot; =&amp;gt; E.toString(x) == E.toString(y)&lt;br /&gt;
 &amp;gt;     ] { _.with([check, x, y]) }&lt;br /&gt;
 &amp;gt;   )}&lt;br /&gt;
 &amp;gt;   return accum [].asMap() for k =&amp;gt; v ? (v !~ []) in diffs { _.with(k, v) }&lt;br /&gt;
 &amp;gt; }&lt;br /&gt;
 # value: &amp;lt;check&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? check(1, [])&lt;br /&gt;
 # value: [].asMap()&lt;br /&gt;
 &lt;br /&gt;
 ? check([1,2,3], [])&lt;br /&gt;
 # value: [].asMap()&lt;br /&gt;
 &lt;br /&gt;
 ? check(def x := [1,2,x], [])&lt;br /&gt;
 # value: [].asMap()&lt;br /&gt;
 &lt;br /&gt;
 ? check(Guard, [])&lt;br /&gt;
 # value: [].asMap()&lt;br /&gt;
 &lt;br /&gt;
 ? check(78452960457820936578390758342950673284590431267589324057832946723148963275893465783049856783294507632894506732158912365478567145683415063127849561839450768239032675890432675843294067538490576382590432764589320457832940732849507324893076849051326758903426758903265748329405678329056732895032764853290576438259063278590267589023157689023456784321905632748950634278590342675893214056732841095673214850934726589032467583904576823904561758463859340758329067430642891467389027548790365783567438567473287237458763289478945137536498671236478658920786905234876435187903524783452608079342580796345218076953410876913458079634512087963451208796345017890493578108793452107893451289073452178960345179802879345178693451025734689012768059341278695134278906543210453780216978690543214532786091453782619054386719023452187690134528076931248570691578034629132076845932145768032104657834521780690786934512673845120978603459123456712809341572680931457086293457806219, [])&lt;br /&gt;
 # value: [].asMap()&lt;br /&gt;
 &lt;br /&gt;
 ? check([].diverge(), [&amp;quot;same&amp;quot;])&lt;br /&gt;
 # value: [].asMap()&lt;br /&gt;
&lt;br /&gt;
===???===&lt;br /&gt;
 ? E.toString(help(/** FOO */ def _{})).indexOf(&amp;quot;FOO&amp;quot;) != -1&lt;br /&gt;
 # value: true&lt;br /&gt;
&lt;br /&gt;
===Behavior of __getAllegedType on objects with non-general matchers===&lt;br /&gt;
{{XXX|write some explanation with this}}&lt;br /&gt;
&lt;br /&gt;
 ? def _ {}.__getAllegedType()&lt;br /&gt;
 # value: _&lt;br /&gt;
 &lt;br /&gt;
 ? def _ { match _ {} }.__getAllegedType()&lt;br /&gt;
 # value: _&lt;br /&gt;
 &lt;br /&gt;
 ? def _ { match [] {} }.__getAllegedType()&lt;br /&gt;
 # value: _&lt;br /&gt;
 &lt;br /&gt;
 ? require.__getAllegedType()&lt;br /&gt;
 # value: require0&lt;br /&gt;
&lt;br /&gt;
===Processing __N should be idempotent===&lt;br /&gt;
&lt;br /&gt;
 ? def foos := [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;]&lt;br /&gt;
 &lt;br /&gt;
 ? e`def [foo__1, foo__2] := foos`&lt;br /&gt;
 # value: e`def [foo__1, foo__2] := foos`&lt;br /&gt;
 &lt;br /&gt;
 ? e__quasiParser(e`def [foo__1, foo__2] := foos`.asText()) \&lt;br /&gt;
 &amp;gt;             =~ e`def [foo__1, foo__2] := foos`&lt;br /&gt;
 # value: true&lt;br /&gt;
 &lt;br /&gt;
 ? def [foo__1, foo__2] := foos; null&lt;br /&gt;
 ? [=&amp;gt; foo__1, =&amp;gt; foo__2]&lt;br /&gt;
 # value: [&amp;quot;foo__1&amp;quot; =&amp;gt; &amp;quot;a&amp;quot;, &amp;quot;foo__2&amp;quot; =&amp;gt; &amp;quot;b&amp;quot;]&lt;br /&gt;
 &lt;br /&gt;
 ? meta.getState()[&amp;quot;&amp;amp;foo__1&amp;quot;].getValue()&lt;br /&gt;
 # value: &amp;quot;a&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Regression tests==&lt;br /&gt;
&lt;br /&gt;
===This used to hang on [[E-on-Java]]===&lt;br /&gt;
 ? def T := nullOk[Tuple[any, T]]&lt;br /&gt;
 # value: nullOk[Tuple[any, &amp;lt;***CYCLE***&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
===These used to reveal pointers on [[E-on-Java]]===&lt;br /&gt;
 ? [].asMap()[&amp;lt;import:java.lang.makeObject&amp;gt;()]&lt;br /&gt;
 # problem: &amp;lt;IndexOutOfBoundsException: &amp;lt;an Object&amp;gt; not found&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? 1.0.random()&lt;br /&gt;
 # problem: &amp;lt;NoSuchMethodException: &amp;lt;a Double&amp;gt;.random/0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===???===&lt;br /&gt;
 ? def l := [].diverge(char)&lt;br /&gt;
 # value: [].diverge()&lt;br /&gt;
 &lt;br /&gt;
 ? l.append(['a', 'b', 'c'])&lt;br /&gt;
 &lt;br /&gt;
 ? l&lt;br /&gt;
 # value: ['a', 'b', 'c'].diverge()&lt;br /&gt;
&lt;br /&gt;
===This used to fail to be rejected in [[E-on-Java]]===&lt;br /&gt;
 ? { x + 1; def x := 2 }&lt;br /&gt;
 # problem: Failed: Undefined variable: x&lt;br /&gt;
 &lt;br /&gt;
 ? {[x + 1, def x := 2]}&lt;br /&gt;
 # problem: Failed: Undefined variable: x&lt;br /&gt;
 &lt;br /&gt;
As of 0.8.30d, the results of these were:&lt;br /&gt;
   # value: 2&lt;br /&gt;
   # value: [485, 2]&lt;br /&gt;
&lt;br /&gt;
===Miranda messages should not expose Java typed names===&lt;br /&gt;
&lt;br /&gt;
 ? def obj {&lt;br /&gt;
 &amp;gt;   to __getAllegedType() :any { return null.__getAllegedType() }&lt;br /&gt;
 &amp;gt; }&lt;br /&gt;
 # value: &amp;lt;obj&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? obj.__getAllegedType()&lt;br /&gt;
 # value: void&lt;br /&gt;
 &lt;br /&gt;
 ? [obj.&amp;quot;__getAllegedType()&amp;quot;()]&lt;br /&gt;
 # problem: &amp;lt;NoSuchMethodException: &amp;lt;an obj&amp;gt;.__getAllegedType()/0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:E specification]]&lt;/div&gt;</description>
			<pubDate>Mon, 10 Jun 2013 01:48:48 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Test_bin</comments>		</item>
		<item>
			<title>Services</title>
			<link>http://ds7.deltamobile.com/wiki/Services</link>
			<guid>http://ds7.deltamobile.com/wiki/Services</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;Created page with &amp;quot;This page is a catalog of web sites, repositories, and other services pertaining to the ERights project. It is intended to assist in assessing the health of the project and make …&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a catalog of web sites, repositories, and other services pertaining to the ERights project. It is intended to assist in assessing the health of the project and make sure that historical data is not lost.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Service !! Administrators !! Dependencies (servers, companies) !! Notes (backups, etc)&lt;br /&gt;
|-&lt;br /&gt;
| Mailing lists (e-lang and cap-talk) || Jonathan S. Shapiro || eros-os.org || Both mailing lists and archives&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.erights.org/ erights.org] DNS || Mark Miller, {{XXX|any others?}} || {{XXX}} ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.erights.org/ www.erights.org] hosting/content || Mark Miller, {{XXX|any others?}} || {{XXX}} ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.erights.org/wiki/Main_Page wiki.erights.org] || James Graves (ansible) || {{XXX}} || See [[Erights:About]] for information about database backups.&lt;br /&gt;
|-&lt;br /&gt;
| E Subversion repository: &amp;lt;code&amp;gt;svn://svn.synchrona.org/erights/&amp;lt;/code&amp;gt; || Dean Tribble || {{XXX}}&lt;br /&gt;
| Contents:&lt;br /&gt;
* www.erights.org content&lt;br /&gt;
* E-on-Java source code&lt;br /&gt;
* Horton source code and paper&lt;br /&gt;
* Joe-E source code&lt;br /&gt;
Kevin Reid has a private svnsync mirror of the entire repository and a [https://github.com/kpreid/e-on-java public git-svn mirror] of the E-on-Java component.&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/tracker/?group_id=75274&amp;amp;atid=551529 E-on-Java bug tracker] || Mark Miller, Darius Bacon, Kevin Reid, Marc Stiegler, Steve Jenson, Terry Stanley || SourceForge.net ||&lt;br /&gt;
|}&lt;/div&gt;</description>
			<pubDate>Sun, 25 Nov 2012 18:55:09 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Services</comments>		</item>
		<item>
			<title>Development</title>
			<link>http://ds7.deltamobile.com/wiki/Development</link>
			<guid>http://ds7.deltamobile.com/wiki/Development</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;/* Bug Tracking */ provided URL was auth-only, hopefully this one isn't&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Source Code ==&lt;br /&gt;
&lt;br /&gt;
If you wish to obtain an official stable release of '''''E''''', see the [[Downloads]] page.&lt;br /&gt;
&lt;br /&gt;
=== Official Subversion Repository ===&lt;br /&gt;
&lt;br /&gt;
The '''''E''''' sources and the erights.org website are both maintained in [[wikipedia:Subversion|Subversion]]. If you have a Subversion client, you can check out the latest '''''E''''' sources by doing, for example,&lt;br /&gt;
&lt;br /&gt;
    $ svn co svn://svn.synchrona.org/erights/e/trunk e&lt;br /&gt;
&lt;br /&gt;
You can obtain the erights.org website by doing&lt;br /&gt;
&lt;br /&gt;
    $ svn co svn://svn.synchrona.org/erights/doc doc&lt;br /&gt;
&lt;br /&gt;
=== Unofficial Git Repository ===&lt;br /&gt;
&lt;br /&gt;
http://gitorious.org/repo-roscidus/e-core&lt;br /&gt;
&lt;br /&gt;
== Bug Tracking ==&lt;br /&gt;
&lt;br /&gt;
[https://sourceforge.net/tracker/?group_id=75274&amp;amp;atid=551529 '''''E''''' Bug Tracking on SourceForge]&lt;br /&gt;
&lt;br /&gt;
== Design and Future Directions ==&lt;br /&gt;
&lt;br /&gt;
[[:Category:Unresolved design issues|Unresolved Design Issues]]&lt;br /&gt;
&lt;br /&gt;
== Development Environments ==&lt;br /&gt;
&lt;br /&gt;
[[E Under Eclipse|'''''E''''' Under Eclipse]]&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/nbe-lang/ NetBeans support for '''''E''''']&lt;/div&gt;</description>
			<pubDate>Sun, 25 Nov 2012 18:46:05 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Development</comments>		</item>
		<item>
			<title>User:Kevin Reid</title>
			<link>http://ds7.deltamobile.com/wiki/User:Kevin_Reid</link>
			<guid>http://ds7.deltamobile.com/wiki/User:Kevin_Reid</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;/* Projects */ link tmbundle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://switchb.org/kpreid/ My web site].&lt;br /&gt;
&lt;br /&gt;
[http://www.google.com/search?q=inurl:www.eros-os.org/pipermail/+%22Kevin+Reid%22&amp;amp;filter=0 My posts on the e-lang and cap-talk mailing lists].&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
Roughly in order of liveness.&lt;br /&gt;
&lt;br /&gt;
* I am currently the semi-official E-on-Java maintainer as [[User:Markm|Mark Miller]] is busy with other projects.&lt;br /&gt;
* eel/runebot/murepl, the IRC bot etc. project (source not released; currently runs on my personal laptop which is a situation that Really Ought To Be Fixed)&lt;br /&gt;
* [[E-on-CL]] — E implementation&lt;br /&gt;
* [https://github.com/kpreid/E.tmbundle E support for TextMate]&lt;br /&gt;
* [[Caja-CapTP]] — adapting [[CapTP]] to [[Caja]].&lt;br /&gt;
* [[e-benchmark]] — benchmarking E implementations.&lt;br /&gt;
* [[E-on-Haskell]] — E implementation&lt;br /&gt;
* [[kEIO]] — [[EIO]] implementation for [[E-on-Java]]&lt;br /&gt;
* [[Den]] — distributed virtual world platform&lt;br /&gt;
* The [[surprise list]].&lt;br /&gt;
&lt;br /&gt;
== Scraps ==&lt;br /&gt;
&lt;br /&gt;
* [[gendoc.e]]&lt;br /&gt;
* [[/java3d.e-awt]] — Java 3D API used from E&lt;br /&gt;
* [[/scribble.e-awt]] — Simple Swing UI application with custom graphics&lt;br /&gt;
&lt;br /&gt;
=== Drafts ===&lt;br /&gt;
&lt;br /&gt;
* [[/User far proxy]] — project to allow a human to provide the behavior of a far ref&lt;br /&gt;
* [[/Thoughts on protocol queries]] — how does one object ask another what protocols it supports reliably?&lt;br /&gt;
* [[/Defining algebraic data types]] — sketch of a shortcut for defining data structures in the style of Haskell&lt;br /&gt;
&lt;br /&gt;
=== Nonworking programs ===&lt;br /&gt;
&lt;br /&gt;
* [[/Mac open event handler test]] — Can we have an [[E-on-Java]] app that handles Mac open events using the Apple Java extensions? No success yet.&lt;br /&gt;
* [[/ASTPrint.java]] — Minimal Java program attempting to set up an E-on-Java vat and do something in it. Doesn't work currently (or ever); haven't investigated.&lt;br /&gt;
&lt;br /&gt;
Not even completely written:&lt;br /&gt;
&lt;br /&gt;
* [[/unification.emaker]] — Implement unification variables in E: a single object which acts as promise and resolver, and a procedure which makes two values equal by resolving variables if possible. Incomplete code.&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
&lt;br /&gt;
;Redefine interp.getArgs():&lt;br /&gt;
:&amp;lt;code&amp;gt;def scope := e`def baseInterp := interp;def interp extends baseInterp { to getArgs() { return [the new args] }}`.evalToPair(privilegedScope.nestOuter())[1]&amp;lt;/code&amp;gt;&lt;br /&gt;
;Bring a file's definitions into REPL scope:&lt;br /&gt;
:&amp;lt;code&amp;gt;interp.setTopScope(e__quasiParser('''myFile'''.getTwine()).evalToPair(privilegedScope)[1])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other material ==&lt;br /&gt;
&lt;br /&gt;
* [[/JS bookmarks]] — JavaScript and Caja links.&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
&lt;br /&gt;
This should probably be migrated into an issue tracker. Right now we're nominally [http://sourceforge.net/tracker/?group_id=75274 using SourceForge], but I, at least, find it tedious to work with.&lt;br /&gt;
&lt;br /&gt;
That said, these are my ''personal'' things-which-ought-to-be-done, and not the reflection of any consensus; I'm just dumping them here because it's better than them living in a random file on my hard disk.&lt;br /&gt;
&lt;br /&gt;
=== E-on-Java work to do===&lt;br /&gt;
&lt;br /&gt;
* Security&lt;br /&gt;
** Change the default taming policy for no-safej-file classes from ALL to NONE. (2010-02-27)&lt;br /&gt;
** Add shortcut syntax to [[SafeJ]] files for declaring allow-all, then replace the functionality of ApprovedClassList with safej files using that syntax. (2010-02-27)&lt;br /&gt;
&lt;br /&gt;
* Cleanup&lt;br /&gt;
** Documentation, including impl-specific, should go to the wiki. Spec tests go to the wiki ([[:Category:E specification]]). Impl-specific (features and regression) tests stay in source tree. (2010-02-27)&lt;br /&gt;
&lt;br /&gt;
* Features&lt;br /&gt;
** add fromKeysOf and fromValuesOf as [[ConstList]] and [[ConstMap]] maker methods. also rename fromIteratable to fromAssociationsOf (2008-03-24)&lt;br /&gt;
** Make setup.e-awt work on other platforms. (2008-03-24)&lt;br /&gt;
** Make setup use powerbox-style operation rather than being unconditionally privileged. (2008-03-24)&lt;br /&gt;
** Make [[TextWriter]]s [[pass by construction]], as provided in [[E-on-CL]]. (2008-03-24)&lt;br /&gt;
** Make objects print with FQN-prefix components if their local name is _, like they used to. (2008-03-24)&lt;br /&gt;
** Make safejTemplate.e into a caplet, if we can make it possible to give a caplet permission to run javap ... oh, my taming-command-line-tools framework (2008-03-24)&lt;br /&gt;
** Java subtyping relations should be exposed as Class's implementation of rangeSupersetOf &lt;br /&gt;
* ???&lt;br /&gt;
** https://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1666433&amp;amp;group_id=75274&amp;amp;atid=551529 (2008-03-24)&lt;br /&gt;
** https://sourceforge.net/tracker/?group_id=75274&amp;amp;atid=551529 (2008-03-24)&lt;br /&gt;
&lt;br /&gt;
* Bug fixes:&lt;br /&gt;
** powerboxControllerMakerAuthor.emaker -- JFileChooser usage treats cancel the same as OK (2008-03-24)&lt;br /&gt;
* Test fixes:&lt;br /&gt;
** makeIOUIssuer.updoc and sugar-demo.e-swt contain hardcoded references to ~/e/src/ which is wrong (2008-03-24)&lt;br /&gt;
** esrc/com/opencola/drm/example/MintMaker.updoc contains an expectation of E version (2008-03-24)&lt;br /&gt;
** esrc/org/erights/e/elang/interp/makeBootServer.updoc contains an expectation of install path (2008-03-24)&lt;br /&gt;
** esrc/org/erights/e/elib/sealing/makeVOCPair.emaker contains an expectation of ~ path (2008-03-24)&lt;br /&gt;
** esrc/org/erights/e/elib/slot/lamport.updoc has &amp;lt;_&amp;gt; where is now &amp;lt;everFormula&amp;gt; (2008-03-24)&lt;br /&gt;
** esrc/org/erights/e/examples/arith/makeRational.updoc ditto &amp;lt;makeRational&amp;gt; (2008-03-24)&lt;br /&gt;
** esrc/org/erights/e/extern/persist/persist.updoc runs out of heap space - ??? (2008-03-24)&lt;br /&gt;
** esrc/org/erights/e/facet/makeCaretaker.updoc expectation of cwd path (2008-03-24)&lt;br /&gt;
&lt;br /&gt;
=== E-on-CL work to do/misc notes ===&lt;br /&gt;
&lt;br /&gt;
* Old notes from Jul 17 2008:&lt;br /&gt;
** eocl r992:993 introduced a slowdown [in executing --updoc tests/captp/introducer.updoc].&lt;br /&gt;
** Stuff about custom method specializers in SBCL: [http://doc.gold.ac.uk/~mas01cr/tmp/skill.lisp] [http://doc.gold.ac.uk/~mas01cr/tmp/paper.pdf] [http://www.doc.gold.ac.uk/~mas01cr/tmp/mop-27.impure.lisp]&lt;br /&gt;
** [[transparent]] does NOT imply ok-for-[[Selfless]]. transparent can be mutable, e.g. [[FlexList]] (w/o value guard?) is transparent. TODO: revise Selfless to drop the independent Selfless auditor, in favor of TransparentSelfless approval, etc. -- because (Selfless+Transparent) isn't sufficient, we need to require immutability as well&lt;br /&gt;
** invocation for benchmarking + sprof-tree: &amp;lt;pre&amp;gt;time rlwrap ./clrune -L--eval -L'(require :sb-sprof)' -L--load -L ~/Documents/sbslow-project/sbcl/sprof-tree.lisp -L--eval -L'(setf sb-sprof:*sample-interval* 0.1)' -L--eval -L'(defun sb-sprof::report () (with-open-file (s &amp;quot;sampler-updoc.trace&amp;quot; :direction :output :element-type :default :if-exists :supersede) (sb-sprof::write-sampler-data s)))' -p ../sb-parse-cache.sexp --updoc --profile sb-sprof tests/captp/AnswersTable.updoc&amp;lt;/pre&amp;gt;&lt;br /&gt;
*** this may be obsolete due to having profile options in clrune —[[User:Kevin Reid|Kevin Reid]] 08:56, 6 May 2010 (CDT)&lt;br /&gt;
&lt;br /&gt;
=== For all implementations ===&lt;br /&gt;
&lt;br /&gt;
* Take the draft utility library called 'Flow' and publish it, possibly as part of the E standard library&lt;br /&gt;
* meta.getState() is to be deprecated and replaced; it has the following flaws:&lt;br /&gt;
** Its result should be an [[Env]], not a [[ConstMap]], so as to avoid using any ampersands&lt;br /&gt;
** It uses the innermost enclosing object expression, so its presence means that introducing a function has possibly surprising effects; instead, it should take a parameter being the name of the object (i.e. &amp;lt;code&amp;gt;def foo() { meta.getEnv(foo) }&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== E design work ===&lt;br /&gt;
&lt;br /&gt;
* Idea: Every directory serves as a root (that is, has the facilities of [[file__uriGetter|&amp;lt;file&amp;gt;]] like optUnget). This allows chrooting and allows updoc tests to be given virtual roots that aren't different in implementation from the real root.(2010-02-27)&lt;br /&gt;
** File pathname getting is tamed away, use &amp;amp;lt;myRoot&amp;gt;.optUnget instead. The REPL's printFunc's textWriter has authority to show paths.&lt;br /&gt;
* Post as unresolved design issue whether to use E-on-CL's isQuoting and printSame methods in standard E. (2010-02-27)&lt;br /&gt;
* [[ConstList]] should have an operation analogous to [[FlexList#replace/5]].&lt;br /&gt;
&lt;br /&gt;
=== Meta ===&lt;br /&gt;
&lt;br /&gt;
* Post the contents of my 'To be discussed with MarkM' file on the wiki. (2010-02-27)&lt;/div&gt;</description>
			<pubDate>Thu, 10 May 2012 22:43:18 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/User_talk:Kevin_Reid</comments>		</item>
		<item>
			<title>MediaWiki:Pagetitle</title>
			<link>http://ds7.deltamobile.com/wiki/MediaWiki:Pagetitle</link>
			<guid>http://ds7.deltamobile.com/wiki/MediaWiki:Pagetitle</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;&amp;quot;Erights&amp;quot; is wrong capitalization and too broad: change to &amp;quot;ERights.org Wiki&amp;quot; and use emdash&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;$1 — ERights.org Wiki&lt;/div&gt;</description>
			<pubDate>Wed, 18 Apr 2012 12:17:39 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/MediaWiki_talk:Pagetitle</comments>		</item>
		<item>
			<title>E-benchmark</title>
			<link>http://ds7.deltamobile.com/wiki/E-benchmark</link>
			<guid>http://ds7.deltamobile.com/wiki/E-benchmark</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;moved to GitHub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[e-benchmark]] is an E program for benchmarking E implementations. It is very basic and was written by [[User:Kevin Reid|Kevin Reid]].&lt;br /&gt;
&lt;br /&gt;
Repository: https://github.com/kpreid/e-benchmark&lt;br /&gt;
&lt;br /&gt;
==Missing features==&lt;br /&gt;
&lt;br /&gt;
* Benchmarking anything that happens over more than one turn.&lt;br /&gt;
* Saving results in a parseable form to a file.&lt;br /&gt;
** ...and then comparing results from multiple runs.&lt;br /&gt;
* Statistical interpretation of the results.&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;/div&gt;</description>
			<pubDate>Sun, 19 Feb 2012 22:22:26 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:E-benchmark</comments>		</item>
		<item>
			<title>E-on-CL</title>
			<link>http://ds7.deltamobile.com/wiki/E-on-CL</link>
			<guid>http://ds7.deltamobile.com/wiki/E-on-CL</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;moved to GitHub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an implementation of [[E|E programming language]] in Common Lisp.&lt;br /&gt;
&lt;br /&gt;
There are as yet no releases, but the source is available in a Git repository:&lt;br /&gt;
&lt;br /&gt;
: https://github.com/kpreid/e-on-cl&lt;br /&gt;
&lt;br /&gt;
==Status, Description==&lt;br /&gt;
&lt;br /&gt;
The full E language is implemented, by compilation to Common Lisp and execution by the underlying CL implementation. The libraries are incomplete.&lt;br /&gt;
&lt;br /&gt;
E-on-CL requires [[E-on-Java]] for:&lt;br /&gt;
* Support for the E parser (which is written in [http://www.antlr.org/ ANTLR].&lt;br /&gt;
* Parts of the library implementation (those &amp;lt;code&amp;gt;[[emaker]]&amp;lt;/code&amp;gt;s which are not different)&lt;br /&gt;
&lt;br /&gt;
There is Updoc and a REPL, written in CL.&lt;br /&gt;
&lt;br /&gt;
IO is limited to:&lt;br /&gt;
* Writing text to stdout and stderr.&lt;br /&gt;
* Reading and writing files as text from absolute pathnames.&lt;br /&gt;
* TCP sockets, as octets or a small selection of character encodings.&lt;br /&gt;
* Unsafely accessing the underlying Lisp system.&lt;br /&gt;
&lt;br /&gt;
===Differences from E-on-Java===&lt;br /&gt;
&lt;br /&gt;
Support for EIO and &amp;lt;code&amp;gt;DeepFrozen&amp;lt;/code&amp;gt; auditing.&lt;br /&gt;
&lt;br /&gt;
throw() and CatchExpr have been changed to reduce information leakage: see [[sealed throw]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;makeEProxyResolver&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;[[makeProxy]]&amp;lt;/code&amp;gt;, a safer interface.&lt;br /&gt;
&lt;br /&gt;
Updoc does not ignore the return value of expressions when the updoc script omits them.&lt;br /&gt;
&lt;br /&gt;
==News==&lt;br /&gt;
&lt;br /&gt;
For major announcements, watch [http://www.eros-os.org/mailman/listinfo/e-lang the e-lang mailing list]. For individual changes to the repository, [http://cia.navi.cx/stats/project/e-on-cl E-on-CL is monitored on cia.navi.cx] which offers status pages, RSS feeds, and IRC messages.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
*A Common Lisp implementation.&amp;lt;p&amp;gt;E-on-CL is designed to be portable, but requires many nonstandard features for full operation. I use [http://www.sbcl.org/ SBCL], and therefore its support is the most complete. Other implementations E-on-CL includes some support for, roughly in order of completeness, are [http://ccl.clozure.com/ Clozure CL], [http://www.cons.org/cmucl/ CMUCL], [http://www.armedbear.org/abcl.html ABCL], [http://clisp.cons.org/ CLISP], [http://www.lispworks.com/downloads/index.html LispWorks], and [http://www.franz.com/downloads/trial.lhtml Allegro CL].  &amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Whether E-on-CL works on any given implementation (other than SBCL) will vary as I make changes. If it doesn&amp;amp;rsquo;t run on an implementation you&amp;amp;rsquo;d like to use, please let me know and I&amp;amp;rsquo;ll see what can be done about it.&amp;lt;/p&amp;gt;&lt;br /&gt;
* The [http://www.cliki.net/asdf-install asdf-install]able libraries [http://www.cliki.net/bordeaux-threads bordeaux-threads], [http://www.cliki.net/cl-ppcre cl-ppcre], [http://www.cliki.net/cl-yacc cl-yacc], [http://www.cliki.net/cl-fad cl-fad], [http://www.cliki.net/genhash genhash], [http://www.cliki.net/rt rt], and [http://www.cliki.net/trivial-garbage trivial-garbage].&lt;br /&gt;
* An existing [http://www.erights.org/download/ E-on-Java] installation.&lt;br /&gt;
* One of either:&lt;br /&gt;
** the E-on-Java source distribution, placed at &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;$EHOME&amp;lt;/var&amp;gt;/src&amp;lt;/code&amp;gt; ({{XXX|This is an inappropriate location}}), or&lt;br /&gt;
** the [http://www.cliki.net/asdf-install asdf-install]able libraries [http://www.cliki.net/ZIP ZIP] and [http://www.cliki.net/Salza Salza], which will be used to extract &amp;lt;code&amp;gt;.emaker&amp;lt;/code&amp;gt; files from &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;$EHOME&amp;lt;/var&amp;gt;/e.jar&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;perl&amp;lt;/code&amp;gt;, if you wish to use the standard startup script &amp;lt;code&amp;gt;clrune&amp;lt;/code&amp;gt; (equivalent to &amp;lt;code&amp;gt;rune&amp;lt;/code&amp;gt; in [[E-on-Java]].&lt;br /&gt;
&lt;br /&gt;
==Previous discussion / timeline==&lt;br /&gt;
&lt;br /&gt;
Posts from me on the e-lang list containing information about E-on-CL:&lt;br /&gt;
&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2004-December/010199.html 2004-12-11: Initial announcement]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2004-December/010210.html Early technical notes on the compilation method]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2004-December/010208.html Message dispatch and 'native' object definition]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2004-December/010241.html 2004-12-20: Status update]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2005-April/010563.html 2005-04-16: Repository available]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2005-April/010567.html Portability, naming, and usage info]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2005-April/010587.html More of the same]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2005-May/010605.html 2005-05-14: Reply to MarkM's comments on the source]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2005-June/010758.html 2005-06-25: Status update]&lt;br /&gt;
# {{XXX|Fill in more recent info here.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:E implementations]]&lt;/div&gt;</description>
			<pubDate>Sun, 19 Feb 2012 21:12:27 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:E-on-CL</comments>		</item>
		<item>
			<title>E-XML</title>
			<link>http://ds7.deltamobile.com/wiki/E-XML</link>
			<guid>http://ds7.deltamobile.com/wiki/E-XML</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;update repository link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An XML library for E, aiming to be the standard clean way to manipulate XML in E programs. By [[User:Kevin Reid]].&lt;br /&gt;
&lt;br /&gt;
Repository: https://github.com/kpreid/e-xml&lt;br /&gt;
&lt;br /&gt;
== Current state ==&lt;br /&gt;
&lt;br /&gt;
The library provides XML quasiliterals, indexing them by XPath expressions, and coercion of text and attribute values to strings. It does not provide any proper way to read or write an XML document, or construct XML fragments.&lt;br /&gt;
&lt;br /&gt;
Development is currently on hold; the most recent roadblock was constructing an efficient implementation of immutable trees with XPath support.&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
{{XXX|link e-lang archive messages from these dates:&lt;br /&gt;
  Oct 26 2009&lt;br /&gt;
  Jan 12 2010-continuing to Feb 17&lt;br /&gt;
  Mar 10 2010&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Thu, 16 Feb 2012 18:42:36 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:E-XML</comments>		</item>
		<item>
			<title>E-on-JavaScript</title>
			<link>http://ds7.deltamobile.com/wiki/E-on-JavaScript</link>
			<guid>http://ds7.deltamobile.com/wiki/E-on-JavaScript</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;new source location&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;E-on-JavaScript is an E implementation which compiles E to JavaScript code, suitable for running in web browsers.&lt;br /&gt;
&lt;br /&gt;
The source is currently hosted [https://github.com/kpreid/e-on-javascript/ at GitHub]. &lt;br /&gt;
&lt;br /&gt;
It was designed to interoperate with [[Caja]], however it is not compatible with modern Caja so the rest of this paragraph is out of date. If cajita.js is also loaded,  &lt;br /&gt;
E code can call Cajita-tamed objects; also, the output of the compiler  &lt;br /&gt;
should be within the Cajita subset (I have not tested this). However, Cajita code can create objects which violate E [[sameness]] invariants.&lt;br /&gt;
&lt;br /&gt;
It is as yet quite incomplete; especially, the compiler does not  &lt;br /&gt;
implement all of Kernel-E, and generates inefficient and verbose code.&lt;br /&gt;
&lt;br /&gt;
==Demo==&lt;br /&gt;
&lt;br /&gt;
[http://www.slimy.com/~kpreid/eojs/demo/ Out-of-date demo] {{XXX|broken link}}&lt;br /&gt;
&lt;br /&gt;
It supports converting an Updoc document, or a HTML document with embedded Updoc, into a HTML document such  &lt;br /&gt;
that the tests are executed. [http://www.slimy.com/~kpreid/eojs/serve/vm.html A (stale) example].&lt;br /&gt;
&lt;br /&gt;
Not-yet-executed tests have dashed bars to the left, successful tests  &lt;br /&gt;
have light gray bars, and unsuccessful tests have red bars and show  &lt;br /&gt;
the expected and actual values (which are not differentiated except by  &lt;br /&gt;
color; this is to be fixed).&lt;br /&gt;
&lt;br /&gt;
As this particular Updoc example was borrowed from [[E-on-CL]], many of the tests fail  &lt;br /&gt;
because they are specific to E-on-CL in some way. Many other tests  &lt;br /&gt;
fail because in the demonstrated version there was no printing subsystem yet, so everything uses  &lt;br /&gt;
JS .toString() and thus the wrong syntax.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
*[http://www.eros-os.org/pipermail/e-lang/2009-January/012946.html E-on-JavaScript announcement]&lt;br /&gt;
*[http://www.eros-os.org/pipermail/e-lang/2009-March/013070.html Announcement of Updoc conversion improvements]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:E implementations]]&lt;/div&gt;</description>
			<pubDate>Thu, 16 Feb 2012 18:24:18 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:E-on-JavaScript</comments>		</item>
		<item>
			<title>Getting Started</title>
			<link>http://ds7.deltamobile.com/wiki/Getting_Started</link>
			<guid>http://ds7.deltamobile.com/wiki/Getting_Started</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;Reverted edits by Reverse101 (Talk); changed back to last version by Kevin Reid&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains some helpful tips for people who are planning on learning E.&lt;br /&gt;
&lt;br /&gt;
==Where to start==&lt;br /&gt;
&lt;br /&gt;
* You should have basic knowledge of [[wikipedia:Java_(language)|Java]] and its [[wikipedia:Classpath_(Java)|class path system]]. &lt;br /&gt;
* [[Downloads|Download]] and install '''''E'''''&lt;br /&gt;
* Read the [[Walnut]] - it is the most concise text on the '''''E''''' language and library.&lt;br /&gt;
* Bookmark the [http://erights.org/javadoc/index.html ELib api].&lt;br /&gt;
* Either download the '''''E''''' source or open the e.jar (for example with unzip) and take a look around.&lt;br /&gt;
* You can get information about '''''E''''' objects by using the help() method. For example, open rune and enter: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;? help([])&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
You will get information about the ConstList class and its methods.&lt;br /&gt;
*[[Syntax-props-default.txt]] contains information about various language constructs not explained elsewhere at this point.   In the '''''E''''' distribution, it is stored as: &amp;lt;code&amp;gt;org.erights.e.elang.syntax/syntax-props-default.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
* The source also contains a number of [[Walnut/Ordinary_Programming/Emakers|emakers]] that can be used when developing programs. For example:&lt;br /&gt;
**&amp;lt;code&amp;gt;org.erights.e.facet.makeStoneCast.emaker&amp;lt;/code&amp;gt;: An implementation of the [[Walnut/Secure_Distributed_Computing/Capability_Patterns#Facets|Facets]] pattern&lt;br /&gt;
**&amp;lt;code&amp;gt;org.erights.e.facet.makeCaretaker.emaker&amp;lt;/code&amp;gt;: An implementation of the [[Walnut/Secure_Distributed_Computing/Capability_Patterns#Revocable_Capabilities|Revocable Capabilities]] pattern&lt;br /&gt;
**&amp;lt;code&amp;gt;org.erights.e.elib.slot.makeLamportSlot.emaker&amp;lt;/code&amp;gt;: An implementation of the [http://www.erights.org/javadoc/org/erights/e/elib/slot/EverReporter.html EverReporter] pattern/interface&lt;br /&gt;
&lt;br /&gt;
== [[Documentation]] and help==&lt;br /&gt;
* The [[Walnut]]&lt;br /&gt;
* The [http://erights.org/javadoc/index.html ELib api]&lt;br /&gt;
* Documentation on the [http://www.erights.org ERights homepage]. See [[List_of_papers]]&lt;br /&gt;
* The [http://www.eros-os.org/pipermail/e-lang/ '''''E''''' mailing list]. You can search the archives using google by including &amp;quot;site:eros-os.org&amp;quot; in the search field.&lt;/div&gt;</description>
			<pubDate>Tue, 01 Nov 2011 14:57:35 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Getting_Started</comments>		</item>
		<item>
			<title>User:Kevin Reid/ASTPrint.java</title>
			<link>http://ds7.deltamobile.com/wiki/User:Kevin_Reid/ASTPrint.java</link>
			<guid>http://ds7.deltamobile.com/wiki/User:Kevin_Reid/ASTPrint.java</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;repair wikitext=source&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// Minimal Java program attempting to set up an E-on-Java vat and do something in it. Written 2008-10-11. Doesn't work as of 2010-11-22 testing; I don't recall whether I ever finished it. Result is &amp;lt;code&amp;gt;problem: &amp;lt;nowiki&amp;gt;&amp;lt;NoSuchMethodException: &amp;lt;an HeadlessRunnerMgr__Maker&amp;gt;.getTHE_ONE/0&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// [ It probably needs a &amp;lt;code&amp;gt;System.setProperty(&amp;quot;e.safej.bind-var-to-propName&amp;quot;, &amp;quot;true&amp;quot;);&amp;lt;/code&amp;gt; ] — [[User:ThomasLeonard]]&lt;br /&gt;
&lt;br /&gt;
  import org.erights.e.elang.interp.ScopeSetup;&lt;br /&gt;
  import org.erights.e.elib.tables.Twine;&lt;br /&gt;
  import org.erights.e.elib.prim.E;&lt;br /&gt;
  import org.erights.e.elang.syntax.EParser;&lt;br /&gt;
  import org.erights.e.elang.evm.ENode;&lt;br /&gt;
  import org.erights.e.elib.serial.Loader;&lt;br /&gt;
  import org.erights.e.elib.vat.Vat;&lt;br /&gt;
  &lt;br /&gt;
  class ASTPrint {&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
      try {&lt;br /&gt;
        Vat vat = Vat.make(&amp;quot;headless&amp;quot;, &amp;quot;start&amp;quot;);&lt;br /&gt;
        Throwable optNoStart = vat.enqueue(new Runnable() {&lt;br /&gt;
          public void run() {&lt;br /&gt;
            ENode node = EParser.run(Twine.fromString(&amp;quot;aardvarks&amp;quot;));&lt;br /&gt;
            System.out.print(node);&lt;br /&gt;
            Loader i = (Loader)(ScopeSetup.safeScope(&amp;quot;__main$&amp;quot;).get(&amp;quot;import__uriGetter&amp;quot;));&lt;br /&gt;
            Object converter = E.call(i.get(&amp;quot;org.erights.e.elang.visitors.makeConvertENode2Term&amp;quot;), &amp;quot;run&amp;quot;);&lt;br /&gt;
            System.out.print(E.call(converter, &amp;quot;run&amp;quot;, node));&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
        if (null != optNoStart) {&lt;br /&gt;
          throw optNoStart;&lt;br /&gt;
        }&lt;br /&gt;
      } catch (Throwable e) {&lt;br /&gt;
        System.err.print(E.toString(e));&lt;br /&gt;
        System.err.print(E.call(e, &amp;quot;eStack&amp;quot;));&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;/div&gt;</description>
			<pubDate>Mon, 03 Oct 2011 11:36:09 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/User_talk:Kevin_Reid/ASTPrint.java</comments>		</item>
		<item>
			<title>Updoc</title>
			<link>http://ds7.deltamobile.com/wiki/Updoc</link>
			<guid>http://ds7.deltamobile.com/wiki/Updoc</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;/* Running Updoc */ typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Updoc'' is a tool for creating checkable documentation and regression tests.  &lt;br /&gt;
&lt;br /&gt;
Please read more about it here: http://www.erights.org/elang/tools/updoc.html&lt;br /&gt;
&lt;br /&gt;
==[[:Category:E specification|E specification]]==&lt;br /&gt;
&lt;br /&gt;
The E specification contained in this wiki incorporates a test suite written in Updoc.&lt;br /&gt;
&lt;br /&gt;
==Running Updoc==&lt;br /&gt;
&lt;br /&gt;
In [[E-on-Java]], the program &amp;lt;code&amp;gt;scripts/updoc.e&amp;lt;/code&amp;gt; runs Updoc tests. It takes one argument which is an Updoc file or a directory containing them. Updoc may be by itself, embedded in E source, or embedded in HTML.&lt;br /&gt;
&lt;br /&gt;
{{XXX|Explain startup options}}&lt;br /&gt;
&lt;br /&gt;
{{XXX|doc E-on-CL}}&lt;br /&gt;
&lt;br /&gt;
==Updoc syntax and behavior==&lt;br /&gt;
&lt;br /&gt;
{{XXX|write the rest of this}}&lt;br /&gt;
&lt;br /&gt;
An updoc test failure occurs when the actual answers resulting from evaluation  are not equal (except for stack traces) to the expected answers written in the test script.&lt;br /&gt;
&lt;br /&gt;
{{XXX|Note: E-on-Java currently permits the actual &amp;quot;value&amp;quot; answer to be anything if the script does not contain one. We have decided that this behavior is too hazardous (hiding leaks) but it has not yet been fixed.}}&lt;br /&gt;
&lt;br /&gt;
===Parsing===&lt;br /&gt;
&lt;br /&gt;
Exactly like an interactive session, parser pragmas persist from one step to the next.&lt;br /&gt;
&lt;br /&gt;
 ? accum [] for _ in &amp;quot;&amp;quot; { _ + [1] }; null&lt;br /&gt;
 # syntax error: The optional e.enable.accumulator feature (see org/erights/e/elang/syntax/syntax-props-default.txt) is currently off.&lt;br /&gt;
 &lt;br /&gt;
 ? pragma.enable(&amp;quot;accumulator&amp;quot;)&lt;br /&gt;
 ? accum [] for _ in &amp;quot;&amp;quot; { _ + [1] }; null&lt;br /&gt;
 ? pragma.syntax(&amp;quot;0.9&amp;quot;)&lt;br /&gt;
 ? accum [] for _ in &amp;quot;&amp;quot; { _ + [1] }; null&lt;br /&gt;
 # syntax error: The optional e.enable.accumulator feature (see org/erights/e/elang/syntax/syntax-props-default.txt) is currently off.&lt;br /&gt;
&lt;br /&gt;
===Printing===&lt;br /&gt;
&lt;br /&gt;
In the Updoc [[environment]], the text printed via the output objects &amp;lt;code&amp;gt;stdout&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;stderr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;println&amp;lt;/code&amp;gt; is part of the results checked.&lt;br /&gt;
&lt;br /&gt;
Semantics: stdout and stderr write to separate buffers. At the following times in the execution of each step, the contents of each buffer, if nonempty, are moved into answers named &amp;quot;stdout&amp;quot; and &amp;quot;stderr&amp;quot;:&lt;br /&gt;
* after evaluation of the step, but before the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is printed&lt;br /&gt;
* after interp.waitAtTop/blockAtTop pauses and after all turns queued by the step have executed, but before the evaluation of the next step&lt;br /&gt;
&lt;br /&gt;
{{XXX|Review whether this definition matches E-on-CL and E-on-Java}}&lt;br /&gt;
&lt;br /&gt;
Line breaks and buffers:&lt;br /&gt;
&lt;br /&gt;
 ? stdout.print(&amp;quot;a&amp;quot;)&lt;br /&gt;
 # stdout: a&lt;br /&gt;
 &lt;br /&gt;
 ? stdout.print(&amp;quot;a\n&amp;quot;)&lt;br /&gt;
 # stdout: a&lt;br /&gt;
 #         &lt;br /&gt;
 &lt;br /&gt;
 ? stdout.print(&amp;quot;a&amp;quot;); stderr.print(&amp;quot;b&amp;quot;)&lt;br /&gt;
 # stdout: a&lt;br /&gt;
 &lt;br /&gt;
 # stderr: b&lt;br /&gt;
&lt;br /&gt;
Timing:&lt;br /&gt;
&lt;br /&gt;
 ? stdout.print(&amp;quot;a&amp;quot;); stdout &amp;lt;- print(&amp;quot;b&amp;quot;); &amp;quot;c&amp;quot;&lt;br /&gt;
 # stdout: a&lt;br /&gt;
 &lt;br /&gt;
 # value: &amp;quot;c&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # stdout: b&lt;br /&gt;
 &lt;br /&gt;
 ? # This step should have no output.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;println&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ? println(&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;); print(&amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;)&lt;br /&gt;
 # stdout: ab&lt;br /&gt;
 #         cd&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[Category:E specification]]&lt;/div&gt;</description>
			<pubDate>Mon, 26 Sep 2011 14:21:13 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Updoc</comments>		</item>
		<item>
			<title>Updoc</title>
			<link>http://ds7.deltamobile.com/wiki/Updoc</link>
			<guid>http://ds7.deltamobile.com/wiki/Updoc</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;stub section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Updoc'' is a tool for creating checkable documentation and regression tests.  &lt;br /&gt;
&lt;br /&gt;
Please read more about it here: http://www.erights.org/elang/tools/updoc.html&lt;br /&gt;
&lt;br /&gt;
==[[:Category:E specification|E specification]]==&lt;br /&gt;
&lt;br /&gt;
The E specification contained in this wiki incorporates a test suite written in Updoc.&lt;br /&gt;
&lt;br /&gt;
==Running Updoc==&lt;br /&gt;
&lt;br /&gt;
In [[E-on-Java]], the program &amp;lt;code&amp;gt;scripts/updoc.e&amp;lt;/scripts&amp;gt; runs Updoc tests. It takes one argument which is an Updoc file or a directory containing them. Updoc may be by itself, embedded in E source, or embedded in HTML.&lt;br /&gt;
&lt;br /&gt;
{{XXX|Explain startup options}}&lt;br /&gt;
&lt;br /&gt;
{{XXX|doc E-on-CL}}&lt;br /&gt;
&lt;br /&gt;
==Updoc syntax and behavior==&lt;br /&gt;
&lt;br /&gt;
{{XXX|write the rest of this}}&lt;br /&gt;
&lt;br /&gt;
An updoc test failure occurs when the actual answers resulting from evaluation  are not equal (except for stack traces) to the expected answers written in the test script.&lt;br /&gt;
&lt;br /&gt;
{{XXX|Note: E-on-Java currently permits the actual &amp;quot;value&amp;quot; answer to be anything if the script does not contain one. We have decided that this behavior is too hazardous (hiding leaks) but it has not yet been fixed.}}&lt;br /&gt;
&lt;br /&gt;
===Parsing===&lt;br /&gt;
&lt;br /&gt;
Exactly like an interactive session, parser pragmas persist from one step to the next.&lt;br /&gt;
&lt;br /&gt;
 ? accum [] for _ in &amp;quot;&amp;quot; { _ + [1] }; null&lt;br /&gt;
 # syntax error: The optional e.enable.accumulator feature (see org/erights/e/elang/syntax/syntax-props-default.txt) is currently off.&lt;br /&gt;
 &lt;br /&gt;
 ? pragma.enable(&amp;quot;accumulator&amp;quot;)&lt;br /&gt;
 ? accum [] for _ in &amp;quot;&amp;quot; { _ + [1] }; null&lt;br /&gt;
 ? pragma.syntax(&amp;quot;0.9&amp;quot;)&lt;br /&gt;
 ? accum [] for _ in &amp;quot;&amp;quot; { _ + [1] }; null&lt;br /&gt;
 # syntax error: The optional e.enable.accumulator feature (see org/erights/e/elang/syntax/syntax-props-default.txt) is currently off.&lt;br /&gt;
&lt;br /&gt;
===Printing===&lt;br /&gt;
&lt;br /&gt;
In the Updoc [[environment]], the text printed via the output objects &amp;lt;code&amp;gt;stdout&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;stderr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;println&amp;lt;/code&amp;gt; is part of the results checked.&lt;br /&gt;
&lt;br /&gt;
Semantics: stdout and stderr write to separate buffers. At the following times in the execution of each step, the contents of each buffer, if nonempty, are moved into answers named &amp;quot;stdout&amp;quot; and &amp;quot;stderr&amp;quot;:&lt;br /&gt;
* after evaluation of the step, but before the &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is printed&lt;br /&gt;
* after interp.waitAtTop/blockAtTop pauses and after all turns queued by the step have executed, but before the evaluation of the next step&lt;br /&gt;
&lt;br /&gt;
{{XXX|Review whether this definition matches E-on-CL and E-on-Java}}&lt;br /&gt;
&lt;br /&gt;
Line breaks and buffers:&lt;br /&gt;
&lt;br /&gt;
 ? stdout.print(&amp;quot;a&amp;quot;)&lt;br /&gt;
 # stdout: a&lt;br /&gt;
 &lt;br /&gt;
 ? stdout.print(&amp;quot;a\n&amp;quot;)&lt;br /&gt;
 # stdout: a&lt;br /&gt;
 #         &lt;br /&gt;
 &lt;br /&gt;
 ? stdout.print(&amp;quot;a&amp;quot;); stderr.print(&amp;quot;b&amp;quot;)&lt;br /&gt;
 # stdout: a&lt;br /&gt;
 &lt;br /&gt;
 # stderr: b&lt;br /&gt;
&lt;br /&gt;
Timing:&lt;br /&gt;
&lt;br /&gt;
 ? stdout.print(&amp;quot;a&amp;quot;); stdout &amp;lt;- print(&amp;quot;b&amp;quot;); &amp;quot;c&amp;quot;&lt;br /&gt;
 # stdout: a&lt;br /&gt;
 &lt;br /&gt;
 # value: &amp;quot;c&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # stdout: b&lt;br /&gt;
 &lt;br /&gt;
 ? # This step should have no output.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;println&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ? println(&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;); print(&amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;)&lt;br /&gt;
 # stdout: ab&lt;br /&gt;
 #         cd&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[Category:E specification]]&lt;/div&gt;</description>
			<pubDate>Mon, 26 Sep 2011 14:18:38 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Updoc</comments>		</item>
		<item>
			<title>Talk:Future research topics</title>
			<link>http://ds7.deltamobile.com/wiki/Talk:Future_research_topics</link>
			<guid>http://ds7.deltamobile.com/wiki/Talk:Future_research_topics</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;spam? irrelevant anyway&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Wed, 21 Sep 2011 10:12:18 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Future_research_topics</comments>		</item>
		<item>
			<title>Capability</title>
			<link>http://ds7.deltamobile.com/wiki/Capability</link>
			<guid>http://ds7.deltamobile.com/wiki/Capability</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;Add some info on URLs as capabilities&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Definition ==&lt;br /&gt;
&lt;br /&gt;
A ''capability'' is a token that identifies an [[subject, object, operation and permission|object]] and provides its holder with the [[subject, object, operation and permission|permission]] to operate on the object it identifies. Capabilities must either be totally unforgeable or infeasible to forge by being ''sparse''.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
Some examples of unforgeable capabilities:&lt;br /&gt;
* Designations of objects in the [[E language]]. Those who hold these capabilities have the permission to invoke any method supported by the designated object.&lt;br /&gt;
* Designations of functions and procedures in [[Emily]]. Those who hold these capabilities have the permission to call designated functions or procedures.&lt;br /&gt;
* Capabilities held by a process in [[capability operating system]]s.&lt;br /&gt;
* POSIX file descriptors.&lt;br /&gt;
Some examples of sparse capabilities (sometimes called password capabilities):&lt;br /&gt;
* Designations of remote objects in E, such as &amp;lt;code&amp;gt;captp://*orwqphzlugjwqj2wozz7tmg47ime466j@74.125.87.147:55189/oa6vn5whhapylswhzesdlqh5ppmjkcrq.&amp;lt;/code&amp;gt; Those who hold these capabilities have the permission to invoke any method supported by the designated object.&lt;br /&gt;
* Private URLs where having the URL is necessary and sufficient to use the resource. Common examples are:&lt;br /&gt;
** &amp;quot;Confirm your e-mail address&amp;quot; links for website account registrations, mailing list subscriptions or opt-outs, e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://drupal.cbreurope.sk/civicrm/mailing/optout?reset=1&amp;amp;jid=XX&amp;amp;qid=XXXXX&amp;amp;h=XXXXXXXXXXXXXXXX&amp;amp;confirm=1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Shared private documents such as in Google Docs, Google Maps, [http://picasa.google.com Picasa] albums, [http://www.doodle.com Doodle] schedulers.&lt;br /&gt;
* Designation of file-system sub-trees in [[MinorFs]], such as  &amp;lt;code&amp;gt;/mnt/minorfs/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c70e/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An [[Unum]] can be also considered as a capability to a (replicated) object in a similar way as file descriptors of transparently replicated files by RAID are still regarded as file descriptors.&lt;br /&gt;
&lt;br /&gt;
== URLs as capabilities ==&lt;br /&gt;
&lt;br /&gt;
As noted above, URLs are often used as capabilities in practice, especially when sent over e-mail. Some explicitly capability-structured systems, such as [[Tahoe-LAFS]], use capability URLs.&lt;br /&gt;
&lt;br /&gt;
A hazard to using capability URLs directly in a web browser is that many browser extensions or options may transmit URLs to a third-party server. In the worst case, this may make those URLs public. However, there is some mitigation:&lt;br /&gt;
* The fragment part of a URL reference (&amp;lt;code&amp;gt;#&amp;lt;em&amp;gt;id&amp;lt;/em&amp;gt;&amp;lt;/code&amp;gt;) is not transmitted. If the browser supports executing JavaScript, then the capability can be placed in the fragment and transmitted only under script control, not as part of a URL.&lt;br /&gt;
* The query string part (&amp;lt;code&amp;gt;?&amp;lt;em&amp;gt;foo&amp;lt;/em&amp;gt;=&amp;lt;em&amp;gt;bar&amp;lt;/em&amp;gt;&amp;lt;/code&amp;gt;) is often not transmitted. (Citation needed on this one!)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
See [http://www.eros-os.org/essays/capintro.html What is a Capability, Anyway?] for a partisan explanation of what capabilities actually are.&lt;br /&gt;
&lt;br /&gt;
See also [http://www.erights.org/elib/capability/overview.html Overview: Capability Computation]&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;/div&gt;</description>
			<pubDate>Tue, 20 Sep 2011 22:15:41 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Capability</comments>		</item>
		<item>
			<title>Sandbox</title>
			<link>http://ds7.deltamobile.com/wiki/Sandbox</link>
			<guid>http://ds7.deltamobile.com/wiki/Sandbox</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;clear out sandbox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Use this page for test edits of the wiki.&lt;br /&gt;
----&lt;/div&gt;</description>
			<pubDate>Sun, 18 Sep 2011 12:24:36 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Sandbox</comments>		</item>
		<item>
			<title>Capability</title>
			<link>http://ds7.deltamobile.com/wiki/Capability</link>
			<guid>http://ds7.deltamobile.com/wiki/Capability</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;sample URLs shouldn't be buried in actual links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Definition ==&lt;br /&gt;
&lt;br /&gt;
A ''capability'' is a token that identifies an [[subject, object, operation and permission|object]] and provides its holder with the [[subject, object, operation and permission|permission]] to operate on the object it identifies. Capabilities must either be totally unforgeable or infeasible to forge by being ''sparse''.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
Some examples of unforgeable capabilities:&lt;br /&gt;
* Designations of objects in the [[E language]]. Those who hold these capabilities have the permission to invoke any method supported by the designated object.&lt;br /&gt;
* Designations of functions and procedures in [[Emily]]. Those who hold these capabilities have the permission to call designated functions or procedures.&lt;br /&gt;
* Capabilities held by a process in [[capability operating system]]s.&lt;br /&gt;
* POSIX file descriptors.&lt;br /&gt;
Some examples of sparse capabilities (sometimes called password capabilities):&lt;br /&gt;
* Designations of remote objects in E, such as &amp;lt;code&amp;gt;captp://*orwqphzlugjwqj2wozz7tmg47ime466j@74.125.87.147:55189/oa6vn5whhapylswhzesdlqh5ppmjkcrq.&amp;lt;/code&amp;gt; Those who hold these capabilities have the permission to invoke any method supported by the designated object.&lt;br /&gt;
* Private URLs where having the URL is necessary and sufficient to use the resource. Common examples are:&lt;br /&gt;
** &amp;quot;Confirm your e-mail address&amp;quot; links for website account registrations, mailing list subscriptions or opt-outs, e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://drupal.cbreurope.sk/civicrm/mailing/optout?reset=1&amp;amp;jid=XX&amp;amp;qid=XXXXX&amp;amp;h=XXXXXXXXXXXXXXXX&amp;amp;confirm=1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Shared private documents such as in Google Docs, Google Maps, [http://picasa.google.com Picasa] albums, [http://www.doodle.com Doodle] schedulers.&lt;br /&gt;
* Designation of file-system sub-trees in [[MinorFs]], such as  &amp;lt;code&amp;gt;/mnt/minorfs/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c70e/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An [[Unum]] can be also considered as a capability to a (replicated) object in a similar way as file descriptors of transparently replicated files by RAID are still regarded as file descriptors.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
See [http://www.eros-os.org/essays/capintro.html What is a Capability, Anyway?] for a partisan explanation of what capabilities actually are.&lt;br /&gt;
&lt;br /&gt;
See also [http://www.erights.org/elib/capability/overview.html Overview: Capability Computation]&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;/div&gt;</description>
			<pubDate>Fri, 16 Sep 2011 11:52:36 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Capability</comments>		</item>
		<item>
			<title>E-on-CL</title>
			<link>http://ds7.deltamobile.com/wiki/E-on-CL</link>
			<guid>http://ds7.deltamobile.com/wiki/E-on-CL</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;Reverted edits by ShannonPatterson (Talk); changed back to last version by Kevin Reid&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an implementation of [[E|E programming language]] in Common Lisp.&lt;br /&gt;
&lt;br /&gt;
There are as yet no releases, but the source is available in a [http://subversion.tigris.org/ Subversion] repository:&lt;br /&gt;
&lt;br /&gt;
: http://switchb.org/svn/e/cl-e/trunk/&lt;br /&gt;
&lt;br /&gt;
==Status, Description==&lt;br /&gt;
&lt;br /&gt;
The full E language is implemented, by compilation to Common Lisp and execution by the underlying CL implementation. The libraries are incomplete.&lt;br /&gt;
&lt;br /&gt;
E-on-CL requires [[E-on-Java]] for:&lt;br /&gt;
* Support for the E parser (which is written in [http://www.antlr.org/ ANTLR].&lt;br /&gt;
* Parts of the library implementation (those &amp;lt;code&amp;gt;[[emaker]]&amp;lt;/code&amp;gt;s which are not different)&lt;br /&gt;
&lt;br /&gt;
There is Updoc and a REPL, written in CL.&lt;br /&gt;
&lt;br /&gt;
IO is limited to:&lt;br /&gt;
* Writing text to stdout and stderr.&lt;br /&gt;
* Reading and writing files as text from absolute pathnames.&lt;br /&gt;
* TCP sockets, as octets or a small selection of character encodings.&lt;br /&gt;
* Unsafely accessing the underlying Lisp system.&lt;br /&gt;
&lt;br /&gt;
===Differences from E-on-Java===&lt;br /&gt;
&lt;br /&gt;
Support for EIO and &amp;lt;code&amp;gt;DeepFrozen&amp;lt;/code&amp;gt; auditing.&lt;br /&gt;
&lt;br /&gt;
throw() and CatchExpr have been changed to reduce information leakage: see [[sealed throw]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;makeEProxyResolver&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;[[makeProxy]]&amp;lt;/code&amp;gt;, a safer interface.&lt;br /&gt;
&lt;br /&gt;
Updoc does not ignore the return value of expressions when the updoc script omits them.&lt;br /&gt;
&lt;br /&gt;
==News==&lt;br /&gt;
&lt;br /&gt;
For major announcements, watch [http://www.eros-os.org/mailman/listinfo/e-lang the e-lang mailing list]. For individual changes to the repository, [http://cia.navi.cx/stats/project/e-on-cl E-on-CL is monitored on cia.navi.cx] which offers status pages, RSS feeds, and IRC messages.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
*A Common Lisp implementation.&amp;lt;p&amp;gt;E-on-CL is designed to be portable, but requires many nonstandard features for full operation. I use [http://www.sbcl.org/ SBCL], and therefore its support is the most complete. Other implementations E-on-CL includes some support for, roughly in order of completeness, are [http://ccl.clozure.com/ Clozure CL], [http://www.cons.org/cmucl/ CMUCL], [http://www.armedbear.org/abcl.html ABCL], [http://clisp.cons.org/ CLISP], [http://www.lispworks.com/downloads/index.html LispWorks], and [http://www.franz.com/downloads/trial.lhtml Allegro CL].  &amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Whether E-on-CL works on any given implementation (other than SBCL) will vary as I make changes. If it doesn&amp;amp;rsquo;t run on an implementation you&amp;amp;rsquo;d like to use, please let me know and I&amp;amp;rsquo;ll see what can be done about it.&amp;lt;/p&amp;gt;&lt;br /&gt;
* The [http://www.cliki.net/asdf-install asdf-install]able libraries [http://www.cliki.net/bordeaux-threads bordeaux-threads], [http://www.cliki.net/cl-ppcre cl-ppcre], [http://www.cliki.net/cl-yacc cl-yacc], [http://www.cliki.net/cl-fad cl-fad], [http://www.cliki.net/genhash genhash], [http://www.cliki.net/rt rt], and [http://www.cliki.net/trivial-garbage trivial-garbage].&lt;br /&gt;
* An existing [http://www.erights.org/download/ E-on-Java] installation.&lt;br /&gt;
* One of either:&lt;br /&gt;
** the E-on-Java source distribution, placed at &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;$EHOME&amp;lt;/var&amp;gt;/src&amp;lt;/code&amp;gt; ({{XXX|This is an inappropriate location}}), or&lt;br /&gt;
** the [http://www.cliki.net/asdf-install asdf-install]able libraries [http://www.cliki.net/ZIP ZIP] and [http://www.cliki.net/Salza Salza], which will be used to extract &amp;lt;code&amp;gt;.emaker&amp;lt;/code&amp;gt; files from &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;$EHOME&amp;lt;/var&amp;gt;/e.jar&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;perl&amp;lt;/code&amp;gt;, if you wish to use the standard startup script &amp;lt;code&amp;gt;clrune&amp;lt;/code&amp;gt; (equivalent to &amp;lt;code&amp;gt;rune&amp;lt;/code&amp;gt; in [[E-on-Java]].&lt;br /&gt;
&lt;br /&gt;
==Previous discussion / timeline==&lt;br /&gt;
&lt;br /&gt;
Posts from me on the e-lang list containing information about E-on-CL:&lt;br /&gt;
&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2004-December/010199.html 2004-12-11: Initial announcement]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2004-December/010210.html Early technical notes on the compilation method]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2004-December/010208.html Message dispatch and 'native' object definition]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2004-December/010241.html 2004-12-20: Status update]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2005-April/010563.html 2005-04-16: Repository available]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2005-April/010567.html Portability, naming, and usage info]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2005-April/010587.html More of the same]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2005-May/010605.html 2005-05-14: Reply to MarkM's comments on the source]&lt;br /&gt;
# [http://www.eros-os.org/pipermail/e-lang/2005-June/010758.html 2005-06-25: Status update]&lt;br /&gt;
# {{XXX|Fill in more recent info here.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:E implementations]]&lt;/div&gt;</description>
			<pubDate>Tue, 30 Aug 2011 20:05:19 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:E-on-CL</comments>		</item>
		<item>
			<title>Env</title>
			<link>http://ds7.deltamobile.com/wiki/Env</link>
			<guid>http://ds7.deltamobile.com/wiki/Env</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;expand&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Env: what [[Scope]] objects ought to be renamed to.&lt;br /&gt;
&lt;br /&gt;
The error is long-standing in E's design, but [[User:Markm]] did not not want to use the technically correct “environment” since it was rather lengthy to write in code. [[User:Kevin Reid]] advocates using “Env”, this being both correct and short.&lt;br /&gt;
&lt;br /&gt;
{{XXX|Expand this with actually explaining the protocol of Env objects. Also see Thomas Leonard's proposal that Scope objects in [[E-on-Java]] remain what they are for implementation efficiency while Envs have the nice user-facing and [[GBA]]-providing protocol.}}&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;/div&gt;</description>
			<pubDate>Sat, 27 Aug 2011 00:22:02 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Env</comments>		</item>
		<item>
			<title>Env</title>
			<link>http://ds7.deltamobile.com/wiki/Env</link>
			<guid>http://ds7.deltamobile.com/wiki/Env</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;Environment moved to Env: New short name preferred by MarkM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Environment: what [[Scope]] objects ought to be renamed to.&lt;/div&gt;</description>
			<pubDate>Sat, 27 Aug 2011 00:18:49 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Env</comments>		</item>
		<item>
			<title>Environment</title>
			<link>http://ds7.deltamobile.com/wiki/Environment</link>
			<guid>http://ds7.deltamobile.com/wiki/Environment</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;Environment moved to Env: New short name preferred by MarkM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Env]]&lt;/div&gt;</description>
			<pubDate>Sat, 27 Aug 2011 00:18:49 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Environment</comments>		</item>
		<item>
			<title>Signature</title>
			<link>http://ds7.deltamobile.com/wiki/Signature</link>
			<guid>http://ds7.deltamobile.com/wiki/Signature</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;finish subst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A [[Signature]] describes the protocol of another object.&lt;br /&gt;
&lt;br /&gt;
This type is proposed to replace [[TypeDesc]], [[MessageDesc]], and [[ParamDesc]]; the motivation for doing so is that while TypeDesc allows for message parameters' [[guard]]s to be presented, it is difficult to define the means for doing so as a [[miranda method]]; Signature is defined so as to simplify this. Furthermore, it is arguably &amp;quot;fewer moving parts&amp;quot; in that rather than having the TD/MD/PD structure imitating a subset of what Kernel-E can express, we use Kernel-E directly.&lt;br /&gt;
&lt;br /&gt;
(REVIEW: Should we adopt Signature in place of TypeDesc?)&lt;br /&gt;
&lt;br /&gt;
(REVIEW: What should the expansion of the nonkernel &amp;quot;interface&amp;quot; expression be, given that we eliminate MessageDesc and ParamDesc which it uses? -- MarkM suggests expanding to an ObjectExpr which is asked for its alleged type, and then twiddling it further.)&lt;br /&gt;
&lt;br /&gt;
(XXX Define the [[Miranda __getAllegedType/0]] behavior under this system precisely.)&lt;br /&gt;
&lt;br /&gt;
(XXX [[User:Kevin Reid]] needs to review the experimental code and add other design decision questions to this page.)&lt;br /&gt;
&lt;br /&gt;
== State ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;objectExpr&amp;lt;/code&amp;gt; :[[ObjectExpr]]&lt;br /&gt;
* &amp;lt;code&amp;gt;env&amp;lt;/code&amp;gt; :[[Env]]&lt;br /&gt;
* &amp;lt;code&amp;gt;supers&amp;lt;/code&amp;gt; :[[List]]&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[Signature]]]&lt;br /&gt;
* &amp;lt;code&amp;gt;mirandaSignature&amp;lt;/code&amp;gt; :[[Signature]]&lt;br /&gt;
&lt;br /&gt;
The most important fields of a signature are the ''object expr'' and ''env''.&lt;br /&gt;
&lt;br /&gt;
The object expr is the expression of the object which this is the signature of (or the closest approximation, if the object is not written in E), except redacted: the method and matcher bodies have been replaced with UnspecifiedExpr, a new [[EExpr]] introduced for this purpose, and the auditors (&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt; (if under [[Guard-based auditing|GBA]]) and &amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt; clauses) have been eliminated.&lt;br /&gt;
&lt;br /&gt;
The environment field contains an [[Env]] with bindings for every free noun in the redacted version of the object expr. (These will mostly be guards.)&lt;br /&gt;
&lt;br /&gt;
(REVIEW: This proposal therefore exposes every object mentioned in a parameter list. Is this too hazardous? (MarkM feels that the simple rule of &amp;quot;everything between the braces is public&amp;quot; (i.e. from the { of the object to the { of a method) helps.) Are there practical ways to reduce the potential harm from mentioning authority-bearing objects? ([[User:Kevin Reid]],[[User:Markm]],[[User:dtribble]] have discussed this 2008-08-14 and decided that nothing need be done.))&lt;br /&gt;
&lt;br /&gt;
The supers field lists additional signatures of protocols which this object also implements, such as by &amp;lt;code&amp;gt;[[extends]]&amp;lt;/code&amp;gt;, or explicit protocols, or multiple inheritance in objects implemented in languages providing such. The significance of the ordering of the list is left to the generator of the signature.&lt;br /&gt;
&lt;br /&gt;
The miranda signature field holds a signature containing the miranda protocol in use by the E implementation hosting the object whose signature this is. This is the means provided for E programs to see the miranda protocol, and it replaces TypeDesc's approach of including the miranda MessageDescs in every __getAllegedType TypeDesc. It also might be used to detect un-translated mismatches between E system versions.&lt;br /&gt;
&lt;br /&gt;
(NOTE: A planned extension is to allow type-parameterized protocols. This will be done by allowing nouns not bound in the env, but bound by a parameter list instead. Such a signature responds to get/N returning a concrete protocol.)&lt;br /&gt;
&lt;br /&gt;
== Maker protocol ==&lt;br /&gt;
&lt;br /&gt;
(XXX there is no way to specify the mirandaSignature.)&lt;br /&gt;
&lt;br /&gt;
=== asType/0 ===&lt;br /&gt;
{{asType|Signature}}&lt;br /&gt;
&lt;br /&gt;
{{maker msgdoc|run|2|objectExpr :[[ObjectExpr]], env :[[Env]]|[[Signature]]}}&lt;br /&gt;
&lt;br /&gt;
As run/3 but with the supers field being &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{maker msgdoc|run|3|objectExpr :[[ObjectExpr]], env :[[Env]], supers :[[List]]&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[Signature]]]|[[Signature]]}}&lt;br /&gt;
&lt;br /&gt;
{{unspecified message}}&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|getObjectExpr|0||[[ObjectExpr]]}}&lt;br /&gt;
&lt;br /&gt;
Accessor; see state description.&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|getEnv|0||[[Env]]}}&lt;br /&gt;
&lt;br /&gt;
Accessor; see state description.&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|getMirandaSignature|0||[[Signature]]}}&lt;br /&gt;
&lt;br /&gt;
Accessor; see state description.&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|getSupers|0||[[List]]&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[Signature]]]}}&lt;br /&gt;
&lt;br /&gt;
Accessor; see state description.&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|getFQName|0||[[String]]}}&lt;br /&gt;
&lt;br /&gt;
Returns the [[fully-qualified name]] constructed from the environment's FQN prefix and the object expr's pattern.&lt;br /&gt;
&lt;br /&gt;
(XXX Define the method of construction.)&lt;br /&gt;
&lt;br /&gt;
[[Category:ELib specification]]&lt;br /&gt;
[[Category:Unresolved design issues]]&lt;/div&gt;</description>
			<pubDate>Sat, 27 Aug 2011 00:18:32 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Signature</comments>		</item>
		<item>
			<title>Signature</title>
			<link>http://ds7.deltamobile.com/wiki/Signature</link>
			<guid>http://ds7.deltamobile.com/wiki/Signature</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;/* State */ s/Scope/Env/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A [[Signature]] describes the protocol of another object.&lt;br /&gt;
&lt;br /&gt;
This type is proposed to replace [[TypeDesc]], [[MessageDesc]], and [[ParamDesc]]; the motivation for doing so is that while TypeDesc allows for message parameters' [[guard]]s to be presented, it is difficult to define the means for doing so as a [[miranda method]]; Signature is defined so as to simplify this. Furthermore, it is arguably &amp;quot;fewer moving parts&amp;quot; in that rather than having the TD/MD/PD structure imitating a subset of what Kernel-E can express, we use Kernel-E directly.&lt;br /&gt;
&lt;br /&gt;
(REVIEW: Should we adopt Signature in place of TypeDesc?)&lt;br /&gt;
&lt;br /&gt;
(REVIEW: What should the expansion of the nonkernel &amp;quot;interface&amp;quot; expression be, given that we eliminate MessageDesc and ParamDesc which it uses? -- MarkM suggests expanding to an ObjectExpr which is asked for its alleged type, and then twiddling it further.)&lt;br /&gt;
&lt;br /&gt;
(XXX Define the [[Miranda __getAllegedType/0]] behavior under this system precisely.)&lt;br /&gt;
&lt;br /&gt;
(XXX [[User:Kevin Reid]] needs to review the experimental code and add other design decision questions to this page.)&lt;br /&gt;
&lt;br /&gt;
== State ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;objectExpr&amp;lt;/code&amp;gt; :[[ObjectExpr]]&lt;br /&gt;
* &amp;lt;code&amp;gt;env&amp;lt;/code&amp;gt; :[[Env]]&lt;br /&gt;
* &amp;lt;code&amp;gt;supers&amp;lt;/code&amp;gt; :[[List]]&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[Signature]]]&lt;br /&gt;
* &amp;lt;code&amp;gt;mirandaSignature&amp;lt;/code&amp;gt; :[[Signature]]&lt;br /&gt;
&lt;br /&gt;
The most important fields of a signature are the ''object expr'' and ''env''.&lt;br /&gt;
&lt;br /&gt;
The object expr is the expression of the object which this is the signature of (or the closest approximation, if the object is not written in E), except redacted: the method and matcher bodies have been replaced with UnspecifiedExpr, a new [[EExpr]] introduced for this purpose, and the auditors (&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt; (if under [[Guard-based auditing|GBA]]) and &amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt; clauses) have been eliminated.&lt;br /&gt;
&lt;br /&gt;
The environment field contains an [[Env]] with bindings for every free noun in the redacted version of the object expr. (These will mostly be guards.)&lt;br /&gt;
&lt;br /&gt;
(REVIEW: This proposal therefore exposes every object mentioned in a parameter list. Is this too hazardous? (MarkM feels that the simple rule of &amp;quot;everything between the braces is public&amp;quot; (i.e. from the { of the object to the { of a method) helps.) Are there practical ways to reduce the potential harm from mentioning authority-bearing objects? ([[User:Kevin Reid]],[[User:Markm]],[[User:dtribble]] have discussed this 2008-08-14 and decided that nothing need be done.))&lt;br /&gt;
&lt;br /&gt;
The supers field lists additional signatures of protocols which this object also implements, such as by &amp;lt;code&amp;gt;[[extends]]&amp;lt;/code&amp;gt;, or explicit protocols, or multiple inheritance in objects implemented in languages providing such. The significance of the ordering of the list is left to the generator of the signature.&lt;br /&gt;
&lt;br /&gt;
The miranda signature field holds a signature containing the miranda protocol in use by the E implementation hosting the object whose signature this is. This is the means provided for E programs to see the miranda protocol, and it replaces TypeDesc's approach of including the miranda MessageDescs in every __getAllegedType TypeDesc. It also might be used to detect un-translated mismatches between E system versions.&lt;br /&gt;
&lt;br /&gt;
(NOTE: A planned extension is to allow type-parameterized protocols. This will be done by allowing nouns not bound in the env, but bound by a parameter list instead. Such a signature responds to get/N returning a concrete protocol.)&lt;br /&gt;
&lt;br /&gt;
== Maker protocol ==&lt;br /&gt;
&lt;br /&gt;
(XXX there is no way to specify the mirandaSignature.)&lt;br /&gt;
&lt;br /&gt;
=== asType/0 ===&lt;br /&gt;
{{asType|Signature}}&lt;br /&gt;
&lt;br /&gt;
{{maker msgdoc|run|2|objectExpr :[[ObjectExpr]], env :[[Scope]]|[[Signature]]}}&lt;br /&gt;
&lt;br /&gt;
As run/3 but with the supers field being &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{maker msgdoc|run|3|objectExpr :[[ObjectExpr]], env :[[Scope]], supers :[[List]]&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[Signature]]]|[[Signature]]}}&lt;br /&gt;
&lt;br /&gt;
{{unspecified message}}&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|getObjectExpr|0||[[ObjectExpr]]}}&lt;br /&gt;
&lt;br /&gt;
Accessor; see state description.&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|getEnv|0||[[Scope]]}}&lt;br /&gt;
&lt;br /&gt;
Accessor; see state description.&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|getMirandaSignature|0||[[Signature]]}}&lt;br /&gt;
&lt;br /&gt;
Accessor; see state description.&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|getSupers|0||[[List]]&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[Signature]]]}}&lt;br /&gt;
&lt;br /&gt;
Accessor; see state description.&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|getFQName|0||[[String]]}}&lt;br /&gt;
&lt;br /&gt;
Returns the [[fully-qualified name]] constructed from the environment's FQN prefix and the object expr's pattern.&lt;br /&gt;
&lt;br /&gt;
(XXX Define the method of construction.)&lt;br /&gt;
&lt;br /&gt;
[[Category:ELib specification]]&lt;br /&gt;
[[Category:Unresolved design issues]]&lt;/div&gt;</description>
			<pubDate>Sat, 27 Aug 2011 00:17:34 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Signature</comments>		</item>
		<item>
			<title>Verb</title>
			<link>http://ds7.deltamobile.com/wiki/Verb</link>
			<guid>http://ds7.deltamobile.com/wiki/Verb</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;see also Noun; formally define as being String&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A verb is a string.&lt;br /&gt;
&lt;br /&gt;
The verb is one of the parts of a message or a method signature; in other languages it might be called the &amp;quot;method name&amp;quot; or &amp;quot;selector&amp;quot;. Ordinary E objects dispatch to methods based on the combination of the verb and the ''arity'', the number of arguments; this combination is conventionally written “&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt;/&amp;lt;var&amp;gt;arity&amp;lt;/var&amp;gt;” (e.g. “add/1”) and when used in a program is known as a ''mangled verb'' or ''mverb''.&lt;br /&gt;
&lt;br /&gt;
 def Verb := String&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Object E#call/3|E#call/3]]&lt;br /&gt;
* [[Miranda respondsTo]]&lt;br /&gt;
* [[Miranda getAllegedType]]&lt;br /&gt;
* [[Noun]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ELib specification]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 03:54:33 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Verb</comments>		</item>
		<item>
			<title>Mangled verb</title>
			<link>http://ds7.deltamobile.com/wiki/Mangled_verb</link>
			<guid>http://ds7.deltamobile.com/wiki/Mangled_verb</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;Redirecting to Verb&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Verb]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 03:53:04 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Mangled_verb</comments>		</item>
		<item>
			<title>Miranda order</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_order</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_order</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;let's have an explicit verb type&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{instance msgdoc|__order|2|&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt; :[[Verb]], &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt; :[[List]]|[[any]]}}&lt;br /&gt;
&lt;br /&gt;
'''__order/2''' is a [[Miranda message]] for sending messages contingent on an earlier success.&lt;br /&gt;
&lt;br /&gt;
This method does the equivalent of&lt;br /&gt;
&lt;br /&gt;
    to __order(verb, args) :any {&lt;br /&gt;
        [E.call(self, verb, args), self]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In other words, it calls the receiving object with the message&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt;(&amp;lt;var&amp;gt;args...&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;, and, if successful, returns a pair&lt;br /&gt;
of the result of this call and the receiving object itself.&lt;br /&gt;
&lt;br /&gt;
What is this for?  Consider the client code fragment&lt;br /&gt;
&lt;br /&gt;
     databaseRcvr &amp;lt;- put(key1, value1)&lt;br /&gt;
     def value2Vow := databaseRcvr &amp;lt;- get(key2)&lt;br /&gt;
E's [http://www.erights.org/elib/concurrency/partial-order.html partial ordering semantics]&lt;br /&gt;
ensure that put will be delivered before&lt;br /&gt;
get is delivered. That is often good enough. But it is a weaker&lt;br /&gt;
guarantee than that provided by the following sequential code&lt;br /&gt;
&lt;br /&gt;
     database put(key1, value1)&lt;br /&gt;
     def value2Vow := database get(key2)&lt;br /&gt;
&lt;br /&gt;
In this code, not only will get only happen after put is delivered, get&lt;br /&gt;
will only happen after put ''succeeds''. If put instead throws an&lt;br /&gt;
exception, the get will never happen. Often we want this effect. How can&lt;br /&gt;
we achieve this with eventual-sends to eventual references?&lt;br /&gt;
&lt;br /&gt;
When one wants to take an action contingent on the results of a previous&lt;br /&gt;
action, the conventional E answer is to use a when-catch-finally&lt;br /&gt;
expression&lt;br /&gt;
&lt;br /&gt;
    def ackVow := databaseRcvr &amp;lt;- put(key1, value1)&lt;br /&gt;
    def value2Vow := when (ackVow) -&amp;gt; {&lt;br /&gt;
        databaseRcvr &amp;lt;- get(key2)&lt;br /&gt;
    } catch problem {&lt;br /&gt;
        throw(problem)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This is fine, as is probably the solution to be used by default for this&lt;br /&gt;
situation. However, it does force a round-trip between the get and put,&lt;br /&gt;
and so loses the benefits of pipelining. Using the __order message, we&lt;br /&gt;
can get contingent execution + pipelining, at some cost in obscurity.&lt;br /&gt;
(Note: often, the cost of obscurity will dominate.)&lt;br /&gt;
&lt;br /&gt;
    def pairVow := databaseRcvr &amp;lt;- __order(&amp;quot;put&amp;quot;, [key1, value1])&lt;br /&gt;
    # If put's return value were interesting, we'd 'pairVow &amp;lt;- get(0)'&lt;br /&gt;
    def newDBRcvr := pairVow &amp;lt;- get(1)&lt;br /&gt;
    def value2Vow := newDBRcvr &amp;lt;- get(key2)&lt;br /&gt;
&lt;br /&gt;
If put throws, then &amp;lt;var&amp;gt;pairVow&amp;lt;/var&amp;gt; will resolve directly to broken, so newDB&lt;br /&gt;
will likewise resolve to broken, as will &amp;lt;var&amp;gt;value2Vow&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Distinguishing unresolved response from unresolved value===&lt;br /&gt;
&lt;br /&gt;
It is also possible to use __order to observe when the turn caused by an eventual send finishes, even if its return value is itself an unresolved promise, by waiting for the returned tuple, or its second element, to resolve.&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;br /&gt;
[[Category:Pluribus]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 03:52:42 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_order</comments>		</item>
		<item>
			<title>Miranda protocol</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_protocol</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_protocol</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;let's have an explicit verb type&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Every normal object responds to these '''miranda messages'''; [[miranda methods]] are provided for them.&lt;br /&gt;
&lt;br /&gt;
* [[Miranda conformTo|__conformTo]](&amp;lt;var&amp;gt;guard&amp;lt;/var&amp;gt; :[[Guard]]) :[[any]]&lt;br /&gt;
* [[Miranda getAllegedType|__getAllegedType]]() :[[TypeDesc]]&lt;br /&gt;
* [[Miranda getPropertySlot|__getPropertySlot]](&amp;lt;var&amp;gt;property&amp;lt;/var&amp;gt; :[[String]]) :Slot&lt;br /&gt;
* [[Miranda optSealedDispatch|__optSealedDispatch]](&amp;lt;var&amp;gt;brand&amp;lt;/var&amp;gt; :[[any]]) :[[any]]&lt;br /&gt;
* [[Miranda optUncall|__optUncall]]() :[[Portrayal]]&lt;br /&gt;
* [[Miranda order|__order]](&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt; :[[Verb]], &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt; :[[List]]) :[[Tuple]]&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;any, any&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Miranda printOn|__printOn]](&amp;lt;var&amp;gt;out&amp;lt;/var&amp;gt; :[[TextWriter]]) :[[void]]&lt;br /&gt;
* [[Miranda reactToLostClient|__reactToLostClient]](&amp;lt;var&amp;gt;problem&amp;lt;/var&amp;gt;) :[[void]]&lt;br /&gt;
* [[Miranda respondsTo|__respondsTo]](&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt; :[[Verb]], &amp;lt;var&amp;gt;arity&amp;lt;/var&amp;gt; :[[int]]) :[[Boolean]]&lt;br /&gt;
* [[Miranda whenBroken|__whenBroken]](&amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt;) :[[void]]&lt;br /&gt;
* [[Miranda whenMoreResolved|__whenMoreResolved]](&amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt;) :[[void]]&lt;br /&gt;
&lt;br /&gt;
== Constraints on revision of this protocol ==&lt;br /&gt;
&lt;br /&gt;
No version of the Miranda protocol shall introduce a Miranda message which has the same verb but different arity as another Miranda message. '''Rationale:''' This ensures that if a plumbing object forwards messages, adding leading/trailing arguments, it will not invoke a Miranda method of the forwarding target.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.erights.org/javadoc/org/erights/e/elib/prim/MirandaMethods.html MirandaMethods class] in [[E-on-Java]]&lt;br /&gt;
* [http://www.erights.org/elib/distrib/captp/index.html CapTP protocol documentation], section “Helper Messages”&lt;br /&gt;
&lt;br /&gt;
[[Category:ELib specification]]&lt;br /&gt;
[[Category:Protocols]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 03:52:25 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_protocol</comments>		</item>
		<item>
			<title>Verb</title>
			<link>http://ds7.deltamobile.com/wiki/Verb</link>
			<guid>http://ds7.deltamobile.com/wiki/Verb</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A verb is a string.&lt;br /&gt;
&lt;br /&gt;
A verb is one of the parts of a message or a method signature; in other languages it might be called the &amp;quot;method name&amp;quot; or &amp;quot;selector&amp;quot;. Ordinary E objects dispatch to methods based on the combination of the verb and the ''arity'', the number of arguments; this combination is conventionally written “&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt;/&amp;lt;var&amp;gt;arity&amp;lt;/var&amp;gt;” (e.g. “add/1”) and when used in a program is known as a ''mangled verb'' or ''mverb''.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Object E#call/3|E#call/3]]&lt;br /&gt;
* [[Miranda respondsTo]]&lt;br /&gt;
* [[Miranda getAllegedType]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ELib specification]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 03:51:29 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Verb</comments>		</item>
		<item>
			<title>Miranda respondsTo</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_respondsTo</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_respondsTo</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__respondsTo/2''' is a [[Miranda message]] for asking whether an object understands a message.&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__respondsTo|2|&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt; :[[Verb]], &amp;lt;var&amp;gt;arity&amp;lt;/var&amp;gt; :([[int]] &amp;amp;gt; 0)|[[boolean]]}}&lt;br /&gt;
&lt;br /&gt;
Returns a boolean indicating whether this object responds to messages with the verb &amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt; and arity (number of arguments) &amp;lt;var&amp;gt;arity&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The Miranda method for E-language objects is:&lt;br /&gt;
# If this object has a method with the given verb and arity, return true.&lt;br /&gt;
# If there is a [[Miranda method]] with the given verb and arity, return true.&lt;br /&gt;
# If the object has a [[matcher]], return the result of invoking the matcher with the __respondsTo message. If the matcher does not match, return false.&lt;br /&gt;
# Return false.&lt;br /&gt;
{{XXX|confirm this is an accurate description of current behavior.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 03:46:38 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_respondsTo</comments>		</item>
		<item>
			<title>Miranda conformTo</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_conformTo</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_conformTo</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;add javadoc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__conformTo/1''' is a [[Miranda message]].&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__conformTo|1|&amp;lt;var&amp;gt;guard&amp;lt;/var&amp;gt; :[[Guard]]|[[any]]}}&lt;br /&gt;
&lt;br /&gt;
====Clients====&lt;br /&gt;
&lt;br /&gt;
A guard which does not immediately accept the recipient may call &amp;lt;code&amp;gt;__conformTo&amp;lt;/code&amp;gt;(the guard) on it, and check and return the result thereof instead.&lt;br /&gt;
&lt;br /&gt;
====Implementations====&lt;br /&gt;
&lt;br /&gt;
Implementations of &amp;lt;code&amp;gt;__conformTo/1&amp;lt;/code&amp;gt; should return the recipient if they have no better answer.&lt;br /&gt;
&lt;br /&gt;
====Miranda behavior====&lt;br /&gt;
&lt;br /&gt;
Returns the recipient.&lt;br /&gt;
&lt;br /&gt;
 ? def obj {}&lt;br /&gt;
 &amp;gt; obj.__conformTo(any)&lt;br /&gt;
 # value: &amp;lt;obj&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? obj.__conformTo(List)&lt;br /&gt;
 # value: &amp;lt;obj&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? obj.__conformTo(def bobj {})&lt;br /&gt;
 # value: &amp;lt;obj&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? obj.__conformTo(null)&lt;br /&gt;
 # value: &amp;lt;obj&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Original Javadoc==&lt;br /&gt;
&lt;br /&gt;
{{XXX|merge}}&lt;br /&gt;
&lt;br /&gt;
When a guard doesn't succeed by itself at coercing an object, the guard&lt;br /&gt;
may enlists the object's aid in bring about a coercion it would find&lt;br /&gt;
acceptable.&lt;br /&gt;
&lt;br /&gt;
A guard enlists the object's aid at the price of being &lt;br /&gt;
[http://www.sims.berkeley.edu/~ping/auditors/ Gozarian]. A&lt;br /&gt;
Gozarian guard wants to enlists the object's aid &amp;lt;i&amp;gt;because&amp;lt;/i&amp;gt; it is&lt;br /&gt;
ignorant of the kind of object it's dealing with, so a generic protocol&lt;br /&gt;
is needed. That's why __conformTo/1 is provided as a MirandaMethod.&lt;br /&gt;
&lt;br /&gt;
The guard asks the object to conform to some guard that the object may&lt;br /&gt;
know about. Often this will be the guard that's attempting the coercion.&lt;br /&gt;
An object should attempt to return a representation of itself that the&lt;br /&gt;
argument guard would succeed in coercing. A requesting guard should then&lt;br /&gt;
try again on the result, but if this doesn't coerce, it should fail&lt;br /&gt;
there rather than making further __conformTo/1 requests. This implies&lt;br /&gt;
that it's the responsibility of the object's __conformTo/1&lt;br /&gt;
implementation to do any iteration needed for multi-step conversions.&lt;br /&gt;
&lt;br /&gt;
The default (Miranda) implementation of __conformTo/1 just returns&lt;br /&gt;
self.&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 03:39:04 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_conformTo</comments>		</item>
		<item>
			<title>Miranda printOn</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_printOn</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_printOn</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__printOn/1''' is a [[Miranda message]] which constitutes E's protocol for turning objects into strings.&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__printOn|1|&amp;lt;var&amp;gt;out&amp;lt;/var&amp;gt; :[[TextWriter]]|[[void]]}}&lt;br /&gt;
&lt;br /&gt;
{{XXX|Loosen spec to permit non-text-writers}}&lt;br /&gt;
&lt;br /&gt;
Print a representation of or name for this object on the provided [[TextWriter]].&lt;br /&gt;
&lt;br /&gt;
The TextWriter is responsible for breaking cycles.&lt;br /&gt;
&lt;br /&gt;
The Miranda method is:&lt;br /&gt;
 to __printOn(out) {&lt;br /&gt;
   out.write(&amp;quot;&amp;lt;&amp;quot; + &amp;lt;em&amp;gt;the simple name from this object's FQN&amp;lt;/em&amp;gt; + &amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Tests==&lt;br /&gt;
&lt;br /&gt;
{{XXX|Write tests}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 03:33:23 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_printOn</comments>		</item>
		<item>
			<title>Miranda optSealedDispatch</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_optSealedDispatch</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_optSealedDispatch</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;create from javadoc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__optSealedDispatch/1''' is a [[Miranda message]].&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__optSealedDispatch|1|&amp;lt;var&amp;gt;brand&amp;lt;/var&amp;gt; :[[Brand]]|[[void]]}}&lt;br /&gt;
&lt;br /&gt;
Generic object-level rights amplification protocol.&lt;br /&gt;
&lt;br /&gt;
Dispatch on the brand much as one would dispatch on a message name. If&lt;br /&gt;
we recognize the brand and we have the corresponding sealer, then we may&lt;br /&gt;
return something meaningful inside a [[SealedBox]] sealed with that [[Sealer]].&lt;br /&gt;
If we have nothing to return, given the meaning we associate with that&lt;br /&gt;
brand as a request, then we return null.&lt;br /&gt;
&lt;br /&gt;
Something meaningful?  Sounds strange. See [http://www.eros-os.org/pipermail/e-lang/2002-May/006435.html &amp;lt;nowiki&amp;gt;[e-lang]&amp;lt;/nowiki&amp;gt; Object coercion / adaptation] and the surrounding thread for more on&lt;br /&gt;
the rationale for the design of this method. Note that, at the time of&lt;br /&gt;
that discussion, this method was named getOptMeta instead.&lt;br /&gt;
&lt;br /&gt;
The default implementation: return null.&lt;br /&gt;
&lt;br /&gt;
If this object isn't actually transparent, but if &amp;lt;tt&amp;gt;brand&amp;lt;/tt&amp;gt;&lt;br /&gt;
represents a party this object would like to reveal itself to (such as a&lt;br /&gt;
serialization system implementing persistence for this object's&lt;br /&gt;
subsystem), then this object can choose to return a [[SealedBox]], sealed by&lt;br /&gt;
the by the [[Sealer]] for that brand, containing the same triple that [[Miranda optUncall|__optUncall]] would otherwise have returned. By so doing, the object&lt;br /&gt;
reveals its internals only to someone having the corresponding&lt;br /&gt;
[[Unsealer]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 03:25:06 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_optSealedDispatch</comments>		</item>
		<item>
			<title>Miranda getPropertySlot</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_getPropertySlot</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_getPropertySlot</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;add method header&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__getPropertySlot/1''' is a deprecated [[Miranda message]].&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__getPropertySlot|1|&amp;lt;var&amp;gt;propName&amp;lt;/var&amp;gt; :[[String]]|[[Slot]]}}&lt;br /&gt;
&lt;br /&gt;
==Original Javadoc==&lt;br /&gt;
&lt;br /&gt;
Used in the expansion of '&amp;lt;tt&amp;gt;foo::bar&amp;lt;/tt&amp;gt;' so that this syntax&lt;br /&gt;
represents foo's &amp;quot;bar&amp;quot; property.&lt;br /&gt;
&lt;br /&gt;
'&amp;lt;tt&amp;gt;foo::bar&amp;lt;/tt&amp;gt;' expands to '&amp;lt;tt&amp;gt;foo.__getPropertySlot(&amp;quot;bar&amp;quot;).get()&amp;lt;/tt&amp;gt;'.&lt;br /&gt;
When used an an lValue, '&amp;lt;tt&amp;gt;foo::bar := newValue&amp;lt;/tt&amp;gt;' expands&lt;br /&gt;
essentially to '&amp;lt;tt&amp;gt;foo.__getPropertySlot(&amp;quot;bar&amp;quot;).put(newValue)&amp;lt;/tt&amp;gt;'&lt;br /&gt;
except that the expansion also has the value of the assignment&lt;br /&gt;
expression be the value assigned.&lt;br /&gt;
&lt;br /&gt;
And finally '&amp;lt;tt&amp;gt;foo::&amp;amp;bar&amp;lt;/tt&amp;gt;' expands to '&amp;lt;tt&amp;gt;foo.__getPropertySlot(&amp;quot;bar&amp;quot;)&amp;lt;/tt&amp;gt;'&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;hr&amp;gt; The Miranda behavior provided here synthesizes, for foo's bar&lt;br /&gt;
property, a Slot object &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt;whose '&amp;lt;tt&amp;gt;get()&amp;lt;/tt&amp;gt;' does a&lt;br /&gt;
'&amp;lt;tt&amp;gt;foo.getBar()&amp;lt;/tt&amp;gt;' &amp;lt;li&amp;gt;whose '&amp;lt;tt&amp;gt;put(newValue)&amp;lt;/tt&amp;gt;' does a&lt;br /&gt;
'&amp;lt;tt&amp;gt;foo.setBar(newValue)&amp;lt;/tt&amp;gt;' &amp;lt;li&amp;gt;and whose '&amp;lt;tt&amp;gt;isFinal()&amp;lt;/tt&amp;gt;'&lt;br /&gt;
returns false&amp;lt;/tt&amp;gt;'. &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [http://www.eros-os.org/pipermail/e-lang/2004-April/009720.html Re: On kernel-E, operators, and properties (part 1)]&lt;br /&gt;
&lt;br /&gt;
'''Deprecated:''' Even if E does again decide to support explicit properties,&lt;br /&gt;
it'll do it with a global function that asks the object's&lt;br /&gt;
{@link #__getAllegedType} for the methods for its&lt;br /&gt;
properties.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
&lt;br /&gt;
This protocol should probably be deprecated and removed, as it does not compose under inheritance. Thread: [http://www.eros-os.org/pipermail/e-lang/2005-December/thread.html#11042] [http://www.eros-os.org/pipermail/e-lang/2006-January/thread.html#11064]&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;br /&gt;
[[Category:Unresolved design issues]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 03:21:09 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_getPropertySlot</comments>		</item>
		<item>
			<title>Miranda getPropertySlot</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_getPropertySlot</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_getPropertySlot</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;Add Javadoc.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Original Javadoc==&lt;br /&gt;
&lt;br /&gt;
Used in the expansion of '&amp;lt;tt&amp;gt;foo::bar&amp;lt;/tt&amp;gt;' so that this syntax&lt;br /&gt;
represents foo's &amp;quot;bar&amp;quot; property.&lt;br /&gt;
&lt;br /&gt;
'&amp;lt;tt&amp;gt;foo::bar&amp;lt;/tt&amp;gt;' expands to '&amp;lt;tt&amp;gt;foo.__getPropertySlot(&amp;quot;bar&amp;quot;).get()&amp;lt;/tt&amp;gt;'.&lt;br /&gt;
When used an an lValue, '&amp;lt;tt&amp;gt;foo::bar := newValue&amp;lt;/tt&amp;gt;' expands&lt;br /&gt;
essentially to '&amp;lt;tt&amp;gt;foo.__getPropertySlot(&amp;quot;bar&amp;quot;).put(newValue)&amp;lt;/tt&amp;gt;'&lt;br /&gt;
except that the expansion also has the value of the assignment&lt;br /&gt;
expression be the value assigned.&lt;br /&gt;
&lt;br /&gt;
And finally '&amp;lt;tt&amp;gt;foo::&amp;amp;bar&amp;lt;/tt&amp;gt;' expands to '&amp;lt;tt&amp;gt;foo.__getPropertySlot(&amp;quot;bar&amp;quot;)&amp;lt;/tt&amp;gt;'&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;hr&amp;gt; The Miranda behavior provided here synthesizes, for foo's bar&lt;br /&gt;
property, a Slot object &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt;whose '&amp;lt;tt&amp;gt;get()&amp;lt;/tt&amp;gt;' does a&lt;br /&gt;
'&amp;lt;tt&amp;gt;foo.getBar()&amp;lt;/tt&amp;gt;' &amp;lt;li&amp;gt;whose '&amp;lt;tt&amp;gt;put(newValue)&amp;lt;/tt&amp;gt;' does a&lt;br /&gt;
'&amp;lt;tt&amp;gt;foo.setBar(newValue)&amp;lt;/tt&amp;gt;' &amp;lt;li&amp;gt;and whose '&amp;lt;tt&amp;gt;isFinal()&amp;lt;/tt&amp;gt;'&lt;br /&gt;
returns false&amp;lt;/tt&amp;gt;'. &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [http://www.eros-os.org/pipermail/e-lang/2004-April/009720.html Re: On kernel-E, operators, and properties (part 1)]&lt;br /&gt;
&lt;br /&gt;
'''Deprecated:''' Even if E does again decide to support explicit properties,&lt;br /&gt;
it'll do it with a global function that asks the object's&lt;br /&gt;
{@link #__getAllegedType} for the methods for its&lt;br /&gt;
properties.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
&lt;br /&gt;
This protocol should probably be deprecated and removed, as it does not compose under inheritance. Thread: [http://www.eros-os.org/pipermail/e-lang/2005-December/thread.html#11042] [http://www.eros-os.org/pipermail/e-lang/2006-January/thread.html#11064]&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;br /&gt;
[[Category:Unresolved design issues]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 03:19:27 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_getPropertySlot</comments>		</item>
		<item>
			<title>Miranda whenBroken</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_whenBroken</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_whenBroken</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__whenBroken/1''' is a [[Miranda message]] for determining when a reference has become a [[broken reference]].&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__whenBroken|1|&amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt; :[[OneArgFunc]]|[[void]]}}&lt;br /&gt;
&lt;br /&gt;
Notify the &amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt; when the reference has transitioned to the [[broken]] state.&lt;br /&gt;
&lt;br /&gt;
* The Miranda method ignores the argument and returns null, as a near reference cannot become broken.&lt;br /&gt;
* If the recipient is an [[eventual ref]], then the message should not be forwarded, but the reactor should be stored for use as follows. (This forms part of the expected behavior of any [[proxy]] handler.)&lt;br /&gt;
** If it becomes broken, &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt; &amp;amp;lt;- run(&amp;lt;var&amp;gt;problem&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt; should be performed for every __whenBroken message previously received.&lt;br /&gt;
** If it becomes resolved to another ref, then it should forward every __whenBroken message it received to the target.&lt;br /&gt;
&lt;br /&gt;
==Original Javadoc==&lt;br /&gt;
&lt;br /&gt;
{{XXX|merge}}&lt;br /&gt;
&lt;br /&gt;
Used to implement &amp;quot;Ref whenBroken/2&amp;quot;; it should not be called directly.&lt;br /&gt;
&lt;br /&gt;
The Miranda behavior ignores the message, as only breakable ref&lt;br /&gt;
implementations ever respond to this message.&lt;br /&gt;
&lt;br /&gt;
See also:  [[Ref#whenBroken/2]]&lt;br /&gt;
&lt;br /&gt;
==Tests==&lt;br /&gt;
&lt;br /&gt;
{{XXX|Write tests}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;br /&gt;
[[Category:Pluribus]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 03:08:27 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_whenBroken</comments>		</item>
		<item>
			<title>Miranda whenMoreResolved</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_whenMoreResolved</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_whenMoreResolved</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;clean up, incorporate javadoc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__whenMoreResolved/1''' is a [[Miranda message]].&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__whenMoreResolved|1|&amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt; :[[OneArgFunc]]|[[void]]}}&lt;br /&gt;
&lt;br /&gt;
Notify the &amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt; when the reference is resolved, or is importantly ''closer'' to being resolved; specifically when it has become the [[same]] as a reference into a different vat (is a candidate for [[shortening]]).&lt;br /&gt;
&lt;br /&gt;
* If the recipient is a [[near ref]], then the Miranda method should be:&lt;br /&gt;
 to __whenMoreResolved(reactor) {&lt;br /&gt;
     reactor &amp;amp;lt;- run(&amp;lt;var&amp;gt;recipient&amp;lt;/var&amp;gt;)&lt;br /&gt;
     return null&lt;br /&gt;
 }&lt;br /&gt;
* If the recipient is a [[local promise]] then it should buffer and forward the message normally.&lt;br /&gt;
* If the recipient is a [[remote promise]] then {{XXX|Specify the CapTP-related behavior.}}&lt;br /&gt;
&lt;br /&gt;
==Original Javadoc==&lt;br /&gt;
&lt;br /&gt;
{{XXX|merge}}&lt;br /&gt;
&lt;br /&gt;
Used to implement when-catch and the &amp;quot;[[Ref#whenResolved/2]]&amp;quot;; it should not&lt;br /&gt;
be called directly.&lt;br /&gt;
&lt;br /&gt;
The Miranda behavior responds by doing 'reactor &amp;amp;lt;- run(self)'. If the&lt;br /&gt;
reference never becomes resolved, the reactor is not invoked.&lt;br /&gt;
&lt;br /&gt;
In the cooperative (non-malicious) case, the reactor will not be invoked&lt;br /&gt;
more than once.&lt;br /&gt;
&lt;br /&gt;
When sent on a reference, once the reference becomes resolved the&lt;br /&gt;
reactor will be invoked with the resolution. Should the reactor be&lt;br /&gt;
invoked with a non-broken reference, all earlier messages are guaranteed&lt;br /&gt;
to have been successfully delivered.&lt;br /&gt;
&lt;br /&gt;
Should the reference become broken, or should breakage prevent the&lt;br /&gt;
reporting of fulfillment to the reactor, the reactor will be invoked&lt;br /&gt;
with a broken reference. The reactor may be invoked more than once. In&lt;br /&gt;
particular, if the reference becomes fulfilled and then broken, the&lt;br /&gt;
reactor may hear of either or both of these events.&lt;br /&gt;
&lt;br /&gt;
See also: [[Ref#whenBroken/2]]&lt;br /&gt;
&lt;br /&gt;
==Tests==&lt;br /&gt;
&lt;br /&gt;
 ? var r := null&lt;br /&gt;
 &amp;gt; def ret := 1 &amp;lt;- __whenMoreResolved(fn x { r := x + 1 })&lt;br /&gt;
 &amp;gt; interp.waitAtTop(ret)&lt;br /&gt;
 &amp;gt; ret&lt;br /&gt;
 # value: &amp;lt;Promise&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? r&lt;br /&gt;
 # value: 2&lt;br /&gt;
 &lt;br /&gt;
 ? [ret]&lt;br /&gt;
 # value: [null]&lt;br /&gt;
&lt;br /&gt;
{{XXX|Above tests do not check for reactor&amp;amp;lt;-run rather than reactor.run}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;br /&gt;
[[Category:Pluribus]]&lt;/div&gt;</description>
			<pubDate>Sun, 07 Aug 2011 02:56:36 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_whenMoreResolved</comments>		</item>
		<item>
			<title>Miranda getAllegedType</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_getAllegedType</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_getAllegedType</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{instance msgdoc|getAllegedType|0||[[TypeDesc]]}}&lt;br /&gt;
&lt;br /&gt;
__getAllegedType/0 is a [[Miranda message]]. It returns a description of the protocol this object alleges to implement.&lt;br /&gt;
&lt;br /&gt;
The [[Miranda method]] for this message, for E objects, returns a TypeDesc generated from the object's actual method signatures and doc-comments, combined with the response to __getAllegedType/0 of its matcher.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* The [[Signature]] proposal.&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;/div&gt;</description>
			<pubDate>Mon, 01 Aug 2011 04:44:09 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_getAllegedType</comments>		</item>
		<item>
			<title>Miranda optUncall</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_optUncall</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_optUncall</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;import javadoc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__optUncall/0''' is a [[Miranda message]] which may return a [[portrayal]] of the object receiving it.&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__optUncall|0||[[Portrayal]]}}&lt;br /&gt;
&lt;br /&gt;
The [[miranda method]] for this message always returns &amp;lt;code&amp;gt;[[null]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For [[Selfless]] objects, __optUncall is guaranteed to return a portrayal which exactly represents the object; if &amp;lt;var&amp;gt;a&amp;lt;/var&amp;gt; is selfless, then &amp;lt;var&amp;gt;a&amp;lt;/var&amp;gt; [[==]] E.call(E, &amp;quot;call&amp;quot;, &amp;lt;var&amp;gt;a&amp;lt;/var&amp;gt;.__optUncall()).&lt;br /&gt;
&lt;br /&gt;
__optUncall is typically used by serialization systems for the default portrayal in the absence of other knowledge about the object.&lt;br /&gt;
&lt;br /&gt;
===Original Javadoc===&lt;br /&gt;
&lt;br /&gt;
Note: The terminology and taxonomy of this text may be outdated. {{XXX|Update this text and integrate it into the wiki}}&lt;br /&gt;
&lt;br /&gt;
This should return either &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; or a triple describing a call&lt;br /&gt;
that, if performed, will create an object resembling this one.&lt;br /&gt;
&lt;br /&gt;
Scalars (ints, float64s, chars, boolean, null) and bare Strings are&lt;br /&gt;
''atomic''. __optUncall on an atomic objects return null,&lt;br /&gt;
but atomic objects are still considered transparent. Objects which&lt;br /&gt;
return non-null are ''non-atomic'' and ''transparent''. Non-atomic&lt;br /&gt;
objects that return null are ''opaque''. Opaque objects may be&lt;br /&gt;
''selectively transparent'' to certain clients by implementing&lt;br /&gt;
[[Miranda optSealedDispatch|__optSealedDispatch]] as described there.&lt;br /&gt;
&lt;br /&gt;
When a transparent non-atomic object is [[Selfless]], then the&lt;br /&gt;
result of __optUncall is guaranteed to be accurate: It&lt;br /&gt;
describes a call that, when performed, must result in this very same&lt;br /&gt;
object, according to [[Ref#isSameEver|E's &amp;quot;==&amp;quot; operation]]. The&lt;br /&gt;
Selfless auditor ensures that all Selfless objects are accurately&lt;br /&gt;
self-describing in this way.&lt;br /&gt;
&lt;br /&gt;
The uncall of a Selfless object is canonical, so if x and y are both&lt;br /&gt;
Selfless, then&lt;br /&gt;
&lt;br /&gt;
    x == y iff x.__optUncall() == y.__optUncall()&lt;br /&gt;
&lt;br /&gt;
Performing the call described by the uncall of a non-Selfless object&lt;br /&gt;
generally creates whatever that object wished to create as its&lt;br /&gt;
representative, but because it had to provide the ingredients, its&lt;br /&gt;
representative could only be something it could have created. Therefore,&lt;br /&gt;
the representative cannot convey any more authority than the original&lt;br /&gt;
object itself has.&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;/div&gt;</description>
			<pubDate>Mon, 01 Aug 2011 04:40:41 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_optUncall</comments>		</item>
		<item>
			<title>Miranda order</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_order</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_order</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;Distinguishing unresolved response from unresolved value&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{instance msgdoc|__order|2|&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt; :[[String]], &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt; :[[List]]|[[any]]}}&lt;br /&gt;
&lt;br /&gt;
'''__order/2''' is a [[Miranda message]] for sending messages contingent on an earlier success.&lt;br /&gt;
&lt;br /&gt;
This method does the equivalent of&lt;br /&gt;
&lt;br /&gt;
    to __order(verb, args) :any {&lt;br /&gt;
        [E.call(self, verb, args), self]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In other words, it calls the receiving object with the message&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt;(&amp;lt;var&amp;gt;args...&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;, and, if successful, returns a pair&lt;br /&gt;
of the result of this call and the receiving object itself.&lt;br /&gt;
&lt;br /&gt;
What is this for?  Consider the client code fragment&lt;br /&gt;
&lt;br /&gt;
     databaseRcvr &amp;lt;- put(key1, value1)&lt;br /&gt;
     def value2Vow := databaseRcvr &amp;lt;- get(key2)&lt;br /&gt;
E's [http://www.erights.org/elib/concurrency/partial-order.html partial ordering semantics]&lt;br /&gt;
ensure that put will be delivered before&lt;br /&gt;
get is delivered. That is often good enough. But it is a weaker&lt;br /&gt;
guarantee than that provided by the following sequential code&lt;br /&gt;
&lt;br /&gt;
     database put(key1, value1)&lt;br /&gt;
     def value2Vow := database get(key2)&lt;br /&gt;
&lt;br /&gt;
In this code, not only will get only happen after put is delivered, get&lt;br /&gt;
will only happen after put ''succeeds''. If put instead throws an&lt;br /&gt;
exception, the get will never happen. Often we want this effect. How can&lt;br /&gt;
we achieve this with eventual-sends to eventual references?&lt;br /&gt;
&lt;br /&gt;
When one wants to take an action contingent on the results of a previous&lt;br /&gt;
action, the conventional E answer is to use a when-catch-finally&lt;br /&gt;
expression&lt;br /&gt;
&lt;br /&gt;
    def ackVow := databaseRcvr &amp;lt;- put(key1, value1)&lt;br /&gt;
    def value2Vow := when (ackVow) -&amp;gt; {&lt;br /&gt;
        databaseRcvr &amp;lt;- get(key2)&lt;br /&gt;
    } catch problem {&lt;br /&gt;
        throw(problem)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This is fine, as is probably the solution to be used by default for this&lt;br /&gt;
situation. However, it does force a round-trip between the get and put,&lt;br /&gt;
and so loses the benefits of pipelining. Using the __order message, we&lt;br /&gt;
can get contingent execution + pipelining, at some cost in obscurity.&lt;br /&gt;
(Note: often, the cost of obscurity will dominate.)&lt;br /&gt;
&lt;br /&gt;
    def pairVow := databaseRcvr &amp;lt;- __order(&amp;quot;put&amp;quot;, [key1, value1])&lt;br /&gt;
    # If put's return value were interesting, we'd 'pairVow &amp;lt;- get(0)'&lt;br /&gt;
    def newDBRcvr := pairVow &amp;lt;- get(1)&lt;br /&gt;
    def value2Vow := newDBRcvr &amp;lt;- get(key2)&lt;br /&gt;
&lt;br /&gt;
If put throws, then &amp;lt;var&amp;gt;pairVow&amp;lt;/var&amp;gt; will resolve directly to broken, so newDB&lt;br /&gt;
will likewise resolve to broken, as will &amp;lt;var&amp;gt;value2Vow&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Distinguishing unresolved response from unresolved value===&lt;br /&gt;
&lt;br /&gt;
It is also possible to use __order to observe when the turn caused by an eventual send finishes, even if its return value is itself an unresolved promise, by waiting for the returned tuple, or its second element, to resolve.&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;br /&gt;
[[Category:Pluribus]]&lt;/div&gt;</description>
			<pubDate>Mon, 01 Aug 2011 04:17:48 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_order</comments>		</item>
		<item>
			<title>Template:Instance msgdoc</title>
			<link>http://ds7.deltamobile.com/wiki/Template:Instance_msgdoc</link>
			<guid>http://ds7.deltamobile.com/wiki/Template:Instance_msgdoc</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;how 'bout a label?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== {{{1}}}/{{{2}}} ===&lt;br /&gt;
[[Category:Message {{{1}}}/{{{2}}}]]&lt;br /&gt;
:''Signature:'' {{{1}}}({{{3}}}) :{{{4}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage of this template: &amp;lt;nowiki&amp;gt;{{instance msgdoc|verb|arity|parameters|result type}}&amp;lt;/nowiki&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Mon, 01 Aug 2011 04:06:58 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Template_talk:Instance_msgdoc</comments>		</item>
		<item>
			<title>Template:Instance msgdoc</title>
			<link>http://ds7.deltamobile.com/wiki/Template:Instance_msgdoc</link>
			<guid>http://ds7.deltamobile.com/wiki/Template:Instance_msgdoc</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;indent signature. let's see if this looks good.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== {{{1}}}/{{{2}}} ===&lt;br /&gt;
[[Category:Message {{{1}}}/{{{2}}}]]&lt;br /&gt;
: {{{1}}}({{{3}}}) :{{{4}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage of this template: &amp;lt;nowiki&amp;gt;{{instance msgdoc|verb|arity|parameters|result type}}&amp;lt;/nowiki&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Mon, 01 Aug 2011 04:04:32 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Template_talk:Instance_msgdoc</comments>		</item>
		<item>
			<title>Miranda order</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_order</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_order</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;Documentation from MirandaMethods.java (licensed by MarkM's stated blanket permission)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{instance msgdoc|__order|2|&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt; :[[String]], &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt; :[[List]]|[[any]]}}&lt;br /&gt;
&lt;br /&gt;
'''__order/2''' is a [[Miranda message]] for sending messages contingent on an earlier success.&lt;br /&gt;
&lt;br /&gt;
This method does the equivalent of&lt;br /&gt;
&lt;br /&gt;
    to __order(verb, args) :any {&lt;br /&gt;
        [E.call(self, verb, args), self]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
In other words, it calls the receiving object with the message&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt;(&amp;lt;var&amp;gt;args...&amp;lt;/var&amp;gt;)&amp;lt;/code&amp;gt;, and, if successful, returns a pair&lt;br /&gt;
of the result of this call and the receiving object itself.&lt;br /&gt;
&lt;br /&gt;
What is this for?  Consider the client code fragment&lt;br /&gt;
&lt;br /&gt;
     databaseRcvr &amp;lt;- put(key1, value1)&lt;br /&gt;
     def value2Vow := databaseRcvr &amp;lt;- get(key2)&lt;br /&gt;
E's [http://www.erights.org/elib/concurrency/partial-order.html partial ordering semantics]&lt;br /&gt;
ensure that put will be delivered before&lt;br /&gt;
get is delivered. That is often good enough. But it is a weaker&lt;br /&gt;
guarantee than that provided by the following sequential code&lt;br /&gt;
&lt;br /&gt;
     database put(key1, value1)&lt;br /&gt;
     def value2Vow := database get(key2)&lt;br /&gt;
&lt;br /&gt;
In this code, not only will get only happen after put is delivered, get&lt;br /&gt;
will only happen after put ''succeeds''. If put instead throws an&lt;br /&gt;
exception, the get will never happen. Often we want this effect. How can&lt;br /&gt;
we achieve this with eventual-sends to eventual references?&lt;br /&gt;
&lt;br /&gt;
When one wants to take an action contingent on the results of a previous&lt;br /&gt;
action, the conventional E answer is to use a when-catch-finally&lt;br /&gt;
expression&lt;br /&gt;
&lt;br /&gt;
    def ackVow := databaseRcvr &amp;lt;- put(key1, value1)&lt;br /&gt;
    def value2Vow := when (ackVow) -&amp;gt; {&lt;br /&gt;
        databaseRcvr &amp;lt;- get(key2)&lt;br /&gt;
    } catch problem {&lt;br /&gt;
        throw(problem)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
This is fine, as is probably the solution to be used by default for this&lt;br /&gt;
situation. However, it does force a round-trip between the get and put,&lt;br /&gt;
and so loses the benefits of pipelining. Using the __order message, we&lt;br /&gt;
can get contingent execution + pipelining, at some cost in obscurity.&lt;br /&gt;
(Note: often, the cost of obscurity will dominate.)&lt;br /&gt;
&lt;br /&gt;
    def pairVow := databaseRcvr &amp;lt;- __order(&amp;quot;put&amp;quot;, [key1, value1])&lt;br /&gt;
    # If put's return value were interesting, we'd 'pairVow &amp;lt;- get(0)'&lt;br /&gt;
    def newDBRcvr := pairVow &amp;lt;- get(1)&lt;br /&gt;
    def value2Vow := newDBRcvr &amp;lt;- get(key2)&lt;br /&gt;
&lt;br /&gt;
If put throws, then &amp;lt;var&amp;gt;pairVow&amp;lt;/var&amp;gt; will resolve directly to broken, so newDB&lt;br /&gt;
will likewise resolve to broken, as will &amp;lt;var&amp;gt;value2Vow&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;br /&gt;
[[Category:Pluribus]]&lt;/div&gt;</description>
			<pubDate>Mon, 01 Aug 2011 03:59:23 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_order</comments>		</item>
		<item>
			<title>Miranda methods</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_methods</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_methods</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Miranda method is a method which, if it is not defined on a given object, is implicitly given a default definition. There are Miranda methods for every message in the [[Miranda protocol]]; descriptions of the Miranda methods may be found on each Miranda message's page.&lt;br /&gt;
&lt;br /&gt;
[[Category:ELib specification]]&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;/div&gt;</description>
			<pubDate>Tue, 26 Jul 2011 18:40:45 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_methods</comments>		</item>
		<item>
			<title>Miranda protocol</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_protocol</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_protocol</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;add no-same-verb constraint&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Every normal object responds to these '''miranda messages'''; [[miranda methods]] are provided for them.&lt;br /&gt;
&lt;br /&gt;
* [[Miranda conformTo|__conformTo]](&amp;lt;var&amp;gt;guard&amp;lt;/var&amp;gt; :[[Guard]]) :[[any]]&lt;br /&gt;
* [[Miranda getAllegedType|__getAllegedType]]() :[[TypeDesc]]&lt;br /&gt;
* [[Miranda getPropertySlot|__getPropertySlot]](&amp;lt;var&amp;gt;property&amp;lt;/var&amp;gt; :[[String]]) :Slot&lt;br /&gt;
* [[Miranda optSealedDispatch|__optSealedDispatch]](&amp;lt;var&amp;gt;brand&amp;lt;/var&amp;gt; :[[any]]) :[[any]]&lt;br /&gt;
* [[Miranda optUncall|__optUncall]]() :[[Portrayal]]&lt;br /&gt;
* [[Miranda order|__order]](&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt; :[[String]], &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt; :[[List]]) :[[Tuple]]&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;any, any&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Miranda printOn|__printOn]](&amp;lt;var&amp;gt;out&amp;lt;/var&amp;gt; :[[TextWriter]]) :[[void]]&lt;br /&gt;
* [[Miranda reactToLostClient|__reactToLostClient]](&amp;lt;var&amp;gt;problem&amp;lt;/var&amp;gt;) :[[void]]&lt;br /&gt;
* [[Miranda respondsTo|__respondsTo]](&amp;lt;var&amp;gt;verb&amp;lt;/var&amp;gt; :[[String]], &amp;lt;var&amp;gt;arity&amp;lt;/var&amp;gt; :[[int]]) :[[Boolean]]&lt;br /&gt;
* [[Miranda whenBroken|__whenBroken]](&amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt;) :[[void]]&lt;br /&gt;
* [[Miranda whenMoreResolved|__whenMoreResolved]](&amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt;) :[[void]]&lt;br /&gt;
&lt;br /&gt;
== Constraints on revision of this protocol ==&lt;br /&gt;
&lt;br /&gt;
No version of the Miranda protocol shall introduce a Miranda message which has the same verb but different arity as another Miranda message. '''Rationale:''' This ensures that if a plumbing object forwards messages, adding leading/trailing arguments, it will not invoke a Miranda method of the forwarding target.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.erights.org/javadoc/org/erights/e/elib/prim/MirandaMethods.html MirandaMethods class] in [[E-on-Java]]&lt;br /&gt;
* [http://www.erights.org/elib/distrib/captp/index.html CapTP protocol documentation], section “Helper Messages”&lt;br /&gt;
&lt;br /&gt;
[[Category:ELib specification]]&lt;br /&gt;
[[Category:Protocols]]&lt;/div&gt;</description>
			<pubDate>Tue, 26 Jul 2011 18:38:52 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_protocol</comments>		</item>
		<item>
			<title>Miranda reactToLostClient</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_reactToLostClient</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_reactToLostClient</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__reactToLostClient/1''' is a [[Miranda message]].&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__reactToLostClient|1|&amp;lt;var&amp;gt;problem&amp;lt;/var&amp;gt; :XXX|[[void]]}}&lt;br /&gt;
&lt;br /&gt;
__reactToLostClient/1 is delivered to an object when one of its clients may no longer be able to contact it due to network partition.&lt;br /&gt;
&lt;br /&gt;
A typical use of __reactToLostClient is to revoke a [[caretaker]] in the event of the revoker's client losing access to it.&lt;br /&gt;
&lt;br /&gt;
====Miranda behavior====&lt;br /&gt;
&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
 ? def obj {}&lt;br /&gt;
 &amp;gt; obj.__reactToLostClient(&amp;quot;foo&amp;quot;)&lt;br /&gt;
 # value: null&lt;br /&gt;
 &lt;br /&gt;
 ? obj.__reactToLostClient(null)&lt;br /&gt;
 # value: null&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[Category:Miranda messages]]&lt;br /&gt;
[[Category:ELib specification]]&lt;/div&gt;</description>
			<pubDate>Tue, 26 Jul 2011 18:35:20 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_reactToLostClient</comments>		</item>
		<item>
			<title>Miranda whenMoreResolved</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_whenMoreResolved</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_whenMoreResolved</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;subcategorized, no longer needs to be in ELib cat directly&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__whenMoreResolved/1''' is a [[Miranda message]].&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__whenMoreResolved|1|&amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt; :[[OneArgFunc]]|[[void]]}}&lt;br /&gt;
&lt;br /&gt;
The overall effect is to notify the &amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt; when the reference is resolved, or is ''closer'' to being resolved — in particular, when a resolution has changed its target to another vat. {{XXX|poor terminology}}&lt;br /&gt;
&lt;br /&gt;
If the recipient is a [[near ref]], then the Miranda method should be:&lt;br /&gt;
 to __whenMoreResolved(reactor) {&lt;br /&gt;
     reactor &amp;amp;lt;- run(&amp;lt;var&amp;gt;recipient&amp;lt;/var&amp;gt;)&lt;br /&gt;
     return null&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 ? var r := null&lt;br /&gt;
 &amp;gt; def ret := 1 &amp;lt;- __whenMoreResolved(fn x { r := x + 1 })&lt;br /&gt;
 &amp;gt; interp.waitAtTop(ret)&lt;br /&gt;
 &amp;gt; ret&lt;br /&gt;
 # value: &amp;lt;Promise&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? r&lt;br /&gt;
 # value: 2&lt;br /&gt;
 &lt;br /&gt;
 ? [ret]&lt;br /&gt;
 # value: [null]&lt;br /&gt;
&lt;br /&gt;
{{XXX|Above tests do not check for reactor&amp;amp;lt;-run rather than reactor.run}}&lt;br /&gt;
&lt;br /&gt;
If the recipient is a [[local promise]] then it should buffer and forward the message normally.&lt;br /&gt;
&lt;br /&gt;
If the recipient is a [[remote promise]] then {{XXX|Specify the CapTP-related behavior.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;br /&gt;
[[Category:Pluribus]]&lt;/div&gt;</description>
			<pubDate>Tue, 26 Jul 2011 18:30:09 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_whenMoreResolved</comments>		</item>
		<item>
			<title>Category:Miranda messages</title>
			<link>http://ds7.deltamobile.com/wiki/Category:Miranda_messages</link>
			<guid>http://ds7.deltamobile.com/wiki/Category:Miranda_messages</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;subcategorize&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Messages which are part of the [[Miranda protocol]].&lt;br /&gt;
[[Category:ELib specification]]&lt;/div&gt;</description>
			<pubDate>Tue, 26 Jul 2011 18:28:47 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Category_talk:Miranda_messages</comments>		</item>
		<item>
			<title>Miranda conformTo</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_conformTo</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_conformTo</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;uniform style for miranda pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__conformTo/1''' is a [[Miranda message]].&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__conformTo|1|&amp;lt;var&amp;gt;guard&amp;lt;/var&amp;gt; :[[Guard]]|[[any]]}}&lt;br /&gt;
&lt;br /&gt;
====Clients====&lt;br /&gt;
&lt;br /&gt;
A guard which does not immediately accept the recipient may call &amp;lt;code&amp;gt;__conformTo&amp;lt;/code&amp;gt;(the guard) on it, and check and return the result thereof instead.&lt;br /&gt;
&lt;br /&gt;
====Implementations====&lt;br /&gt;
&lt;br /&gt;
Implementations of &amp;lt;code&amp;gt;__conformTo/1&amp;lt;/code&amp;gt; should return the recipient if they have no better answer.&lt;br /&gt;
&lt;br /&gt;
====Miranda behavior====&lt;br /&gt;
&lt;br /&gt;
Returns the recipient.&lt;br /&gt;
&lt;br /&gt;
 ? def obj {}&lt;br /&gt;
 &amp;gt; obj.__conformTo(any)&lt;br /&gt;
 # value: &amp;lt;obj&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? obj.__conformTo(List)&lt;br /&gt;
 # value: &amp;lt;obj&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? obj.__conformTo(def bobj {})&lt;br /&gt;
 # value: &amp;lt;obj&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? obj.__conformTo(null)&lt;br /&gt;
 # value: &amp;lt;obj&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[Category:Miranda messages]]&lt;br /&gt;
[[Category:ELib specification]]&lt;/div&gt;</description>
			<pubDate>Tue, 26 Jul 2011 18:27:57 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_conformTo</comments>		</item>
		<item>
			<title>Miranda optUncall</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_optUncall</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_optUncall</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;uniform style for miranda pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__optUncall/0''' is a [[Miranda message]] which may return a [[portrayal]] of the object receiving it.&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__optUncall|0||[[Portrayal]]}}&lt;br /&gt;
&lt;br /&gt;
The [[miranda method]] for this message always returns &amp;lt;code&amp;gt;[[null]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For [[Selfless]] objects, __optUncall is guaranteed to return a portrayal which exactly represents the object; if &amp;lt;var&amp;gt;a&amp;lt;/var&amp;gt; is selfless, then &amp;lt;var&amp;gt;a&amp;lt;/var&amp;gt; [[==]] E.call(E, &amp;quot;call&amp;quot;, &amp;lt;var&amp;gt;a&amp;lt;/var&amp;gt;.__optUncall()).&lt;br /&gt;
&lt;br /&gt;
__optUncall is typically used by serialization systems for the default portrayal in the absence of other knowledge about the object.&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;/div&gt;</description>
			<pubDate>Tue, 26 Jul 2011 18:27:35 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_optUncall</comments>		</item>
		<item>
			<title>Miranda whenMoreResolved</title>
			<link>http://ds7.deltamobile.com/wiki/Miranda_whenMoreResolved</link>
			<guid>http://ds7.deltamobile.com/wiki/Miranda_whenMoreResolved</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;uniform style for miranda pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''__whenMoreResolved/1''' is a [[Miranda message]].&lt;br /&gt;
&lt;br /&gt;
{{instance msgdoc|__whenMoreResolved|1|&amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt; :[[OneArgFunc]]|[[void]]}}&lt;br /&gt;
&lt;br /&gt;
The overall effect is to notify the &amp;lt;var&amp;gt;reactor&amp;lt;/var&amp;gt; when the reference is resolved, or is ''closer'' to being resolved — in particular, when a resolution has changed its target to another vat. {{XXX|poor terminology}}&lt;br /&gt;
&lt;br /&gt;
If the recipient is a [[near ref]], then the Miranda method should be:&lt;br /&gt;
 to __whenMoreResolved(reactor) {&lt;br /&gt;
     reactor &amp;amp;lt;- run(&amp;lt;var&amp;gt;recipient&amp;lt;/var&amp;gt;)&lt;br /&gt;
     return null&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 ? var r := null&lt;br /&gt;
 &amp;gt; def ret := 1 &amp;lt;- __whenMoreResolved(fn x { r := x + 1 })&lt;br /&gt;
 &amp;gt; interp.waitAtTop(ret)&lt;br /&gt;
 &amp;gt; ret&lt;br /&gt;
 # value: &amp;lt;Promise&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ? r&lt;br /&gt;
 # value: 2&lt;br /&gt;
 &lt;br /&gt;
 ? [ret]&lt;br /&gt;
 # value: [null]&lt;br /&gt;
&lt;br /&gt;
{{XXX|Above tests do not check for reactor&amp;amp;lt;-run rather than reactor.run}}&lt;br /&gt;
&lt;br /&gt;
If the recipient is a [[local promise]] then it should buffer and forward the message normally.&lt;br /&gt;
&lt;br /&gt;
If the recipient is a [[remote promise]] then {{XXX|Specify the CapTP-related behavior.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Miranda messages]]&lt;br /&gt;
[[Category:ELib specification]]&lt;br /&gt;
[[Category:Pluribus]]&lt;/div&gt;</description>
			<pubDate>Tue, 26 Jul 2011 18:26:58 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Miranda_whenMoreResolved</comments>		</item>
		<item>
			<title>Integer</title>
			<link>http://ds7.deltamobile.com/wiki/Integer</link>
			<guid>http://ds7.deltamobile.com/wiki/Integer</guid>
			<description>&lt;p&gt;Kevin Reid:&amp;#32;mention guard, etc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Integer]] is one of the built-in numeric types in [[ELib]]. Integers may be literals in [[E language]] source.&lt;br /&gt;
&lt;br /&gt;
In the [[universal environment]], the Integer guard is named &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Maker protocol==&lt;br /&gt;
&lt;br /&gt;
{{maker msgdoc|run|1|&amp;lt;var&amp;gt;string&amp;lt;/var&amp;gt; :[[String]]|[[Integer]]}}&lt;br /&gt;
&lt;br /&gt;
{{specbycode|{{this}}.run(&amp;lt;var&amp;gt;string&amp;lt;/var&amp;gt;, 10)}}&lt;br /&gt;
&lt;br /&gt;
{{maker msgdoc|run|2|&amp;lt;var&amp;gt;string&amp;lt;/var&amp;gt; :[[String]], base :(0..36)|[[Integer]]}}&lt;br /&gt;
&lt;br /&gt;
Convert &amp;lt;var&amp;gt;string&amp;lt;/var&amp;gt; to an integer. If it does not match the following syntax then an exception is thrown. {{need-ejector-arg}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;string&amp;lt;/var&amp;gt; must contain only an optional leading minus sign &amp;quot;-&amp;quot; (U+002D), followed by at least one digit of the specified base (&amp;quot;0&amp;quot;-&amp;quot;9&amp;quot; for bases up to 10, then &amp;quot;a&amp;quot;-&amp;quot;z&amp;quot; or &amp;quot;A&amp;quot;-&amp;quot;Z&amp;quot; for additional digits up to base 36).&lt;br /&gt;
&lt;br /&gt;
==Tests==&lt;br /&gt;
&lt;br /&gt;
Many E implementations have multiple representations of Integers for different size ranges. These implementations ''must'' be indistinguishable, or there must be exactly one representation for any given integer.&lt;br /&gt;
&lt;br /&gt;
 ? def a := 4&lt;br /&gt;
 # value: 4&lt;br /&gt;
 &lt;br /&gt;
 ? def b := (400000000000000000000 // 100000000000000000000)&lt;br /&gt;
 # value: 4&lt;br /&gt;
 &lt;br /&gt;
 ? a == b&lt;br /&gt;
 # value: true&lt;br /&gt;
 &lt;br /&gt;
 ? a.__getAllegedType()&lt;br /&gt;
 # value: int&lt;br /&gt;
 &lt;br /&gt;
 ? b.__getAllegedType()&lt;br /&gt;
 # value: int&lt;br /&gt;
 &lt;br /&gt;
 ? 400000000000000000000.__getAllegedType()&lt;br /&gt;
 # value: int&lt;br /&gt;
&lt;br /&gt;
[[Category:ELib specification]]&lt;br /&gt;
{{stub}}&lt;/div&gt;</description>
			<pubDate>Tue, 26 Jul 2011 18:25:30 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://ds7.deltamobile.com/wiki/Talk:Integer</comments>		</item>
	</channel>
</rss>