<HTML><BODY>(define data (for/list ([x 100000]) x))<br><br>(time (begin0 (void) (run2 data)))<br>(time (begin0 (void) (run1 data)))<br><br>3 times run1, then 3 times run2, then again 3 times run1.<br><br>Results are stable.<br><br>Mon, 16 Jun 2014 08:28:10 +0100 от Matthew Flatt <mflatt@cs.utah.edu>:<br>
<blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;">
        <div id="">
        



    









        
        


        
        
        
        
        

        
        

        
        



<div class="js-helper js-readmsg-msg">
        <style type="text/css"></style>
        <div>
                <base target="_self" href="https://e.mail.ru/">
                
                        <div id="style_14029036990000000973_BODY">I'd expect them to run nearly the same due to inlining and constant<br>
propagation. If I save your program to "ex.rkt" and use<br>
<br>
 raco make ex.rkt<br>
 raco decompile ex.rkt<br>
<br>
the the output looks almost the same for both functions.<br>
<br>
There's a lot of allocation in these programs, of course, and that's<br>
going to make benchmarking relatively tricky. How are you timing the<br>
functions, and does it matter whether you `run1` or `run2` first?<br>
<br>
At Mon, 16 Jun 2014 11:16:25 +0400, Roman Klochkov wrote:<br>
>  Strange.<br>
> <br>
> #lang racket<br>
> (define (test1 x y)<br>
>   (if x<br>
>     (+ y 1)<br>
>     (- y 1)))<br>
> (define (test2 x)<br>
>   (if x<br>
>     (λ (y) (+ y 1))<br>
>     (λ (y) (- y 1))))<br>
> (define (run1 data)<br>
>   (map (λ (x) (test1 #t x)) data))<br>
> (define (run2 data)<br>
>   (map (λ (x) ((test2 #t) x)) data)) I expect, that run2 should be faster, <br>
> because (test2 #t) returns const (lambda (y) (+ y 1)) and shouldn't be checked <br>
> on every iteration.<br>
> <br>
> But in reality (time ...) gives 219 for run1 and 212 for run2. run2 is 1.5 <br>
> times slower!<br>
> <br>
> Why so?<br>
> <br>
> <br>
> -- <br>
> Roman Klochkov____________________<br>
>   Racket Users list:<br>
>   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div>
                        
                
                <base target="_self" href="https://e.mail.ru/">
        </div>

        
</div>


</div>
</blockquote>
<br>
<br>-- <br>Roman Klochkov<br></BODY></HTML>