[racket-dev] Machinery for eliding contracts
On 06/09/2014 01:19 AM, Eric Dobson wrote:
>
> Does this seem like a reasonable thing to support/do people see issues with it?
I can only speak on reasonableness, and my answer is emphatically YES.
Typed Racket is a great language in which to define and use data
structures: access is very fast, and many properties are checked
statically. But accessor performance suffers badly when the data types
are used in untyped Racket. If access uses higher-order functions (e.g.
math/array), wrapping the functions slows access by a very high constant
factor. If the data structures are first-order, every O(1) access
becomes O(n).
I recently had to work around this in Plot when I needed an untyped
module to be able to operate on typed BSP trees. I ended up making a
typed weak hash map from "BSP tree handles" (gensyms) to BSP trees, and
writing a new untyped API for operating on trees using handles. It was
ugly. If the untyped and typed modules had been too tightly coupled, it
would have been impossible.
IIUC, your proposal would make untyped use of typed data structures
actually feasible for real-world use. So again, YES.
Neil ⊥