blob: f55790c89782145ddc926bdb6e84b7d2d7b7b970 [file] [log] [blame]
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "../xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="../css/ot.css" />
<link rel="stylesheet" type="text/css" href="../css/otjld.css" />
<title>OT/J Language Definition v1.3</title>
</head>
<body class="otdt">
<div id="content">
<table class="nav">
<tr>
<td class="back"><a id="top"></a><a href="sA.html" rel="prev">&lt;&lt;&nbsp;&sect;A&nbsp;OT/J Syntax</a></td>
<td class="top"><a href="index.html" rel="contents">&uarr;&nbsp;Table of Contents&nbsp;&uarr;</a></td>
<td class="next"></td>
</tr>
</table>
<div class="chapter" id="sB">
<div class="headl">
<div class="headr">
<h1>&sect;B&nbsp;Changes between versions</h1>
</div>
</div>
<div id="toc-box">
<ul class="toc-box">
<li><a href="sB.html">&sect;B&nbsp;Changes between versions</a></li>
<li><a href="#sB.1">&sect;B.1&nbsp;Paragraphs changed between versions</a></li>
<li><a href="#sB.2">&sect;B.2&nbsp;Additions between versions</a></li>
</ul>
</div>
<div class="sect depth2" id="sB.1">
<h2 class="sect">&sect;B.1&nbsp;Paragraphs changed between versions<a class="img" href="sB.html#sB.1"
title="PermaLink to &sect;B.1&nbsp;Paragraphs changed between versions"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;B</a></span></h2>
<div class="subsect depth3" id="sB.1.1">
<h4 class="subsect">(1)&nbsp;<span class="title">Between OTJLD 1.0 and OTJLD 1.1</span><a class="img" href="sB.html#sB.1.1"
title="PermaLink to (1)&nbsp;Between OTJLD 1.0 and OTJLD 1.1"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<ul>
<li><a href="s3.html#s3.2.a" title="&sect;3.2.(a)&nbsp;with clause" class="sect">&sect;3.2.(a)</a> :
<strong>Parameter mappings</strong><p>
Disallow parameter mappings in a role interface.
</p>
</li>
<li><a href="s4.html#s4.5.d" title="&sect;4.5.(d)&nbsp;Typing rules" class="sect">&sect;4.5.(d)</a> :
<strong>Replace bindings</strong><p>
Disallow unsafe use of polymorphism and primitive type conversions.
</p>
</li>
<li><a href="s6.html#s6.1.a"
title="&sect;6.1.(a)&nbsp;Interface to the role registry"
class="sect">&sect;6.1.(a)</a> :
<strong>Signatures of reflective methods</strong><p>
Made two methods generic so that return values can be used without the need of casting.
</p>
</li>
<li><a href="s7.html#s7.2" title="&sect;7.2&nbsp;Confined roles" class="sect">&sect;7.2</a> :
<strong>Confined roles</strong><p>
Improved explanation.
</p>
</li>
</ul>
</div>
<div class="subsect depth3" id="sB.1.2">
<h4 class="subsect">(2)&nbsp;<span class="title">Between OTJLD 1.1 and OTJLD 1.2</span><a class="img" href="sB.html#sB.1.2"
title="PermaLink to (2)&nbsp;Between OTJLD 1.1 and OTJLD 1.2"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<ul>
<li><a href="s1.html#s1.2.1.e" title="&sect;1.2.1.(e)&nbsp;Role features"
class="sect">&sect;1.2.1.(e)</a>:
<strong>Visibility of role features</strong><p>
Clarification has been added that a role can always access all the
features that its enclosing team has access to.
</p>
</li>
<li><a href="s2.html#s2.1.2.e"
title="&sect;2.1.2.(e)&nbsp;No free type parameters"
class="sect">&sect;2.1.2.(e)</a>:
<strong>Generic roles/bases</strong><p>
Relaxed the rules about generic bound roles. This change also subsumes what previously was a specific restriction in
<a href="s4.html#s4.1.b"
title="&sect;4.1.(b)&nbsp;Prerequisite: Class binding"
class="sect">&sect;4.1.(b)</a>.
</p>
</li>
<li><a href="s3.html#s3.1.i" title="&sect;3.1.(i)&nbsp;Shorthand definition"
class="sect">&sect;3.1.(i)</a> and <a href="s3.html#s3.5.f" title="&sect;3.5.(f)&nbsp;Shorthand definition"
class="sect">&sect;3.5.(f)</a>:
<strong>Visibility of shorthand callout</strong><p>
A role method defined by a shorthand callout binding can now specify a visibility modifier
(see also <a href="sA.html#sA.3.2" title="&sect;A.3.2&nbsp;CalloutBinding" class="sect">&sect;A.3.2</a>),
otherwise it inherits the visibility modifier of it's bound base method/field.
</p>
</li>
<li><a href="s3.html#s3.1.j" title="&sect;3.1.(j)&nbsp;Inferred callout"
class="sect">&sect;3.1.(j)</a> and <a href="s3.html#s3.5.h" title="&sect;3.5.(h)&nbsp;Inferred callout"
class="sect">&sect;3.5.(h)</a>:
<strong>Visibility of inferred callout</strong><p>
Role methods inferred as a callout binding are either <code>public</code>
(inferred via interface) or <code>private</code> inferred from
self call / field access.
</p>
</li>
<li><a href="s3.html#s3.5.h" title="&sect;3.5.(h)&nbsp;Inferred callout"
class="sect">&sect;3.5.(h)</a>:
<strong>No explicit use of inferred callout to field</strong><p>
Clarification has been added that an accessor method generated for an inferred callout to field
can not be explicitly invoked.
</p>
</li>
<li><a href="s4.html#s4.1.b"
title="&sect;4.1.(b)&nbsp;Prerequisite: Class binding"
class="sect">&sect;4.1.(b)</a>:
<strong>No callin in generic role</strong><p>
A restriction has been made explicit that a generic role cannot define callin bindings.
</p>
</li>
<li><a href="s4.html#s4.2.d" title="&sect;4.2.(d)&nbsp;Callin methods"
class="sect">&sect;4.2.(d)</a> :
<strong>Callin methods</strong><p>Slightly rephrased and extended the rule to make explicit that a callin method can
indeed be intercepted using a second level callin binding.
</p>
</li>
<li><a href="s6.html#s6.1.a"
title="&sect;6.1.(a)&nbsp;Interface to the role registry"
class="sect">&sect;6.1.(a)</a> :
<strong>Reflective methods <code>getAllRoles</code></strong><p>
More precision: answer only <em>bound</em> roles.
</p>
</li>
</ul>
</div>
<div class="subsect depth3" id="sB.1.3">
<h4 class="subsect">(3)&nbsp;<span class="title">Between OTJLD 1.2 and OTJLD 1.3</span><a class="img" href="sB.html#sB.1.3"
title="PermaLink to (3)&nbsp;Between OTJLD 1.2 and OTJLD 1.3"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<ul>
<li><a href="s1.html#s1.2.4.c" title="&sect;1.2.4.(c)&nbsp;Class literal"
class="sect">&sect;1.2.4.(c)</a> :
<strong>Syntax for role class literals</strong><p>Previously, the syntax <code>R&lt;@t&gt;.class</code> was not supported.
This restriction has been removed.
</p>
</li>
<li><a href="s1.html#s1.3"
title="&sect;1.3&nbsp;Acquisition and implicit inheritance of role classes"
class="sect">&sect;1.3</a> :
<strong>Teams extending non-team classes</strong><p>Previously, <code>org.objectteams.Team</code> was the super class of all team classes.
As a consequence a team could not extend a non-team class.
This restriction has been removed by introducing a new super-type of all teams,
the interface <code>org.objectteams.ITeam</code>.
This change also affects some paragraphs in <a href="s6.html" title="&sect;6&nbsp;Object Teams API" class="sect">&sect;6</a> as members
have been moved to the new interface.
</p>
</li>
<li><a href="s4.html#s4.4.c"
title="&sect;4.4.(c)&nbsp;Mapping the result of a base method"
class="sect">&sect;4.4.(c)</a> :
<strong>Further restrict result mapping in after callin bindings</strong><p>Clarify that <code>after</code> callin bindings cannot use the <code>-&gt;</code>
token to map a result value.
</p>
</li>
<li><a href="s4.html#s4.8.a" title="&sect;4.8.(a)&nbsp;Precedence declaration"
class="sect">&sect;4.8.(a)</a> :
<strong>Precedence declarations affecting <code>after</code> callin bindings.</strong><p>While previously the effect of precedence declarations was underspecified it has been
defined that the order of elements in a precedence declaration affects their <em>priority</em>
similar to <a href="s5.html#s5.1" title="&sect;5.1&nbsp;Effect of team activation"
class="sect">&sect;5.1</a>. This implies that the execution order for
<code>after</code> bindings is now reversed compared to the previous implementation.
In order to visualize this in the program it is now mandatory to mark precedence declarations
for after bindings with the keyword <code>after</code>.
</p>
</li>
<li><a href="s4.html#s4.10" title="&sect;4.10&nbsp;Generic callin bindings"
class="sect">&sect;4.10</a>, <a href="s4.html#s4.10.a" title="&sect;4.10.(a)&nbsp;Fresh type parameter"
class="sect">&sect;4.10.(a)</a> :
<strong>Generic callin bindings</strong><p>Minor changes to give room for new paragraph <a href="s4.html#s4.10.e"
title="&sect;4.10.(e)&nbsp;Propagating type parameters"
class="sect">&sect;4.10.(e)</a>.
</p>
</li>
<li><a href="s5.html#s5.4.1.a" title="&sect;5.4.1.(a)&nbsp;Method binding guards"
class="sect">&sect;5.4.1.(a)</a> :
<strong>Scope of regular binding guard</strong><p>Removed an erroneous sentence about the special identifier <code>result</code> in a regular method binding guard.
Since parameter mappings are applied before evaluating the guard, the result value can be accessed through
a result mapping (<a href="s4.html#s4.4.c"
title="&sect;4.4.(c)&nbsp;Mapping the result of a base method"
class="sect">&sect;4.4.(c)</a>). Furthermore, the sentence actually confused
base and role sides.
</p>
</li>
<li><a href="sA.html#sA.3.2" title="&sect;A.3.2&nbsp;CalloutBinding" class="sect">&sect;A.3.2</a>, <a href="sA.html#sA.3.3" title="&sect;A.3.3&nbsp;Callin binding" class="sect">&sect;A.3.3</a> :
<strong>Syntax: generic method bindings</strong><p>The location of possible type parameters in a method binding has been made explicit.</p>
</li>
</ul>
</div>
</div>
<div class="sect depth2" id="sB.2">
<h2 class="sect">&sect;B.2&nbsp;Additions between versions<a class="img" href="sB.html#sB.2"
title="PermaLink to &sect;B.2&nbsp;Additions between versions"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;B</a></span></h2>
<div class="subsect depth3" id="sB.2.1">
<h4 class="subsect">(1)&nbsp;<span class="title">Between OTJLD 1.0 and OTJLD 1.1</span><a class="img" href="sB.html#sB.2.1"
title="PermaLink to (1)&nbsp;Between OTJLD 1.0 and OTJLD 1.1"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<ul>
<li><a href="s1.html#s1.2.4.c" title="&sect;1.2.4.(c)&nbsp;Class literal"
class="sect">&sect;1.2.4.(c)</a>:
<strong>Role class literal</strong><p>
Made existing feature explicit and introduce new qualified class literal for externalized roles.
</p>
</li>
<li><a href="s3.html#s3.1.j" title="&sect;3.1.(j)&nbsp;Inferred callout"
class="sect">&sect;3.1.(j)</a> and <a href="s3.html#s3.5.h" title="&sect;3.5.(h)&nbsp;Inferred callout"
class="sect">&sect;3.5.(h)</a> :
<strong>Inferred callout</strong><p>
New feature.
</p>
</li>
<li><a href="s4.html#s4.6.a"
title="&sect;4.6.(a)&nbsp;Private methods from super classes"
class="sect">&sect;4.6.(a)</a> :
<strong>Callin-binding private methods from super classes</strong><p>
Added a necessary restriction.
</p>
</li>
<li><a href="s4.html#s4.9" title="&sect;4.9&nbsp;Callin inheritance" class="sect">&sect;4.9</a> :
<strong>Callin inheritance</strong><p>
Clarified issues that where under-specified or insufficiently explained, specifically:
</p>
<ul>
<li>Effect of callin bindings on inherited or overridden base methods
(<a href="s4.html#s4.9.1" title="&sect;4.9.1&nbsp;Base side inheritance"
class="sect">&sect;4.9.1</a>).
</li>
<li>Interplay of callin bindings and base methods with covariant return types
(<a href="s4.html#s4.9.3" title="&sect;4.9.3&nbsp;Covariant return types"
class="sect">&sect;4.9.3</a>)
</li>
</ul>
</li>
<li><a href="s4.html#s4.10" title="&sect;4.10&nbsp;Generic callin bindings"
class="sect">&sect;4.10</a>:
<strong>Generic replace bindings</strong><p>
Reconcile type safety of replace bindings as introduced in <a href="s4.html#s4.5.d" title="&sect;4.5.(d)&nbsp;Typing rules" class="sect">&sect;4.5.(d)</a>
with desirable flexibility by using type parameters.
</p>
</li>
<li><a href="s7.html#s7.2.b" title="&sect;7.2.(b)&nbsp;Arrays of Confined"
class="sect">&sect;7.2.(b)</a> :
<strong>Arrays of Confined</strong><p>
Added a necessary restriction.
</p>
</li>
</ul>
</div>
<div class="subsect depth3" id="sB.2.2">
<h4 class="subsect">(2)&nbsp;<span class="title">Between OTJLD 1.1 and OTJLD 1.2</span><a class="img" href="sB.html#sB.2.2"
title="PermaLink to (2)&nbsp;Between OTJLD 1.1 and OTJLD 1.2"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<ul>
<li><a href="s1.html#s1.2.2.h" title="&sect;1.2.2.(h)&nbsp;Externalized creation"
class="sect">&sect;1.2.2.(h)</a> :
<strong>Externalized creation</strong><p>Added alternative syntax using value parameter and changed title.</p>
</li>
<li><a href="s1.html#s1.2.5.f" title="&sect;1.2.5.(f)&nbsp;Imports in role files"
class="sect">&sect;1.2.5.(f)</a> :
<strong>Imports in role files</strong><p>Added a missing rule defining the effect of imports in role files.</p>
</li>
<li><a href="s1.html#s1.3.1.c"
title="&sect;1.3.1.(c)&nbsp;Overriding and implicit inheritance"
class="sect">&sect;1.3.1.(c)</a> :
<strong>@Override annotation for roles</strong><p>The regular <code>@Override</code> annotation (Java &ge;5) has been extended to apply to role classes, too.
</p>
</li>
<li><a href="s1.html#s1.3.1.k" title="&sect;1.3.1.(k)&nbsp;Covariant return types"
class="sect">&sect;1.3.1.(k)</a> :
<strong>Covariant return types</strong><p>Necessary constraint for covariant return types in the presence of both implicit and explicit inheritance.
</p>
</li>
<li><a href="s2.html#s2.1.2.c"
title="&sect;2.1.2.(c)&nbsp;Base class decapsulation"
class="sect">&sect;2.1.2.(c)</a> :
<strong>Binding to final base class</strong><p>It has been added that binding to a final base class is now considered as decapsulation, too.
</p>
</li>
<li><a href="s2.html#s2.2.f" title="&sect;2.2.(f)&nbsp;Ambiguous lowering"
class="sect">&sect;2.2.(f)</a> :
<strong>Ambiguous lowering</strong><p>A diagnostic has been added to detect situations where lowering might be intended
but fails because the declared type is <code>java.lang.Object</code>,
which makes a potential lowering translation unnecessary and thus ambiguous.
</p>
</li>
<li><a href="s2.html#s2.3.2.e"
title="&sect;2.3.2.(e)&nbsp;Generic declared lifting"
class="sect">&sect;2.3.2.(e)</a> :
<strong>Generic declared lifting</strong><p>Support passing unrelated base types into the same method with declared lifting.
</p>
</li>
<li><a href="s2.html#s2.6.g"
title="&sect;2.6.(g)&nbsp;Decapsulation via base reference"
class="sect">&sect;2.6.(g)</a> :
<strong>Decapsulation via base reference</strong><p>Extended applicability of decapsulation to two more positions.
</p>
</li>
<li><a href="s4.html#s4.3.f" title="&sect;4.3.(f)&nbsp;Base super calls"
class="sect">&sect;4.3.(f)</a> :
<strong>Base super call</strong><p>Support base calls directly to the super version of the bound base method,
thus bypassing both the exact bound base method and also any further callins
relating to this base method or its super version.
</p>
</li>
<li><a href="s5.html#s5.4.b" title="&sect;5.4.(b)&nbsp;No side effects"
class="sect">&sect;5.4.(b)</a> :
<strong>Side-effects in guard predicates</strong><p>Migrate previous note about a future feature to a regular paragraph.</p>
</li>
<li><a href="s5.html#s5.4.c" title="&sect;5.4.(c)&nbsp;Exceptions" class="sect">&sect;5.4.(c)</a> :
<strong>Exceptions in guard predicates</strong><p>Clarify the effect of exceptions thrown from a guard predicate.</p>
</li>
<li><a href="s6.html#s6.2.d" title="&sect;6.2.(d)&nbsp;Exceptions" class="sect">&sect;6.2.(d)</a> :
<strong>LiftingVetoException</strong><p>Added documentation for the mostly internal <code>LiftingVetoException</code> and how
it could actually be used in client code.
</p>
</li>
<li><a href="s6.html#s6.2.e" title="&sect;6.2.(e)&nbsp;Role migration"
class="sect">&sect;6.2.(e)</a> :
<strong>Role migration</strong><p>Added two interfaces to add migration capabilities to a role class.
</p>
</li>
</ul>
</div>
<div class="subsect depth3" id="sB.2.3">
<h4 class="subsect">(3)&nbsp;<span class="title">Between OTJLD 1.2 and OTJLD 1.3</span><a class="img" href="sB.html#sB.2.3"
title="PermaLink to (3)&nbsp;Between OTJLD 1.2 and OTJLD 1.3"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<ul>
<li><a href="s3.html#s3.1.k" title="&sect;3.1.(k)&nbsp;Callout to generic method"
class="sect">&sect;3.1.(k)</a> :
<strong>Callout to generic method</strong><p>Added a rule on how a callout binding may refer to a generic base method.
</p>
</li>
<li><a href="s4.html#s4.1.h" title="&sect;4.1.(h)&nbsp;Method of enclosing class"
class="sect">&sect;4.1.(h)</a> :
<strong>Binding to team methods</strong><p><code>before</code> and <code>after</code> callin bindings can now
bind to methods of an enclosing class, too.
</p>
</li>
<li><a href="s4.html#s4.8.d"
title="&sect;4.8.(d)&nbsp;Multiple precedence statements"
class="sect">&sect;4.8.(d)</a> :
<strong>Order when merging precedence declarations</strong><p>
Clarified how several precedence declarations are merged, which was underspecified,
because the C3 algorithm needs ordered inputs, but this order was not specified.
</p>
</li>
<li><a href="s4.html#s4.10.e"
title="&sect;4.10.(e)&nbsp;Propagating type parameters"
class="sect">&sect;4.10.(e)</a> :
<strong>Propagating type parameters in callin bindings</strong><p>
In addition to capturing covariant return types, a callin binding
may also declared type parameters in order to propagate genericity
from its base method to the role method.
</p>
</li>
<li><a href="s5.html#s5.3.d"
title="&sect;5.3.(d)&nbsp;Configuring implicit activation"
class="sect">&sect;5.3.(d)</a> :
<strong>Configuring implicit activation</strong><p>Mechanisms have been added for configuring implicit team activation.
The default has been changed to not apply implicit activation.
A corresponding note has also been added to <a href="s5.html#s5.3" title="&sect;5.3&nbsp;Implicit team activation"
class="sect">&sect;5.3</a></p>
</li>
<li><a href="s9.html#s9.2.1.a"
title="&sect;9.2.1.(a)&nbsp;Instance constrained type parameters"
class="sect">&sect;9.2.1.(a)</a> :
<strong>Instance constrained type parameter</strong><p>
Type anchors can now be applied to type parameters, too,
thus expressing a new kind of constraint on the type parameter.
</p>
</li>
</ul>
</div>
</div>
</div>
<table class="nav">
<tr>
<td class="back"><a href="sA.html" rel="prev">&lt;&lt;&nbsp;&sect;A&nbsp;OT/J Syntax</a></td>
<td class="top"><a href="index.html" rel="contents">&uarr;&nbsp;Table of Contents&nbsp;&uarr;</a></td>
<td class="next"></td>
</tr>
</table>
</div>
<div id="footer">
<hr /><a class="w3c img" href="http://jigsaw.w3.org/css-validator/check/referer"
shape="rect"><img src="../images/valid-css2-blue.png" alt="Valid CSS!" height="31" width="88" /></a><a class="w3c img" href="http://validator.w3.org/check?uri=referer" shape="rect"><img src="../images/valid-xhtml10-blue.png" alt="Valid XHTML 1.0 Strict" height="31"
width="88" /></a><address>&copy; Stephan Herrmann, Christine Hundt, Marco Mosconi</address>
OT/J version 1.3 &mdash; last modified: 2010-06-08
</div>
</body>
</html>