The difference in performance between the two functions when there are no
contracts (ie, when there are no types anywhere, or when everything is
typed) seems to be just from the extra `zero?` check in `divides?`. Adding
that to your program produced something that runs in about the same time as
your `divisible-by?` (I ran them all in both untyped and typed Racket).

Sam

On Mon, Aug 24, 2015 at 8:40 AM Rickard Andersson <
rickard.m.anders...@gmail.com> wrote:

> Yes, that indeed seems to be the problem. However, even after managing to
> wrap the types properly, using `divides?` still ended up being a bit
> slower. Not dramatically slower, but still noticably and unexpectedly.
>
> As I'm not at all comfortable with Typed Racket I would appreciate if
> someone could show how one would annotate the example minimally to give
> the optimizer enough information to surpass Racket. As of this moment I
> haven't really managed to see any improvement from using Typed Racket. It
> cut down the time `divides?` needed to a few seconds more than Racket.
> Otherwise, it had no effect (on the other example either).
>
> As a point of curiosity; I had to work around the fact that apparently
> there were not enough type annotations by wrapping the `for`s in functions
> and typing them accordingly. Is there a better way to do this?
>
> I'm currently trying to compare some performance between OCaml, C and
> Racket and I'm currently using the aforementioned example.
>
> Here are some timings:
>
> |> time racket divides.rkt; time ./divides_c; time ./divides_ocaml
> 41666666583333333
> racket divides.rkt  7.32s user 0.02s system 100% cpu 7.336 total
> 41666666583333333
> ./divides_c  0.49s user 0.00s system 99% cpu 0.488 total
> 41666666583333333
> ./divides_ocaml  0.75s user 0.00s system 99% cpu
>
> The idea is to see how fast one can make the following:
>
> #lang racket/base
>
> (define (divisible-by? x d)
>    (= (modulo x d)
>       0))
>
> (module+ main
>    (for/sum ([x (in-range 3 500000000)])
>      (if (x . divisible-by? . 3)
>        x
>        0))
>    )
>
> On Mon, 24 Aug 2015, Pierpaolo Bernardi wrote:
>
> > On Mon, Aug 24, 2015 at 1:25 PM, Jens Axel Søgaard
> > <jensa...@soegaard.net> wrote:
> >>  It looks very odd to me.
> >
> > Maybe this is due to calling TR functions from plain Racket?
> >
>
> --
> You received this message because you are subscribed to the Google Groups
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to racket-users+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to