Is there a way to write normal scheme code, then (once check-proofed) change a value somewhere and make it use all the unsafe ops, preferably even at DrScheme core?<br>I wonder how much faster the code could get.<br><br>(Just thinking about a possible trade-off: a macro that switches between safe and unsafe locally.)<br>

<br>Laurent<br><br><div class="gmail_quote">On Wed, Nov 11, 2009 at 02:06, Robby Findler <span dir="ltr">&lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.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;">

Those ones don&#39;t work on everything (fixnums, for example, altho that<br>
may be the only thing) and probably the guarantees of the behavior of<br>
those is less. And, of course, they are unsafe. :)<br>
<br>
Robby<br>
<br>
On Tue, Nov 10, 2009 at 5:57 PM, Doug Williams<br>
<div><div></div><div class="h5">&lt;<a href="mailto:m.douglas.williams@gmail.com">m.douglas.williams@gmail.com</a>&gt; wrote:<br>
&gt; Oh, there is an unsafe-vector-set! - and unsafe-struct-ref and set!.<br>
&gt;<br>
&gt; On Tue, Nov 10, 2009 at 4:51 PM, Doug Williams<br>
&gt; &lt;<a href="mailto:m.douglas.williams@gmail.com">m.douglas.williams@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Instead of the &#39;everything is a struct&#39; view, you could also use an<br>
&gt;&gt; &#39;everything is a vector view&#39; and with unsafe-vector-ref take things apart -<br>
&gt;&gt; even when they are opaque.<br>
&gt;&gt;<br>
&gt;&gt; (require scheme/unsafe/ops)<br>
&gt;&gt;<br>
&gt;&gt; (define-struct s (a b c))<br>
&gt;&gt;<br>
&gt;&gt; (define s1 (make-s 1 3 5))<br>
&gt;&gt;<br>
&gt;&gt; s1 -&gt; #&lt;s&gt;<br>
&gt;&gt; (unsafe-vector-ref s1 0) -&gt; #&lt;struct-type:s&gt;<br>
&gt;&gt; (unsafe-vector-ref s1 1) -&gt; 1<br>
&gt;&gt; (unsafe-vector-ref s1 2) -&gt; 3<br>
&gt;&gt; (unsafe-vector-ref s1 3) -&gt; 5<br>
&gt;&gt;<br>
&gt;&gt; I assume that as long as I stay within the bounds of the underlying<br>
&gt;&gt; representation (and probably sometimes even if I don&#39;t - negative indices<br>
&gt;&gt; are allowed), unsafe-vector-ref will give gladly me the pieces. At least<br>
&gt;&gt; there is no unsafe-vector-set!<br>
&gt;&gt;<br>
&gt;&gt; Doug<br>
&gt;&gt;<br>
&gt;&gt; On Tue, Nov 10, 2009 at 11:29 AM, Doug Williams<br>
&gt;&gt; &lt;<a href="mailto:m.douglas.williams@gmail.com">m.douglas.williams@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Sounds good. I was just thinking that a lower level implementation could<br>
&gt;&gt;&gt; avoid the need to create a vector just to get the variant. But for my code<br>
&gt;&gt;&gt; it&#39;s no big deal.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Tue, Nov 10, 2009 at 11:21 AM, Robby Findler<br>
&gt;&gt;&gt; &lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Tue, Nov 10, 2009 at 12:18 PM, Doug Williams<br>
&gt;&gt;&gt;&gt; &lt;<a href="mailto:m.douglas.williams@gmail.com">m.douglas.williams@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt; Robby,<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; I am going to add your variant procedure to the describe collection.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Great!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt; Are you<br>
&gt;&gt;&gt;&gt; &gt; happy with the name &#39;variant&#39; and the contract (-&gt; any/c symbol?)?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Yes. (You may want to use substring isntead of regexp-match.)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt; What is<br>
&gt;&gt;&gt;&gt; &gt; the relationship between this and object-name?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Nothing really. object-name is per-object (and not everything has a<br>
&gt;&gt;&gt;&gt; name).<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;  It seems that for actual<br>
&gt;&gt;&gt;&gt; &gt; structs they return the same value. Would it make sense to change<br>
&gt;&gt;&gt;&gt; &gt; object-name to return the same value as variant in those cases where<br>
&gt;&gt;&gt;&gt; &gt; it<br>
&gt;&gt;&gt;&gt; &gt; (i.e., object-name) returns #f? This would trivially make this<br>
&gt;&gt;&gt;&gt; &gt; functionality<br>
&gt;&gt;&gt;&gt; &gt; available in #lang scheme, which seems to be a good thing.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I don&#39;t think that that change is really a good idea at this point.<br>
&gt;&gt;&gt;&gt; Probably would break lots of stuff.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Robby<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt; Doug<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; On Tue, Nov 10, 2009 at 7:43 AM, Robby Findler<br>
&gt;&gt;&gt;&gt; &gt; &lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; On Tue, Nov 10, 2009 at 8:41 AM, Dave Herman &lt;<a href="mailto:dherman@ccs.neu.edu">dherman@ccs.neu.edu</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; This probably doesn&#39;t help Doug, but here is another way to define<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; the<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;&gt; function linked above:<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; That&#39;s neat, thanks! Has struct-&gt;vector always worked on<br>
&gt;&gt;&gt;&gt; &gt;&gt; &gt; non-structs?<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; I&#39;m not sure about always, but at some point a while ago, Matthew<br>
&gt;&gt;&gt;&gt; &gt;&gt; decided that all values are structs (in the sense that you could have<br>
&gt;&gt;&gt;&gt; &gt;&gt; implemented everything with structs and scope, etc even if some of<br>
&gt;&gt;&gt;&gt; &gt;&gt; them are implemented in C) and adapted the primitives to make them<br>
&gt;&gt;&gt;&gt; &gt;&gt; behave accordingly.<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; Robby<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
</div></div><div><div></div><div class="h5">_________________________________________________<br>
  For list-related administrative tasks:<br>
  <a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme" target="_blank">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>
</div></div></blockquote></div><br>