Thanks for the info!<div>That&#39;s all the questions I have, for now at least. Feel free to reply with any more tips if you think of any.</div><div><br></div><div>I read over your posts you linked, Carl. They were certainly informative and helpful, thanks. I&#39;ll keep thinking of ways to improve the performance of my test interpreter, but it&#39;s so simple, I don&#39;t think there&#39;s much more that can be done. The shared attribute maps described by that link don&#39;t really apply here.</div>

<div><br></div><div>In any case, I&#39;m satisfied with the speed. It&#39;s still beaten by a BF to C translator combined with gcc -O2 though, that&#39;d be a tough case to beat. =)</div><div><br></div><div>-Andrew<br><div>

<div><br><div class="gmail_quote">On Tue, Mar 29, 2011 at 5:33 AM, Armin Rigo <span dir="ltr">&lt;<a href="mailto:arigo@tunes.org">arigo@tunes.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Hi Andrew,<br>
<div class="im"><br>
On Mon, Mar 28, 2011 at 7:21 PM, Andrew Brown &lt;<a href="mailto:brownan@gmail.com">brownan@gmail.com</a>&gt; wrote:<br>
&gt; When the optimizer encounters a &quot;pure&quot; function, it must compare the objects<br>
</div><div class="im">&gt; &quot;promote - promote the argument from a variable into a constant&quot;. Could this<br>
&gt; be an appropriate alternate to the @purefunction solution? Or, I&#39;m guessing,<br>
&gt; does it just mean the name bracket_map won&#39;t change bindings, but does not<br>
&gt; impose a restriction on mutating the dictionary?<br>
<br>
</div>One point of view on &#39;promote&#39; is to mean &quot;this variable was red, but<br>
now turn it green (i.e. make it constant)&quot;.  It has no effect on a<br>
variable that is already green (= a constant).<br>
<br>
We have no support for considering that a dict is immutable, so it<br>
needs to be done with @purefunction.  But to be effective,<br>
@purefunction must receive constant arguments; so in one or two places<br>
in the source code of PyPy you will find a construction like:<br>
<br>
   x = hint(x, promote=True)   # turn x into a constant<br>
   some_pure_function(x)     # call this pure function on x<br>
<br>
Indeed, Carl Friedrich&#39;s blog series explains it nicely, but it should<br>
also mention that when the hints described in the blog are applied not<br>
to integer but to pointers, they apply only to the pointers<br>
themselves, not on the fields of the objects they point to.<br>
<br>
<br>
A bientôt,<br>
<font color="#888888"><br>
Armin.<br>
</font></blockquote></div><br></div></div></div>