[plt-scheme] ->d Performance

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Sat Apr 11 14:46:03 EDT 2009

->d is definitely substantially slower than the other because the
wrappers are more complex. Are you finding the performance overhead of
the ordinary -> acceptable?

Robby

On Sat, Apr 11, 2009 at 1:17 PM, Doug Williams
<m.douglas.williams at gmail.com> wrote:
> I would like to use ->d to impose a precondition for a function.  For
> example:
>
>  (matrix-ref
>   (->d ((matrix matrix?)
>         (i (and/c exact-nonnegative-integer? (</c (matrix-rows matrix))))
>         (j (and/c exact-nonnegative-integer? (</c (matrix-cols matrix)))))
>        ()
>        (result any/c)))
>
> or
>
>  (matrix-ref
>   (->d ((matrix matrix?)
>         (i exact-nonnegative-integer?)
>         (j exact-nonnegative-integer?))
>        ()
>        #:pre-cond (and (< i (matrix-rows matrix))
>                        (< j (matrix-cols matrix)))
>        (result any/c)))
>
> instead of just
>
>  (matrix-ref
>   (-> matrix? exact-nonnegative-integer? exact-nonnegative-integer? any/c))
>
> The first two do work, but are really, really slow.
>
> I like having the bounds check in the contract (as opposed to bounds check
> in the matrix-ref code, but can't accept the performance hit. Any ideas?
>
> Doug
>
>
> _________________________________________________
>  For list-related administrative tasks:
>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
>


Posted on the users mailing list.