<p><br>
On Aug 13, 2011 1:35 PM, &quot;Carl Eastlund&quot; &lt;<a href="mailto:cce@ccs.neu.edu">cce@ccs.neu.edu</a>&gt; wrote:<br>
&gt;<br>
&gt; On Sat, Aug 13, 2011 at 1:26 PM, Matthias Felleisen<br>
&gt; &lt;<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>&gt; wrote:<br>
&gt; &gt;<br>
&gt; &gt; On Aug 13, 2011, at 12:58 PM, Sam Tobin-Hochstadt wrote:<br>
&gt; &gt;<br>
&gt; &gt;&gt; On Sat, Aug 13, 2011 at 12:51 PM, Eli Barzilay &lt;<a href="mailto:eli@barzilay.org">eli@barzilay.org</a>&gt; wrote:<br>
&gt; &gt;&gt;&gt; 10 minutes ago, Sam Tobin-Hochstadt wrote:<br>
&gt; &gt;&gt;&gt;&gt; `match&#39; also currently adds a syntax property to help the Typed<br>
&gt; &gt;&gt;&gt;&gt; Racket type checker understand the expansion.  Like &#39;disappeared-use<br>
&gt; &gt;&gt;&gt;&gt; for Check Syntax, this property is in theory semantically<br>
&gt; &gt;&gt;&gt;&gt; independent of Typed Racket, but only used there.<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; No, when your property is called `typechecker:called-in-tail-position&#39;<br>
&gt; &gt;&gt;&gt; it is not independent of a &quot;typecheker&quot;.  It will be, if it gets a<br>
&gt; &gt;&gt;&gt; generic name, and gets documented which turns it from a backdoor for a<br>
&gt; &gt;&gt;&gt; backward dependency to a known API.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; The *semantic* independence of the property and the typechecker<br>
&gt; &gt;&gt; implementation is not determined either by the name of the property or<br>
&gt; &gt;&gt; the documentation.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; There are two levels of semantics here:<br>
&gt; &gt;  -- operational semantics of your module, which makes you correct<br>
&gt; &gt;  -- &#39;in spirit&#39; semantics, which makes Eli correct.<br>
&gt; &gt;<br>
&gt; &gt; I will say that even though I cannot define &#39;in spirit&#39; formally,<br>
&gt; &gt; I am with Eli here.<br>
&gt;<br>
&gt; How about instead of &quot;in spirit&quot;, we focus on program logic.  There is<br>
&gt; no semantic dependence on the typechecker -- Racket can tell what the<br>
&gt; program does without it.  However, programmers cannot read that code<br>
&gt; and know what it is for and whether it is correct without reference to<br>
&gt; the typechecker.  That&#39;s a meaningful dependency.  It makes<br>
&gt; maintaining that line of code 100% dependent on the typechecker.</p>
<p>What I mean by &quot;semantically independent&quot; I mean exactly that your statement is not correct.  The meaning of the property is defined without reference to the type checker.  It means &quot;this let-bound function is probably called in tail position wrt the let.&quot;. This says nothing about types, and can be reasoned about independently.</p>

<p>Sam<br>
</p>