Another link that is interesting when you start to think about bytecode transformations:<br><br><a href="http://www.voidspace.org.uk/python/articles/code_blocks.shtml">http://www.voidspace.org.uk/python/articles/code_blocks.shtml</a><br>
<br>Cheers,<br><br>Brian<br><br><div class="gmail_quote">On Tue, Sep 8, 2009 at 8:09 PM, Brian Granger <span dir="ltr">&lt;<a href="http://ellisonbg.net">ellisonbg.net</a>@<a href="http://gmail.com">gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br><br><div class="gmail_quote"><div class="im">On Tue, Sep 8, 2009 at 1:34 PM, Fernando Perez <span dir="ltr">&lt;<a href="http://fperez.net" target="_blank">fperez.net</a>@<a href="http://gmail.com" target="_blank">gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div>On Tue, Sep 8, 2009 at 10:23 AM, Brian Granger &lt;<a href="http://ellisonbg.net" target="_blank">ellisonbg.net</a>@<a href="http://gmail.com" target="_blank">gmail.com</a>&gt; wrote:<br>
&gt; My only complaint is that is a bit unexpected that this actually declares<br>
&gt; and *calls* the function!<br>
<br>
</div>Yes, it is more than a bit surprising at first :)  In fact, I remember<br>
that bothered me about @interact when I first saw it, and that was<br>
partly why I tried to make things work using &#39;with&#39;.  But it&#39;s now<br>
clear to me that we need  a *real* scope for these ideas, and for now,<br>
&#39;def&#39; is the only way to get a scope we have, so that&#39;s what we&#39;ll be<br>
using.<br>
<br>
For reference, the stuff I was trying to implement from the Ars review<br>
is below in the original Objective C code, plus my own &#39;pythonization&#39;<br>
of it, first in serial mode, then using &#39;with&#39;, then with @decos.<br>
<br>
This is the page in the review where John Siracusa explains the new<br>
Block syntax that Apple introduced to C:<br>
<br>
<a href="http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/10" target="_blank">http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/10</a><br>
<br>
I think it&#39;s really cool, I do hope it makes its way into the language itself.<br>
<br></blockquote></div><div><br>Yes, this is a very nice article.  It is very nice to see Apple bringing the &quot;iPod&quot; <br>style of thinking (stepping back and really thinking about something) to <br>parallelism and languages. <br>

<br></div><div class="im"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
def analyzeDocument():<br>
    &quot;&quot;&quot;A decorator-based version.<br>
<br>
    This could in principle work just fine today.  All one would need to do<br>
    would be to write Python decorators for Apple GCD.  As long as the code<br>
    being run released the GIL, it would work fine. &quot;&quot;&quot;<br>
<br>
    @dispatch_async(dispatch_get_global_queue(0, 0))<br>
    def outer():<br>
        stats = myDoc.analyze()<br>
        @dispatch_async(dispatch_get_main_queue())<br>
        def inner():<br>
            myModel.setDict(stats)<br>
            myStatsView.setNeedsDisplay(YES)<br>
            stats.release()<br>
</blockquote></div></div><br>OK, just a few comments before I loose a week or two thinking about this....<br><br>* While multiprocessing is interesting, by sticking with the fork model<br>of getting variables to child execution contexts, it really misses the greater<br>

possibilities that proper scoping gives you.  With these GCD style constructs<br>you can do arbitrarily deep nestings of scopes and carefully control what variables<br>from the parent scope are seen by children scopes.  This is exactly like Cilk and<br>

is a fantastic way of doing things.<br><br>* Damn the GIL!  If we didn&#39;t have the GIL, we could write a simple version of<br>dispatch_async that used a simple thread pool we would be off to the races.<br><br>* But, we can implement this on top of IPython.kernel and get many of the same<br>

things.  The only real downside is the performance hit of using processes rather<br>than threads.<br><br>Cheers,<br><font color="#888888"><br>Brian<br><br>
</font></blockquote></div><br>