The main problem I&#39;m having is that the code has been around awhile and hasn&#39;t been fully converted to Racket - in particular it uses the scheme language (instead of the racket language) and uses (require (lib contract)). All of that seems to mean that I can&#39;t just add #:flat? #t - I get a message that vector-of doesn&#39;t accept keyword arguments. And, the case-&gt; contracts use -&gt;r, which apparently isn&#39;t supported anymore. All that means that I can&#39;t just switch to the racket language and new contracts.  So, I have some conversion work to do.<br>
<br>On the case-&gt; problem, it seems it no longer supports anything but -&gt;.  Is there something I am missing there?<br><br>Doug<br><br><div class="gmail_quote">On Sun, Oct 24, 2010 at 8:53 AM, 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="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">At Fri, 22 Oct 2010 21:31:43 -0600, Doug Williams wrote:<br>
&gt; Matthew, would it make more sense to have unsafe-vector-ref (and related<br>
&gt; functions) be the more general function and unsafe-vector*-ref be the one<br>
&gt; that doesn&#39;t work  on chaperoned vectors? That is just swap the definitions.<br>
&gt; That way user code that is already using unsafe-vector-ref (etc) will<br>
&gt; continue to work.<br>
&gt;<br>
&gt; As it stands, existing code that has unsafe-vector-ref (etc) will often<br>
&gt; still work (in the sense of not getting any error or crashing), but just<br>
&gt; gives the wrong results. For example, if you run science-test.ss from the<br>
&gt; examples directory in the science collection, there are no errors. But, some<br>
&gt; of the answers are wrong - for example the very first one, the gamma<br>
&gt; function. [In other cases, like the FFT routines, there are either run-time<br>
&gt; errors or crashes.]<br>
&gt;<br>
&gt; Anyway, if it isn&#39;t too late, I think swapping the definitions would make<br>
&gt; more sense and be safer.<br>
<br>
</div>I&#39;ve gone back and forth. I agree that it would be safer, but<br>
`vector-ref&#39; is safer still, and I think of the job of `unsafe-X&#39; as<br>
providing the lowest possible overhead over `X&#39;. It seems nicer to me<br>
to have `*&#39; mean &quot;somewhere in between&quot; rather than &quot;even faster&quot;. Then<br>
again, it seems bad that `vector?&#39; (plus index bounds) isn&#39;t enough to<br>
guard `unsafe-vector-ref&#39;.<br>
<br>
Overall, at this point in the release cycle, I&#39;m inclined to leave<br>
things where they are (i.e., it may be too late). But let&#39;s hear more<br>
opinions from those who use `unsafe-vector-ref&#39; and<br>
unsafe-vector*-ref&#39;.<br>
<br>
</blockquote></div><br>