I think one reason that we don&#39;t have it enabled in the build by default is that having it enabled adds some performance overhead, even if you aren&#39;t using futures in your program.  With futures enabled, the JIT compiler doesn&#39;t emit direct calls to unsafe primitives but instead emits calls to wrapper functions.  These wrappers basically exist to check whether we&#39;re attempting to invoke function X on the right thread, and if not, signal the runtime and block.  So for every primitive invocation in a program, with futures enabled, this essentially becomes two function invocations.  This hurts you more on some platforms than others, IIRC.  <br>
<br>I&#39;m not sure whose decision it is to make futures enabled by default...is this generally done by consensus?<br><br>-James<br><br><div class="gmail_quote">On Mon, Dec 7, 2009 at 11:43 AM, Jay McCarthy <span dir="ltr">&lt;<a href="mailto:jay.mccarthy@gmail.com">jay.mccarthy@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;">Would you like us to run some tests on many platforms and machines?<br>
<br>
What is the strategy for enabling it by default? (If it isn&#39;t ready,<br>
then what should we do to help? If it is, then let it rip!)<br>
<br>
Jay<br>
<div><div></div><div class="h5"><br>
On Mon, Dec 7, 2009 at 10:31 AM, James Swaine &lt;<a href="mailto:james.swaine@gmail.com">james.swaine@gmail.com</a>&gt; wrote:<br>
&gt; I&#39;m pleased to announce the initial release of parallel futures, a<br>
&gt; construct for fine-grained parallelism in PLT. Roughly speaking, a<br>
&gt; programmer passes a thunk to &#39;future&#39; and it gets run in parallel.<br>
&gt; That &quot;roughly&quot; holds a few gotchas, partly because we&#39;re just getting<br>
&gt; started and partly due to the technique we&#39;re using. See the<br>
&gt; documentation for more details:<br>
&gt;<br>
&gt;  <a href="http://pre.plt-scheme.org/docs/html/futures/" target="_blank">http://pre.plt-scheme.org/docs/html/futures/</a><br>
&gt;<br>
&gt; If you&#39;ve got a multicore machine where you can&#39;t keep the cores busy<br>
&gt; or your office/machine room is a bit cold, try this program:<br>
&gt;<br>
&gt; #lang scheme<br>
&gt; (require scheme/futures)<br>
&gt; (define (loop) (loop))<br>
&gt; (for-each<br>
&gt;  touch<br>
&gt;  (for/list ([i (in-range 0 (processor-count))])<br>
&gt;   (future loop)))<br>
&gt;<br>
&gt; Note that you have to build mzscheme with futures; it isn&#39;t enabled by<br>
&gt; default, but see the docs above for how to do that. Beyond the above,<br>
&gt; we&#39;ve also gotten a few parallel kernels going and are seeing good<br>
&gt; scalability up to 8 cores (the biggest machine we have around for the<br>
&gt; time being).<br>
&gt;<br>
&gt; Many thanks to Matthew, Robby, Kevin, and Peter Dinda, without whom this<br>
&gt; release wouldn&#39;t have been possible.<br>
&gt;<br>
&gt; Feedback welcome!<br>
&gt;<br>
&gt; James<br>
</div></div>&gt; _________________________________________________<br>
&gt;  For list-related administrative tasks:<br>
&gt;  <a href="http://list.cs.brown.edu/mailman/listinfo/plt-dev" target="_blank">http://list.cs.brown.edu/mailman/listinfo/plt-dev</a><br>
&gt;<br>
&gt;<br>
<font color="#888888"><br>
<br>
<br>
--<br>
Jay McCarthy &lt;<a href="mailto:jay@cs.byu.edu">jay@cs.byu.edu</a>&gt;<br>
Assistant Professor / Brigham Young University<br>
<a href="http://teammccarthy.org/jay" target="_blank">http://teammccarthy.org/jay</a><br>
<br>
&quot;The glory of God is Intelligence&quot; - D&amp;C 93<br>
</font></blockquote></div><br>