<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.erights.org/mediawiki/skins/common/feed.css?207"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Guard-based auditing - Revision history</title>
		<link>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;action=history</link>
		<description>Revision history for this page on the wiki</description>
		<language>en</language>
		<generator>MediaWiki 1.15.5-7</generator>
		<lastBuildDate>Thu, 09 Apr 2026 10:09:46 GMT</lastBuildDate>
		<item>
			<title>Kevin Reid:&amp;#32;update on status, use XXX</title>
			<link>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=1639&amp;oldid=prev</link>
			<guid>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=1639&amp;oldid=prev</guid>
			<description>&lt;p&gt;update on status, use XXX&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This is a new design for auditing in E. It is an alternative to the unshadowable-names/synEnv system currently implemented in [[E-on-Java]], and the give-the-auditor-access-to-everything previously used by [[E-on-CL]].&lt;br /&gt;
&lt;br /&gt;
It is currently provided in [[E-on-CL]] and [[User:Markm]] plans to implement it in [[E-on-Java]].&lt;br /&gt;
&lt;br /&gt;
==Basic implementation==&lt;br /&gt;
&lt;br /&gt;
In [[environment]]s, nouns are associated with &amp;quot;bindings&amp;quot; instead of [[slot]]s. A binding is an object which holds a [[slot]] and a [[guard]], and alleges that that slot was returned from that guard (except for object expressions; see below).&lt;br /&gt;
&lt;br /&gt;
These properties of binding objects happen to make them very much like [[VarSlot]]s except for being immutable, so they implement the slot protocol and are called [[CoercedSlot]]. CoercedSlots are [[PassByConstruction]] and non-[[transparent]] [[Selfless]].&lt;br /&gt;
&lt;br /&gt;
Note that [[FinalPattern]]s and [[VarPattern]]s must get [[FinalSlot]] and [[VarSlot]] guards; e.g. &amp;lt;code&amp;gt;def x :int := 1&amp;lt;/code&amp;gt; results in the binding object &amp;lt;code&amp;gt;makeCoercedSlot(FinalSlot[int], makeFinalSlot(1), null)&amp;lt;/code&amp;gt; (except that implementations may optimize it to not require constructing an intermediate FinalSlot if the guard coerces).&lt;br /&gt;
&lt;br /&gt;
If a pattern does not have a guard, then &amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt; is used. Examples: &amp;lt;code&amp;gt;def x := y&amp;lt;/code&amp;gt; has a binding guard of &amp;lt;code&amp;gt;[[FinalSlot]][any]&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;def &amp;amp;x := y&amp;lt;/code&amp;gt; has a binding guard of &amp;lt;code&amp;gt;[[any]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Environments gain the methods fetchBinding/2, getBindings/0 (returns an object mapping nouns to bindings), and getSlots/0 (returns an object mapping nouns to slots), and lose iterate/1.&lt;br /&gt;
&lt;br /&gt;
[[Audition]]s have one relevant method, [[Audition#getGuard/1|getGuard/1]]. Given a noun (string), it returns the guard of the matching binding. If the noun is not one of the free variables of the audition's object expression, or if the audit has already terminated, then an exception is thrown.&lt;br /&gt;
&lt;br /&gt;
An additional component on kernel [[ObjectExpr]]s: the &amp;quot;&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt;&amp;quot; clause, syntactically preceding the &amp;quot;&amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt;&amp;quot;, behaves like it but with the additional effect of making its value be the guard for the binding of the object name (without coercing the object). That is, &amp;lt;code&amp;gt;def x as Y {}&amp;lt;/code&amp;gt; audits x with Y, and also causes the binding to be &amp;lt;code&amp;gt;(&amp;quot;x&amp;quot;, makeFinalSlot(&amp;lt;x&amp;gt;), FinalSlot[Y])&amp;lt;/code&amp;gt;. In the E AST, the current &amp;lt;var&amp;gt;auditorExprs&amp;lt;/var&amp;gt; :List[EExpr] is replaced with a new node type &amp;quot;AuditorExprs&amp;quot; with fields (&amp;lt;var&amp;gt;as&amp;lt;/var&amp;gt; :nullOk[EExpr], &amp;lt;var&amp;gt;implements&amp;lt;/var&amp;gt; :List[EExpr]).&lt;br /&gt;
&lt;br /&gt;
Bindings may be reified in E programs using the prefix &amp;amp;amp;&amp;amp;amp; operator. (This is necessary to support nonkernel &amp;lt;code&amp;gt;[[meta.getState]]()&amp;lt;/code&amp;gt;, and beneficial to the extends-syntax &amp;quot;&amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt;&amp;quot;.) &amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot; is a single token and operator, not two prefix operators. As an expression, it is BindingExpr(NounExpr); as a pattern it is BindingPattern(NounExpr). The pattern does not take a guard like [[SlotPattern]] does.&lt;br /&gt;
&lt;br /&gt;
The expansion of ObjectExpr's &amp;quot;extends&amp;quot; clause is changed such that &amp;quot;&amp;lt;code&amp;gt;extends &amp;lt;var&amp;gt;someNoun&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;quot; results in &amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt; defined as &amp;quot;&amp;lt;code&amp;gt;def &amp;amp;amp;&amp;amp;amp;super := &amp;amp;amp;&amp;amp;amp;&amp;lt;var&amp;gt;someNoun&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;; if the expression in the extends clause is not a noun then the expansion remains the current &amp;quot;&amp;lt;code&amp;gt;def super := &amp;lt;var&amp;gt;someExpr&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Because bindings are Selfless, the evaluator need not make any effort to preserve their identities.&lt;br /&gt;
&lt;br /&gt;
All bindings in the [[safeScope]] expose their values in their guards; that is, they are &amp;lt;code&amp;gt;(&amp;quot;foo&amp;quot;, bar, FinalSlot[Same[bar]])&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
CoercedSlots are PassByConstruction; their uncall is makeCoercedSlot.attempt(guard, value). This performs guard.coerce(value, ...); if the guard fails, or returns a reference which is not the same as the original value, then the resulting CoercedSlot has LostApproval[guard] instead of the original guard. LostApproval is equivalent to [[any]], and is used merely to report what the original guard was and why it is missing. ({{XXX|LostApproval is not implemented in E-on-CL}})&lt;br /&gt;
&lt;br /&gt;
==Implications for auditors==&lt;br /&gt;
&lt;br /&gt;
{{XXX|write this}}&lt;br /&gt;
&lt;br /&gt;
==Implications for guards==&lt;br /&gt;
&lt;br /&gt;
To support multiple independently-written auditors on the same object, it must be possible to have single guards which satisfy multiple auditors' criteria. It is also desirable that programmers need not write code to match exactly an auditor's view of what is necessary. Therefore, we add the optional operation rangeSupersetOf/1 to guards. &lt;br /&gt;
&lt;br /&gt;
  to rangeSupersetOf(other :Guard) :nullOk[boolean]&lt;br /&gt;
&lt;br /&gt;
If X.rangeSupersetOf(Y) returns true, X is claiming that every value returned by Y (as a guard) would have been returned by X under some circumstances; that is, the 'range' of X is a 'superset of' the range of Y. For example, int.rangeSupersetOf(1..10) should be true, as should [[DeepFrozen]].rangeSupersetOf(int).&lt;br /&gt;
&lt;br /&gt;
Returning false indicates that X is not a range superset of Y; returning null indicates that X doesn't know.&lt;br /&gt;
&lt;br /&gt;
==Open questions==&lt;br /&gt;
&lt;br /&gt;
{{XXX|write this}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Resolved design issues]]&lt;br /&gt;
[[Category:Message rangeSupersetOf/1]]&lt;/div&gt;</description>
			<pubDate>Sat, 29 Aug 2009 22:16:41 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://wiki.erights.org/wiki/Talk:Guard-based_auditing</comments>		</item>
		<item>
			<title>Markm:&amp;#32;/* Basic implementation */</title>
			<link>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3515&amp;oldid=prev</link>
			<guid>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3515&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Basic implementation&lt;/span&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:49, 1 January 2009&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Audition]]s have one relevant method, [[Audition#getGuard/1|getGuard/1]]. Given a noun (string), it returns the guard of the matching binding. If the noun is not one of the free variables of the audition's object expression, or if the audit has already terminated, then an exception is thrown.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Audition]]s have one relevant method, [[Audition#getGuard/1|getGuard/1]]. Given a noun (string), it returns the guard of the matching binding. If the noun is not one of the free variables of the audition's object expression, or if the audit has already terminated, then an exception is thrown.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An additional component on kernel [[ObjectExpr]]s: the &amp;quot;&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt;&amp;quot; clause, syntactically preceding the &amp;quot;&amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt;&amp;quot;, behaves like it but with the additional effect of making its value be the guard for the binding of the object name (without coercing the object). That is, &amp;lt;code&amp;gt;def x as Y {}&amp;lt;/code&amp;gt; audits x with Y, and also causes the binding to be &amp;lt;code&amp;gt;(&amp;quot;x&amp;quot;, makeFinalSlot(&amp;lt;x&amp;gt;), FinalSlot[Y])&amp;lt;/code&amp;gt;. In the E AST, the current &amp;lt;var&amp;gt;auditorExprs&amp;lt;/var&amp;gt; :List[EExpr] is replaced with a new node type &amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Auditors&lt;/del&gt;&amp;quot; with fields (&amp;lt;var&amp;gt;as&amp;lt;/var&amp;gt; :nullOk[EExpr], &amp;lt;var&amp;gt;implements&amp;lt;/var&amp;gt; :List[EExpr]).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An additional component on kernel [[ObjectExpr]]s: the &amp;quot;&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt;&amp;quot; clause, syntactically preceding the &amp;quot;&amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt;&amp;quot;, behaves like it but with the additional effect of making its value be the guard for the binding of the object name (without coercing the object). That is, &amp;lt;code&amp;gt;def x as Y {}&amp;lt;/code&amp;gt; audits x with Y, and also causes the binding to be &amp;lt;code&amp;gt;(&amp;quot;x&amp;quot;, makeFinalSlot(&amp;lt;x&amp;gt;), FinalSlot[Y])&amp;lt;/code&amp;gt;. In the E AST, the current &amp;lt;var&amp;gt;auditorExprs&amp;lt;/var&amp;gt; :List[EExpr] is replaced with a new node type &amp;quot;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;AuditorExprs&lt;/ins&gt;&amp;quot; with fields (&amp;lt;var&amp;gt;as&amp;lt;/var&amp;gt; :nullOk[EExpr], &amp;lt;var&amp;gt;implements&amp;lt;/var&amp;gt; :List[EExpr]).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Bindings may be reified in E programs using the prefix &amp;amp;amp;&amp;amp;amp; operator. (This is necessary to support nonkernel &amp;lt;code&amp;gt;[[meta.getState]]()&amp;lt;/code&amp;gt;, and beneficial to the extends-syntax &amp;quot;&amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt;&amp;quot;.) &amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot; is a single token and operator, not two prefix operators. As an expression, it is BindingExpr(NounExpr); as a pattern it is BindingPattern(NounExpr). The pattern does not take a guard like [[SlotPattern]] does.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Bindings may be reified in E programs using the prefix &amp;amp;amp;&amp;amp;amp; operator. (This is necessary to support nonkernel &amp;lt;code&amp;gt;[[meta.getState]]()&amp;lt;/code&amp;gt;, and beneficial to the extends-syntax &amp;quot;&amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt;&amp;quot;.) &amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot; is a single token and operator, not two prefix operators. As an expression, it is BindingExpr(NounExpr); as a pattern it is BindingPattern(NounExpr). The pattern does not take a guard like [[SlotPattern]] does.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-09 10:09:47 --&gt;
&lt;/table&gt;</description>
			<pubDate>Thu, 01 Jan 2009 19:49:35 GMT</pubDate>			<dc:creator>Markm</dc:creator>			<comments>http://wiki.erights.org/wiki/Talk:Guard-based_auditing</comments>		</item>
		<item>
			<title>Kevin Reid:&amp;#32;/* Basic implementation */ clarify super expansion</title>
			<link>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3514&amp;oldid=prev</link>
			<guid>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3514&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Basic implementation:&amp;#32;&lt;/span&gt; clarify super expansion&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 02:50, 29 November 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Bindings may be reified in E programs using the prefix &amp;amp;amp;&amp;amp;amp; operator. (This is necessary to support nonkernel &amp;lt;code&amp;gt;[[meta.getState]]()&amp;lt;/code&amp;gt;, and beneficial to the extends-syntax &amp;quot;&amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt;&amp;quot;.) &amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot; is a single token and operator, not two prefix operators. As an expression, it is BindingExpr(NounExpr); as a pattern it is BindingPattern(NounExpr). The pattern does not take a guard like [[SlotPattern]] does.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Bindings may be reified in E programs using the prefix &amp;amp;amp;&amp;amp;amp; operator. (This is necessary to support nonkernel &amp;lt;code&amp;gt;[[meta.getState]]()&amp;lt;/code&amp;gt;, and beneficial to the extends-syntax &amp;quot;&amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt;&amp;quot;.) &amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot; is a single token and operator, not two prefix operators. As an expression, it is BindingExpr(NounExpr); as a pattern it is BindingPattern(NounExpr). The pattern does not take a guard like [[SlotPattern]] does.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The expansion of ObjectExpr's &amp;quot;extends&amp;quot; clause is changed such that &amp;quot;&amp;lt;code&amp;gt;extends &amp;lt;var&amp;gt;someNoun&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;quot; results in &amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt; defined as&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: &lt;/del&gt;&amp;lt;code&amp;gt;def &amp;amp;amp;&amp;amp;amp;super := &amp;amp;amp;&amp;amp;amp;&amp;lt;var&amp;gt;someNoun&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The expansion of ObjectExpr's &amp;quot;extends&amp;quot; clause is changed such that &amp;quot;&amp;lt;code&amp;gt;extends &amp;lt;var&amp;gt;someNoun&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;quot; results in &amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt; defined as &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot;&lt;/ins&gt;&amp;lt;code&amp;gt;def &amp;amp;amp;&amp;amp;amp;super := &amp;amp;amp;&amp;amp;amp;&amp;lt;var&amp;gt;someNoun&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot;; if the expression in the extends clause is not a noun then the expansion remains the current &amp;quot;&amp;lt;code&amp;gt;def super := &amp;lt;var&amp;gt;someExpr&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Because bindings are Selfless, the evaluator need not make any effort to preserve their identities.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Because bindings are Selfless, the evaluator need not make any effort to preserve their identities.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-09 10:09:47 --&gt;
&lt;/table&gt;</description>
			<pubDate>Sat, 29 Nov 2008 02:50:45 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://wiki.erights.org/wiki/Talk:Guard-based_auditing</comments>		</item>
		<item>
			<title>Kevin Reid:&amp;#32;/* Basic implementation */ fix typo, improve structure</title>
			<link>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3513&amp;oldid=prev</link>
			<guid>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3513&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Basic implementation:&amp;#32;&lt;/span&gt; fix typo, improve structure&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 02:45, 29 November 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Audition]]s have one relevant method, [[Audition#getGuard/1|getGuard/1]]. Given a noun (string), it returns the guard of the matching binding. If the noun is not one of the free variables of the audition's object expression, or if the audit has already terminated, then an exception is thrown.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Audition]]s have one relevant method, [[Audition#getGuard/1|getGuard/1]]. Given a noun (string), it returns the guard of the matching binding. If the noun is not one of the free variables of the audition's object expression, or if the audit has already terminated, then an exception is thrown.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An additional component on kernel [[ObjectExpr]]s: the &amp;quot;&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt;&amp;quot; clause, syntactically preceding the &amp;quot;&amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt;&amp;quot;, behaves like it but with the additional effect of making its value be the guard for the binding of the object name (without coercing the object). That is, &amp;lt;code&amp;gt;def x as Y {}&amp;lt;/code&amp;gt; audits x with Y, and also causes the binding to be &amp;lt;code&amp;gt;(&amp;quot;x&amp;quot;, makeFinalSlot(&amp;lt;x&amp;gt;), FinalSlot[Y])&amp;lt;/code&amp;gt;. In &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;theE &lt;/del&gt;AST, the current &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;list of &lt;/del&gt;auditorExprs is replaced with a new node type &amp;quot;Auditors&amp;quot; with fields (as :nullOk[EExpr], implements :List[EExpr]).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An additional component on kernel [[ObjectExpr]]s: the &amp;quot;&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt;&amp;quot; clause, syntactically preceding the &amp;quot;&amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt;&amp;quot;, behaves like it but with the additional effect of making its value be the guard for the binding of the object name (without coercing the object). That is, &amp;lt;code&amp;gt;def x as Y {}&amp;lt;/code&amp;gt; audits x with Y, and also causes the binding to be &amp;lt;code&amp;gt;(&amp;quot;x&amp;quot;, makeFinalSlot(&amp;lt;x&amp;gt;), FinalSlot[Y])&amp;lt;/code&amp;gt;. In &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;the E &lt;/ins&gt;AST, the current &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;var&amp;gt;&lt;/ins&gt;auditorExprs&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/var&amp;gt; :List[EExpr] &lt;/ins&gt;is replaced with a new node type &amp;quot;Auditors&amp;quot; with fields (&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;var&amp;gt;&lt;/ins&gt;as&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/var&amp;gt; &lt;/ins&gt;:nullOk[EExpr], &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;var&amp;gt;&lt;/ins&gt;implements&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/var&amp;gt; &lt;/ins&gt;:List[EExpr]).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Bindings may be reified in E programs using the prefix &amp;amp;amp;&amp;amp;amp; operator. (This is necessary to support nonkernel &amp;lt;code&amp;gt;[[meta.getState]]()&amp;lt;/code&amp;gt;, and beneficial to the extends-syntax &amp;quot;&amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt;&amp;quot;.) &amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot; is a single token and operator, not two prefix operators. As an expression, it is BindingExpr(NounExpr); as a pattern it is BindingPattern(NounExpr). The pattern does not take a guard like [[SlotPattern]] does.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Bindings may be reified in E programs using the prefix &amp;amp;amp;&amp;amp;amp; operator. (This is necessary to support nonkernel &amp;lt;code&amp;gt;[[meta.getState]]()&amp;lt;/code&amp;gt;, and beneficial to the extends-syntax &amp;quot;&amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt;&amp;quot;.) &amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot; is a single token and operator, not two prefix operators. As an expression, it is BindingExpr(NounExpr); as a pattern it is BindingPattern(NounExpr). The pattern does not take a guard like [[SlotPattern]] does.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The expansion of ObjectExpr's &amp;quot;extends&amp;quot; clause is changed such that &amp;quot;&amp;lt;code&amp;gt;extends &amp;lt;var&amp;gt;someNoun&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;quot; results in &amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt; defined as: &amp;lt;code&amp;gt;def &amp;amp;amp;&amp;amp;amp;super := &amp;amp;amp;&amp;amp;amp;&amp;lt;var&amp;gt;someNoun&amp;lt;/var&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The expansion of ObjectExpr's &amp;quot;extends&amp;quot; clause is changed such that &amp;quot;&amp;lt;code&amp;gt;extends &amp;lt;var&amp;gt;someNoun&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;quot; results in &amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt; defined as: &amp;lt;code&amp;gt;def &amp;amp;amp;&amp;amp;amp;super := &amp;amp;amp;&amp;amp;amp;&amp;lt;var&amp;gt;someNoun&amp;lt;/var&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;gt;&amp;lt;/code&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Because bindings are Selfless, the evaluator need not make any effort to preserve their identities.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Because bindings are Selfless, the evaluator need not make any effort to preserve their identities.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-09 10:09:47 --&gt;
&lt;/table&gt;</description>
			<pubDate>Sat, 29 Nov 2008 02:45:02 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://wiki.erights.org/wiki/Talk:Guard-based_auditing</comments>		</item>
		<item>
			<title>Kevin Reid:&amp;#32;/* Basic implementation */ doc of super expansion and Kernel-E change</title>
			<link>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3512&amp;oldid=prev</link>
			<guid>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3512&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Basic implementation:&amp;#32;&lt;/span&gt; doc of super expansion and Kernel-E change&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 04:24, 8 November 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Audition]]s have one relevant method, [[Audition#getGuard/1|getGuard/1]]. Given a noun (string), it returns the guard of the matching binding. If the noun is not one of the free variables of the audition's object expression, or if the audit has already terminated, then an exception is thrown.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Audition]]s have one relevant method, [[Audition#getGuard/1|getGuard/1]]. Given a noun (string), it returns the guard of the matching binding. If the noun is not one of the free variables of the audition's object expression, or if the audit has already terminated, then an exception is thrown.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An additional component on kernel [[ObjectExpr]]s: the &amp;quot;&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt;&amp;quot; clause, syntactically preceding the &amp;quot;&amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt;&amp;quot;, behaves like it but with the additional effect of making its value be the guard for the binding of the object name (without coercing the object). That is, &amp;lt;code&amp;gt;def x as Y {}&amp;lt;/code&amp;gt; audits x with Y, and also causes the binding to be &amp;lt;code&amp;gt;(&amp;quot;x&amp;quot;, makeFinalSlot(&amp;lt;x&amp;gt;), FinalSlot[Y])&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An additional component on kernel [[ObjectExpr]]s: the &amp;quot;&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt;&amp;quot; clause, syntactically preceding the &amp;quot;&amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt;&amp;quot;, behaves like it but with the additional effect of making its value be the guard for the binding of the object name (without coercing the object). That is, &amp;lt;code&amp;gt;def x as Y {}&amp;lt;/code&amp;gt; audits x with Y, and also causes the binding to be &amp;lt;code&amp;gt;(&amp;quot;x&amp;quot;, makeFinalSlot(&amp;lt;x&amp;gt;), FinalSlot[Y])&amp;lt;/code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;. In theE AST, the current list of auditorExprs is replaced with a new node type &amp;quot;Auditors&amp;quot; with fields (as :nullOk[EExpr], implements :List[EExpr])&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Bindings may be reified in E programs using the prefix &amp;amp;amp;&amp;amp;amp; operator. (This is necessary to support nonkernel &amp;lt;code&amp;gt;[[meta.getState]]()&amp;lt;/code&amp;gt;, and beneficial to the extends-syntax &amp;quot;&amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt;&amp;quot;.) &amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot; is a single token and operator, not two prefix operators. As an expression, it is BindingExpr(NounExpr); as a pattern it is BindingPattern(NounExpr). The pattern does not take a guard like [[SlotPattern]] does.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Bindings may be reified in E programs using the prefix &amp;amp;amp;&amp;amp;amp; operator. (This is necessary to support nonkernel &amp;lt;code&amp;gt;[[meta.getState]]()&amp;lt;/code&amp;gt;, and beneficial to the extends-syntax &amp;quot;&amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt;&amp;quot;.) &amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot; is a single token and operator, not two prefix operators. As an expression, it is BindingExpr(NounExpr); as a pattern it is BindingPattern(NounExpr). The pattern does not take a guard like [[SlotPattern]] does.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The expansion of ObjectExpr's &amp;quot;extends&amp;quot; clause is changed such that &amp;quot;&amp;lt;code&amp;gt;extends &amp;lt;var&amp;gt;someNoun&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;quot; results in &amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt; defined as: &amp;lt;code&amp;gt;def &amp;amp;amp;&amp;amp;amp;super := &amp;amp;amp;&amp;amp;amp;&amp;lt;var&amp;gt;someNoun&amp;lt;/var&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Because bindings are Selfless, the evaluator need not make any effort to preserve their identities.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Because bindings are Selfless, the evaluator need not make any effort to preserve their identities.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-09 10:09:47 --&gt;
&lt;/table&gt;</description>
			<pubDate>Sat, 08 Nov 2008 04:24:58 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://wiki.erights.org/wiki/Talk:Guard-based_auditing</comments>		</item>
		<item>
			<title>Kevin Reid:&amp;#32;/* Basic implementation */ mention super motive for &amp;&amp;</title>
			<link>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3511&amp;oldid=prev</link>
			<guid>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3511&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Basic implementation:&amp;#32;&lt;/span&gt; mention super motive for &amp;amp;&amp;amp;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 04:17, 8 November 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An additional component on kernel [[ObjectExpr]]s: the &amp;quot;&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt;&amp;quot; clause, syntactically preceding the &amp;quot;&amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt;&amp;quot;, behaves like it but with the additional effect of making its value be the guard for the binding of the object name (without coercing the object). That is, &amp;lt;code&amp;gt;def x as Y {}&amp;lt;/code&amp;gt; audits x with Y, and also causes the binding to be &amp;lt;code&amp;gt;(&amp;quot;x&amp;quot;, makeFinalSlot(&amp;lt;x&amp;gt;), FinalSlot[Y])&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An additional component on kernel [[ObjectExpr]]s: the &amp;quot;&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt;&amp;quot; clause, syntactically preceding the &amp;quot;&amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt;&amp;quot;, behaves like it but with the additional effect of making its value be the guard for the binding of the object name (without coercing the object). That is, &amp;lt;code&amp;gt;def x as Y {}&amp;lt;/code&amp;gt; audits x with Y, and also causes the binding to be &amp;lt;code&amp;gt;(&amp;quot;x&amp;quot;, makeFinalSlot(&amp;lt;x&amp;gt;), FinalSlot[Y])&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Bindings may be reified in E programs using the prefix &amp;amp;amp;&amp;amp;amp; operator. (This is necessary to support nonkernel &amp;lt;code&amp;gt;[[meta.getState]]()&amp;lt;/code&amp;gt;.) &amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot; is a single token and operator, not two prefix operators. As an expression, it is BindingExpr(NounExpr); as a pattern it is BindingPattern(NounExpr). The pattern does not take a guard like [[SlotPattern]] does.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Bindings may be reified in E programs using the prefix &amp;amp;amp;&amp;amp;amp; operator. (This is necessary to support nonkernel &amp;lt;code&amp;gt;[[meta.getState]]()&amp;lt;/code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;, and beneficial to the extends-syntax &amp;quot;&amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt;&amp;quot;&lt;/ins&gt;.) &amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot; is a single token and operator, not two prefix operators. As an expression, it is BindingExpr(NounExpr); as a pattern it is BindingPattern(NounExpr). The pattern does not take a guard like [[SlotPattern]] does.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Because bindings are Selfless, the evaluator need not make any effort to preserve their identities.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Because bindings are Selfless, the evaluator need not make any effort to preserve their identities.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-09 10:09:48 --&gt;
&lt;/table&gt;</description>
			<pubDate>Sat, 08 Nov 2008 04:17:41 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://wiki.erights.org/wiki/Talk:Guard-based_auditing</comments>		</item>
		<item>
			<title>Kevin Reid:&amp;#32;/* Basic implementation */ clarify relationship with VarSlot</title>
			<link>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3510&amp;oldid=prev</link>
			<guid>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3510&amp;oldid=prev</guid>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Basic implementation:&amp;#32;&lt;/span&gt; clarify relationship with VarSlot&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 03:47, 8 November 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In [[environment]]s, nouns are associated with &amp;quot;bindings&amp;quot; instead of [[slot]]s. A binding is an object which holds a [[slot]] and a [[guard]], and alleges that that slot was returned from that guard (except for object expressions; see below).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In [[environment]]s, nouns are associated with &amp;quot;bindings&amp;quot; instead of [[slot]]s. A binding is an object which holds a [[slot]] and a [[guard]], and alleges that that slot was returned from that guard (except for object expressions; see below).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Binding &lt;/del&gt;objects happen to &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;be &lt;/del&gt;very much like &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;immutable &lt;/del&gt;[[VarSlot]]s, so they implement the slot protocol and are called [[CoercedSlot]]. CoercedSlots are [[PassByConstruction]] and non-[[transparent]] [[Selfless]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;These properties of binding &lt;/ins&gt;objects happen to &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;make them &lt;/ins&gt;very much like [[VarSlot]]s &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;except for being immutable&lt;/ins&gt;, so they implement the slot protocol and are called [[CoercedSlot]]. CoercedSlots are [[PassByConstruction]] and non-[[transparent]] [[Selfless]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Note that [[FinalPattern]]s and [[VarPattern]]s must get FinalSlot and VarSlot guards; e.g. &amp;lt;code&amp;gt;def x :int := 1&amp;lt;/code&amp;gt; results in the binding object &amp;lt;code&amp;gt;makeCoercedSlot(FinalSlot[int], makeFinalSlot(1), null)&amp;lt;/code&amp;gt; (except that implementations may optimize it to not require constructing an intermediate FinalSlot if the guard coerces).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Note that [[FinalPattern]]s and [[VarPattern]]s must get &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[[&lt;/ins&gt;FinalSlot&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]] &lt;/ins&gt;and &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[[&lt;/ins&gt;VarSlot&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]] &lt;/ins&gt;guards; e.g. &amp;lt;code&amp;gt;def x :int := 1&amp;lt;/code&amp;gt; results in the binding object &amp;lt;code&amp;gt;makeCoercedSlot(FinalSlot[int], makeFinalSlot(1), null)&amp;lt;/code&amp;gt; (except that implementations may optimize it to not require constructing an intermediate FinalSlot if the guard coerces).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If a pattern does not have a guard, then &amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt; is used. Examples: &amp;lt;code&amp;gt;def x := y&amp;lt;/code&amp;gt; has a binding guard of &amp;lt;code&amp;gt;[[FinalSlot]][any]&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;def &amp;amp;x := y&amp;lt;/code&amp;gt; has a binding guard of &amp;lt;code&amp;gt;[[any]]&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If a pattern does not have a guard, then &amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt; is used. Examples: &amp;lt;code&amp;gt;def x := y&amp;lt;/code&amp;gt; has a binding guard of &amp;lt;code&amp;gt;[[FinalSlot]][any]&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;def &amp;amp;x := y&amp;lt;/code&amp;gt; has a binding guard of &amp;lt;code&amp;gt;[[any]]&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-09 10:09:48 --&gt;
&lt;/table&gt;</description>
			<pubDate>Sat, 08 Nov 2008 03:47:39 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://wiki.erights.org/wiki/Talk:Guard-based_auditing</comments>		</item>
		<item>
			<title>Kevin Reid:&amp;#32;update eocl status</title>
			<link>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3509&amp;oldid=prev</link>
			<guid>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3509&amp;oldid=prev</guid>
			<description>&lt;p&gt;update eocl status&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 21:20, 17 September 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is a new design for auditing in E. It is an alternative to the unshadowable-names/synEnv system currently implemented in [[E-on-Java]], and the give-the-auditor-access-to-everything &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;currently in &lt;/del&gt;[[E-on-CL]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is a new design for auditing in E&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;. It is currently provided in [[E-on-CL]]&lt;/ins&gt;. It is an alternative to the unshadowable-names/synEnv system currently implemented in [[E-on-Java]], and the give-the-auditor-access-to-everything &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;previously used by &lt;/ins&gt;[[E-on-CL]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Basic implementation==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Basic implementation==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;All bindings in the [[safeScope]] expose their values in their guards; that is, they are &amp;lt;code&amp;gt;(&amp;quot;foo&amp;quot;, bar, FinalSlot[Same[bar]])&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;All bindings in the [[safeScope]] expose their values in their guards; that is, they are &amp;lt;code&amp;gt;(&amp;quot;foo&amp;quot;, bar, FinalSlot[Same[bar]])&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;CoercedSlots are PassByConstruction; their uncall is makeCoercedSlot.attempt(guard, value). This performs guard.coerce(value, ...); if the guard fails, or returns a reference which is not the same as the original value, then the resulting CoercedSlot has LostApproval[guard] instead of the original guard. LostApproval is equivalent to [[any]], and is used merely to report what the original guard was and why it is missing.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;CoercedSlots are PassByConstruction; their uncall is makeCoercedSlot.attempt(guard, value). This performs guard.coerce(value, ...); if the guard fails, or returns a reference which is not the same as the original value, then the resulting CoercedSlot has LostApproval[guard] instead of the original guard. LostApproval is equivalent to [[any]], and is used merely to report what the original guard was and why it is missing. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(XXX LostApproval is not implemented in E-on-CL)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Implications for auditors==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Implications for auditors==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-09 10:09:48 --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 17 Sep 2008 21:20:33 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://wiki.erights.org/wiki/Talk:Guard-based_auditing</comments>		</item>
		<item>
			<title>Kevin Reid:&amp;#32;update to match new design decisions; possibly not complete</title>
			<link>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3508&amp;oldid=prev</link>
			<guid>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3508&amp;oldid=prev</guid>
			<description>&lt;p&gt;update to match new design decisions; possibly not complete&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 15:57, 23 March 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Basic implementation==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Basic implementation==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Environment&lt;/del&gt;]]s &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;holding an opt&lt;/del&gt;[[&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Guard&lt;/del&gt;]] &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;along with each binding&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;For each noun, the scope alleges that the corresponding &lt;/del&gt;[[slot]] &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;(not &lt;/del&gt;slot &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;value!) &lt;/del&gt;was returned from that guard (except for object expressions; see below).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;In &lt;/ins&gt;[[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;environment&lt;/ins&gt;]]s&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;, nouns are associated with &amp;quot;bindings&amp;quot; instead of &lt;/ins&gt;[[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;slot&lt;/ins&gt;]]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;s&lt;/ins&gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;A binding is an object which holds a &lt;/ins&gt;[[slot]] &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;and a [[guard]], and alleges that that &lt;/ins&gt;slot was returned from that guard (except for object expressions; see below).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;As a consequence of this, environments must not &lt;/del&gt;be [[&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Selfless&lt;/del&gt;]], &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;since it is not necessarily possible to go from some product of a guard to a value it coerces to &lt;/del&gt;the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;same result&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;They may be &lt;/del&gt;[[PassByConstruction]]&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;, however&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Binding objects happen to &lt;/ins&gt;be &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;very much like immutable &lt;/ins&gt;[[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;VarSlot&lt;/ins&gt;]]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;s&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;so they implement &lt;/ins&gt;the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;slot protocol and are called [[CoercedSlot]]&lt;/ins&gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;CoercedSlots are &lt;/ins&gt;[[PassByConstruction]] &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;and non-[[transparent]] [[Selfless]]&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;(&lt;/del&gt;Note that [[FinalPattern]]s and [[VarPattern]]s must get FinalSlot and VarSlot guards; e.g. &amp;lt;code&amp;gt;def x :int := 1&amp;lt;/code&amp;gt; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;has a guard-&lt;/del&gt;in&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;-environment of &lt;/del&gt;&amp;lt;code&amp;gt;FinalSlot[int]&amp;lt;/code&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Note that [[FinalPattern]]s and [[VarPattern]]s must get FinalSlot and VarSlot guards; e.g. &amp;lt;code&amp;gt;def x :int := 1&amp;lt;/code&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;results &lt;/ins&gt;in &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;the binding object &lt;/ins&gt;&amp;lt;code&amp;gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;makeCoercedSlot(&lt;/ins&gt;FinalSlot[int]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;, makeFinalSlot(1), null)&lt;/ins&gt;&amp;lt;/code&amp;gt; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(except that implementations may optimize it to not require constructing an intermediate FinalSlot if the guard coerces&lt;/ins&gt;)&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Environments gain the method fetchGuard&lt;/del&gt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;2&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;similar to fetchSlot&lt;/del&gt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;2&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;If a pattern does not have a guard, then &amp;lt;code&amp;gt;any&amp;lt;&lt;/ins&gt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;code&amp;gt; is used. Examples: &amp;lt;code&amp;gt;def x := y&amp;lt;/code&amp;gt; has a binding guard of &amp;lt;code&amp;gt;[[FinalSlot]][any]&amp;lt;/code&amp;gt;&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;and &amp;lt;code&amp;gt;def &amp;amp;x := y&amp;lt;/code&amp;gt; has a binding guard of &amp;lt;code&amp;gt;[[any]]&amp;lt;&lt;/ins&gt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;code&amp;gt;&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Audition]]s have one relevant method, [[Audition#getGuard/1|getGuard/1]]. Given a noun (string), it returns the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;environment's optGuard for that &lt;/del&gt;binding. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;(XXX seems to be some optional/required confusion here. Does this return null, or does it return 'any'? --[[User:Kevin Reid|Kevin Reid]] 08:58, 19 February 2008 (CST)) &lt;/del&gt;If the noun is not one of the free variables of the audition's object expression, or if the audit has already terminated, then an exception is thrown.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Environments gain the methods fetchBinding/2, getBindings/0 (returns an object mapping nouns to bindings), and getSlots/0 (returns an object mapping nouns to slots), and lose iterate/1.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Audition]]s have one relevant method, [[Audition#getGuard/1|getGuard/1]]. Given a noun (string), it returns the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;guard of the matching &lt;/ins&gt;binding. If the noun is not one of the free variables of the audition's object expression, or if the audit has already terminated, then an exception is thrown.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An additional component on kernel [[ObjectExpr]]s: the &amp;quot;&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt;&amp;quot; clause, syntactically preceding the &amp;quot;&amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt;&amp;quot;, behaves like it but with the additional effect of making its value be the guard for the binding of the object name (without coercing the object). That is, &amp;lt;code&amp;gt;def x as Y {}&amp;lt;/code&amp;gt; audits x with Y, and also causes the binding to be &amp;lt;code&amp;gt;(&amp;quot;x&amp;quot;, makeFinalSlot(&amp;lt;x&amp;gt;), FinalSlot[Y])&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An additional component on kernel [[ObjectExpr]]s: the &amp;quot;&amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt;&amp;quot; clause, syntactically preceding the &amp;quot;&amp;lt;code&amp;gt;implements&amp;lt;/code&amp;gt;&amp;quot;, behaves like it but with the additional effect of making its value be the guard for the binding of the object name (without coercing the object). That is, &amp;lt;code&amp;gt;def x as Y {}&amp;lt;/code&amp;gt; audits x with Y, and also causes the binding to be &amp;lt;code&amp;gt;(&amp;quot;x&amp;quot;, makeFinalSlot(&amp;lt;x&amp;gt;), FinalSlot[Y])&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Bindings may be reified in E programs using the prefix &amp;amp;amp;&amp;amp;amp; operator. (This is necessary to support nonkernel &amp;lt;code&amp;gt;[[meta.getState]]()&amp;lt;/code&amp;gt;.) &amp;quot;&amp;amp;amp;&amp;amp;amp;&amp;quot; is a single token and operator, not two prefix operators. As an expression, it is BindingExpr(NounExpr); as a pattern it is BindingPattern(NounExpr). The pattern does not take a guard like [[SlotPattern]] does.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Because bindings are Selfless, the evaluator need not make any effort to preserve their identities.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;All bindings in the [[safeScope]] expose their values in their guards; that is, they are &amp;lt;code&amp;gt;(&amp;quot;foo&amp;quot;, bar, FinalSlot[Same[bar]])&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;All bindings in the [[safeScope]] expose their values in their guards; that is, they are &amp;lt;code&amp;gt;(&amp;quot;foo&amp;quot;, bar, FinalSlot[Same[bar]])&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;CoercedSlots are PassByConstruction; their uncall is makeCoercedSlot.attempt(guard, value). This performs guard.coerce(value, ...); if the guard fails, or returns a reference which is not the same as the original value, then the resulting CoercedSlot has LostApproval[guard] instead of the original guard. LostApproval is equivalent to [[any]], and is used merely to report what the original guard was and why it is missing.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Implications for auditors==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Implications for auditors==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 21:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 29:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Implications for guards==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Implications for guards==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;==Open questions==&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;To support multiple independently-written auditors on the same object, it must be possible to have single guards which satisfy multiple auditors' criteria. It is also desirable that programmers need not write code to match exactly an auditor's view of what is necessary. Therefore, we add the optional operation rangeSupersetOf/1 to guards. &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;environments are PassByConstruction, then&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;if &lt;/del&gt;a &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;passed &lt;/del&gt;guard &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;coerces &lt;/del&gt;some &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;slot to a different slot upon unserialization&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;should &lt;/del&gt;the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;binding have &lt;/del&gt;the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;coerced value &lt;/del&gt;(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;i&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;e&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;now coerced twice&lt;/del&gt;), &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;or &lt;/del&gt;should &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;the binding forget the guard?&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;nbsp; to rangeSupersetOf(other :Guard) :nullOk[boolean]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;X.rangeSupersetOf(Y) returns true&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;X is claiming that every value returned by Y (as &lt;/ins&gt;a guard&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;) would have been returned by X under &lt;/ins&gt;some &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;circumstances; that is&lt;/ins&gt;, the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'range' of X is a 'superset of' &lt;/ins&gt;the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;range of Y. For example, int.rangeSupersetOf&lt;/ins&gt;(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1&lt;/ins&gt;..&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;10&lt;/ins&gt;) &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;should be true&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;as &lt;/ins&gt;should &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;DeepFrozen.rangeSupersetOf(int).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Returning false indicates that X is not a range superset of Y; returning null indicates that X doesn't know.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;==Open questions==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:Unresolved design issues]]&amp;lt;!-- not a perfect fit, but good to have this indexed there --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:Unresolved design issues]]&amp;lt;!-- not a perfect fit, but good to have this indexed there --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-09 10:09:48 --&gt;
&lt;/table&gt;</description>
			<pubDate>Sun, 23 Mar 2008 15:57:00 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://wiki.erights.org/wiki/Talk:Guard-based_auditing</comments>		</item>
		<item>
			<title>Kevin Reid:&amp;#32;add to design issues cat</title>
			<link>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3507&amp;oldid=prev</link>
			<guid>http://wiki.erights.org/mediawiki/index.php?title=Guard-based_auditing&amp;diff=3507&amp;oldid=prev</guid>
			<description>&lt;p&gt;add to design issues cat&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 15:58, 17 March 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 24:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 24:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If environments are PassByConstruction, then, if a passed guard coerces some slot to a different slot upon unserialization, should the binding have the coerced value (i.e. now coerced twice), or should the binding forget the guard?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If environments are PassByConstruction, then, if a passed guard coerces some slot to a different slot upon unserialization, should the binding have the coerced value (i.e. now coerced twice), or should the binding forget the guard?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Unresolved design issues]]&amp;lt;!-- not a perfect fit, but good to have this indexed there --&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-04-09 10:09:49 --&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 17 Mar 2008 15:58:54 GMT</pubDate>			<dc:creator>Kevin Reid</dc:creator>			<comments>http://wiki.erights.org/wiki/Talk:Guard-based_auditing</comments>		</item>
	</channel>
</rss>