[racket] typed racket slow?

From: Carl Eastlund (cce at ccs.neu.edu)
Date: Wed May 8 06:19:27 EDT 2013

I'm seeing similar results on my end; I timed by first running "raco make"
on both files, then timing "racket" on both.  I think what we're seeing is
a small startup time cost on Typed Racket.  I ran a longer benchmark and
Typed Racket edges out untyped Racket if I run a few million iterations
(given this is such a short computation).  The expressions I used are:

;; utest.rkt
(void
  (for/list {[i (in-range (* 10 1000 1000))]}
    (distance
      (pt (+ i 1.2) (+ i 2.1))
      (pt (+ i 4.3) (+ i 5.6)))))

and

;; test.rkt
(void
  (for/list: : (Listof Float) {[i (in-range (* 10 1000 1000))]}
    (distance
      (pt (+ i 1.2) (+ i 2.1))
      (pt (+ i 4.3) (+ i 5.6)))))


I see just under 5 seconds for test.rkt and just over 5 seconds for
utest.rkt.  So there's a fraction of a second extra startup time for Typed
Racket, but it takes less time for each subsequent computation, so the
difference depends on how much "real" work you do after startup.  I don't
know what causes that startup cost, but hopefully this kind of benchmark
will be useful to the Typed Racket maintainers in closing the gap for
future versions.  So, thanks for the example, Manfred!

Carl Eastlund


On Wed, May 8, 2013 at 5:32 AM, Manfred Lotz <manfred.lotz at arcor.de> wrote:

> Hi there,
> I did a small test using typed racket.
>
> This is an example from the documentation:
>
> #lang typed/racket
> ;; test.rkt
>
> (struct: pt ([x : Float] [y : Float]))
>
> (: distance (pt pt -> Float))
> (define (distance p1 p2)
>   (sqrt (+ (sqr (- (pt-x p2) (pt-x p1)))
>            (sqr (- (pt-y p2) (pt-y p1))))))
>
> (distance (pt 1.2 2.1) (pt 4.3 5.6))
>
> This is the untyped version:
> #lang racket
> ;; utest.rkt
>
> (struct pt (x y))
>
> (define (distance p1 p2)
>   (sqrt (+ (sqr (- (pt-x p2) (pt-x p1)))
>            (sqr (- (pt-y p2) (pt-y p1))))))
>
> (distance (pt 1.2 2.1) (pt 4.3 5.6))
>
>
> Now running both:
> time racket test.rkt
> 4.675467891024383
> racket test.rkt  1.24s user 0.08s system 99% cpu 1.333 total
>
>
> time racket utest.rkt
> 4.675467891024383
> racket utest.rkt  0.22s user 0.03s system 99% cpu 0.248 total
>
>
> It seems the typed version needs a lot of time for the type checking.
> The time for time checking could be cut mostly by:
>
> raco exe test.rkt
> time ./test
> 4.675467891024383
> ./test  0.49s user 0.03s system 99% cpu 0.531 total
>
> But still runtime is more than twice as long. I could get the
> impression that typed racket is generally slower.
>
>
> Question: Is there any conclusion to be drawn from this (like that
> typed racket is slower than 'normal' racket)? Or is my test just a bad
> test?
>
>
> --
> Manfred
>
>
>
>
>
>
>
>
>
>
>
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20130508/42cd6104/attachment-0001.html>

Posted on the users mailing list.