Matthew,<br><br>These look like good things for me to use for efficiency in the science collection. Will these these be in the upcoming 4.2.2 release?<br><br>I assume that if I use these and introduce a dependency on 4.2.2 or later that I should also bump the version number of the science collection in PLaneT - even if the interface remains the same. Does that make sense?<br>
<br>I guess the term &#39;experiment&#39; here confuses me. Is this something that might go away again? Should I wait until everyone is comfortable with the results?<br><br>Doug<br><br><div class="gmail_quote">On Sun, Sep 6, 2009 at 12:27 PM, Matthew Flatt <span dir="ltr">&lt;<a href="mailto:mflatt@cs.utah.edu">mflatt@cs.utah.edu</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;">Version 4.2.1.8 (now in SVN) starts an experiment with<br>
performance-oriented unsafe operations.<br>
<br>
The new `scheme/unsafe/ops&#39; library provides operations such as<br>
`unsafe-vector-ref&#39; and `unsafe-fl+&#39; (for inexact real addition) that<br>
are inlined by the JIT without contract checks. If a call violates the<br>
contract of a function from `scheme/unsafe/ops&#39;, arbitrarily bad<br>
things can happen. As long as contracts are satisfied, however,<br>
performance should be a little better than with corresponding safe<br>
operations.<br>
<br>
As part of the experiment, the expansion of `for&#39; with `in-range&#39; and<br>
`in-vector&#39; now uses unsafe operations (in a safe way). For example,<br>
`in-vector&#39; uses `unsafe-vector-ref&#39; as well as a fixnum comparison<br>
for detecting when it has reached the end of a vector; it also uses<br>
unsafe fixnum arithmetic to increment the index as long as the step is<br>
1 or -1 (in which case no overflow can occur during the<br>
increment). These improvements make a 10-20% difference in a tight<br>
loop over a vector.<br>
<br>
Future possible directions include making the JIT specialize<br>
combinations of inexact operations to avoid boxing intermediate<br>
results.<br>
<br>
The exports of `scheme/unsafe/ops&#39; are protected, so that a code<br>
inspector can prevent access to unsafe operations by untrusted code.<br>
<br>
_________________________________________________<br>
  For list-related administrative tasks:<br>
  <a href="http://list.cs.brown.edu/mailman/listinfo/plt-dev" target="_blank">http://list.cs.brown.edu/mailman/listinfo/plt-dev</a><br>
</blockquote></div><br>