<div dir="ltr"><div><div><div><div><div><div><div><div>On a tangent, if you run your Racket on Linux (like anyone would use anything else :0 ) you can &quot;install&quot; *.rkt files as executables with binfmt. <br><br></div>
Very Short (no validation) Path <br><br></div>1) Create a shell script runracket.rkt in your racket installation bin.  i.e. /usr/local/racket/bin/runracket<br>#! /bin/sh<br><br>racket -tm $1<br><br></div>2) Use your package manager to install binfmt.<br>
<br></div>3) Register .rkt files as executables handled by runracket.  As root:<br><br>a) cd /proc/sys/fs/binfmt_misc/<br></div>b) echo &#39;:RunRacket:E::rkt::/usr/local/racket/bin/runracket:&#39; &gt; register<br><br></div>
4) Have a sherbet.<br><br></div>Then assuming you have a simple helloworld.rkt file with a &quot;main&quot; your Racket file is now just another shell or executable.<br><br>ray@rpr:~$ ./helloworld.rkt <br>Hello there.<br>
<br></div><div>Obviously the above should be made more robust, adjusted be installed on bootup etc, but that is the basic idea.<br><br></div><div>Decent odds a Mac can do this as well.  Better odds Eli has something done along these lines polished to perfection. : )<br>
<br></div><div>To remove the entry echo -1 to the entry.<br><br></div><div>$ echo -1 RunRacket<br></div><div><br><br></div><div><br></div><br><br><br><div><div><div><br><br><div><div><br></div></div></div></div></div></div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 8, 2013 at 8:21 AM, Sean McBeth <span dir="ltr">&lt;<a href="mailto:sean.mcbeth@gmail.com" target="_blank">sean.mcbeth@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Perhaps the EXEs take longer because they are not using a shared image of Racket, thus the OS must load code that is 99% equivalent from two different disk locations.<br>
</div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br>

<div class="gmail_quote">On Wed, May 8, 2013 at 7:55 AM, Manfred Lotz <span dir="ltr">&lt;<a href="mailto:manfred.lotz@arcor.de" target="_blank">manfred.lotz@arcor.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


On Wed, 8 May 2013 07:31:37 -0400<br>
<div><div>Carl Eastlund &lt;<a href="mailto:cce@ccs.neu.edu" target="_blank">cce@ccs.neu.edu</a>&gt; wrote:<br>
<br>
&gt; On Wed, May 8, 2013 at 7:04 AM, Manfred Lotz<br>
&gt; &lt;<a href="mailto:manfred.lotz@arcor.de" target="_blank">manfred.lotz@arcor.de</a>&gt; wrote:<br>
&gt;<br>
&gt; &gt; On Wed, 8 May 2013 06:19:27 -0400<br>
&gt; &gt; Carl Eastlund &lt;<a href="mailto:cce@ccs.neu.edu" target="_blank">cce@ccs.neu.edu</a>&gt; wrote:<br>
&gt; &gt;<br>
&gt; &gt; &gt; I&#39;m seeing similar results on my end; I timed by first running<br>
&gt; &gt; &gt; &quot;raco make&quot; on both files, then timing &quot;racket&quot; on both.  I think<br>
&gt; &gt; &gt; what we&#39;re seeing is a small startup time cost on Typed Racket.<br>
&gt; &gt; &gt; I ran a longer benchmark and Typed Racket edges out untyped<br>
&gt; &gt; &gt; Racket if I run a few million iterations (given this is such a<br>
&gt; &gt; &gt; short computation).  The expressions I used are:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; ;; utest.rkt<br>
&gt; &gt; &gt; (void<br>
&gt; &gt; &gt;   (for/list {[i (in-range (* 10 1000 1000))]}<br>
&gt; &gt; &gt;     (distance<br>
&gt; &gt; &gt;       (pt (+ i 1.2) (+ i 2.1))<br>
&gt; &gt; &gt;       (pt (+ i 4.3) (+ i 5.6)))))<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; and<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; ;; test.rkt<br>
&gt; &gt; &gt; (void<br>
&gt; &gt; &gt;   (for/list: : (Listof Float) {[i (in-range (* 10 1000 1000))]}<br>
&gt; &gt; &gt;     (distance<br>
&gt; &gt; &gt;       (pt (+ i 1.2) (+ i 2.1))<br>
&gt; &gt; &gt;       (pt (+ i 4.3) (+ i 5.6)))))<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I see just under 5 seconds for test.rkt and just over 5 seconds<br>
&gt; &gt; &gt; for utest.rkt.  So there&#39;s a fraction of a second extra startup<br>
&gt; &gt; &gt; time for Typed Racket, but it takes less time for each subsequent<br>
&gt; &gt; &gt; computation, so the difference depends on how much &quot;real&quot; work<br>
&gt; &gt; &gt; you do after startup.  I don&#39;t know what causes that startup<br>
&gt; &gt; &gt; cost, but hopefully this kind of benchmark will be useful to the<br>
&gt; &gt; &gt; Typed Racket maintainers in closing the gap for future versions.<br>
&gt; &gt; &gt; So, thanks for the example, Manfred!<br>
&gt; &gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Hi Carl,<br>
&gt; &gt; This is interesting. If I run it I have around 5 seconds for the<br>
&gt; &gt; typed version and around 4 seconds for the untyped version. My<br>
&gt; &gt; system is a 64bit Linux.<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt; Manfred<br>
&gt; &gt;<br>
&gt;<br>
&gt; What I ran was:<br>
&gt;<br>
&gt;   raco make test.rkt utest.rkt &amp;&amp; time racket test.rkt &amp;&amp; time racket<br>
&gt; utest.rkt<br>
&gt;<br>
&gt; Just to make sure we&#39;re comparing apples to apples, does that give<br>
&gt; you the same results you saw before?<br>
&gt;<br>
&gt;<br>
<br>
</div></div>Yep, I did something different:<br>
<br>
Now going your way I get 3.7 sec for typed and 4.1 sec for untyped. It<br>
is interesting to note that if I do raco exe for both the executables<br>
run longer: 4 sec for typed and 4.7 sec for untyped.<br>
<div><div><br>
<br>
<br>
&gt; &gt; &gt; On Wed, May 8, 2013 at 5:32 AM, Manfred Lotz<br>
&gt; &gt;  &gt; &lt;<a href="mailto:manfred.lotz@arcor.de" target="_blank">manfred.lotz@arcor.de</a>&gt; wrote:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Hi there,<br>
&gt; &gt; &gt; &gt; I did a small test using typed racket.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; This is an example from the documentation:<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; #lang typed/racket<br>
&gt; &gt; &gt; &gt; ;; test.rkt<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; (struct: pt ([x : Float] [y : Float]))<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; (: distance (pt pt -&gt; Float))<br>
&gt; &gt; &gt; &gt; (define (distance p1 p2)<br>
&gt; &gt; &gt; &gt;   (sqrt (+ (sqr (- (pt-x p2) (pt-x p1)))<br>
&gt; &gt; &gt; &gt;            (sqr (- (pt-y p2) (pt-y p1))))))<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; (distance (pt 1.2 2.1) (pt 4.3 5.6))<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; This is the untyped version:<br>
&gt; &gt; &gt; &gt; #lang racket<br>
&gt; &gt; &gt; &gt; ;; utest.rkt<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; (struct pt (x y))<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; (define (distance p1 p2)<br>
&gt; &gt; &gt; &gt;   (sqrt (+ (sqr (- (pt-x p2) (pt-x p1)))<br>
&gt; &gt; &gt; &gt;            (sqr (- (pt-y p2) (pt-y p1))))))<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; (distance (pt 1.2 2.1) (pt 4.3 5.6))<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Now running both:<br>
&gt; &gt; &gt; &gt; time racket test.rkt<br>
&gt; &gt; &gt; &gt; 4.675467891024383<br>
&gt; &gt; &gt; &gt; racket test.rkt  1.24s user 0.08s system 99% cpu 1.333 total<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; time racket utest.rkt<br>
&gt; &gt; &gt; &gt; 4.675467891024383<br>
&gt; &gt; &gt; &gt; racket utest.rkt  0.22s user 0.03s system 99% cpu 0.248 total<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; It seems the typed version needs a lot of time for the type<br>
&gt; &gt; &gt; &gt; checking. The time for time checking could be cut mostly by:<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; raco exe test.rkt<br>
&gt; &gt; &gt; &gt; time ./test<br>
&gt; &gt; &gt; &gt; 4.675467891024383<br>
&gt; &gt; &gt; &gt; ./test  0.49s user 0.03s system 99% cpu 0.531 total<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; But still runtime is more than twice as long. I could get the<br>
&gt; &gt; &gt; &gt; impression that typed racket is generally slower.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Question: Is there any conclusion to be drawn from this (like<br>
&gt; &gt; &gt; &gt; that typed racket is slower than &#39;normal&#39; racket)? Or is my<br>
&gt; &gt; &gt; &gt; test just a bad test?<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; --<br>
&gt; &gt; &gt; &gt; Manfred<br>
&gt; &gt;<br>
&gt;<br>
<br>
<br>
</div></div><div><div>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br></div>
</div></div><br>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br></div>