[plt-scheme] R6RS Interoperability
On Jun 27, 2008, at 2:35 AM, Mark Engelberg wrote:
> Since performance is a key goal of gradual typing,
Who says?
;; ---
In case people are interested, I can try to compile a rather
extensive literature list on compiling w/ or w/o types for languages
such as ML and friends. Just as a teaser; until 12 years ago (or so),
compilers for polymorphic languages just stripped types away once
they were done and used Scheme-like back-ends. Leroy started type-
directed compilation closely followed by others (CMU etc). But a few
years later, Leroy gave a rather skeptical talk at Types-in-
Compilation, questioning whether much of it was worth the effort.
Why is this the case? Imagine a function like that:
(Lambda ([t : Type]) (lambda ([x : t]) x))
What do you know about the arguments that flow into x? Until you know
t, you know nothing. So how do you compile this? Perhaps you put the
actual value into a pointer and just uniformly accept pointers. Easy
compilation, easy run-time system. So then people tried to see
whether the bug Lambda could be instantiated (cloned) so you have
better memory usage and access in the little lambda. And I think
we're stuck right there.
Stalin is a whole-program compiler, not an incremental compiler, not
a JIT compiler, and not a modular compiler. Unless your whole program
analyses run in linear time, compiling 300,000 lines of code just
isn't realistic. For higher-order functions, reasonable analyses
aren't linear.
This is not a small field, and this is not something where you can
expect huge progress over the next year or so. Lots of people have
tried and lots of man-years are in related projects.
At this moment, Typed Scheme imposes a small run-time overhead (due
to the contracts between typed and untyped modules) and that's that.
-- Matthias