[racket-dev] Constructing an identifier to an unexported binding

From: Sam Tobin-Hochstadt (samth at ccs.neu.edu)
Date: Thu May 23 09:22:19 EDT 2013

On Thu, May 23, 2013 at 1:54 PM, Matthias Felleisen
<matthias at ccs.neu.edu> wrote:
> Can you raise the level of discourse one level and perhaps figure out whether this is needed at all? I.e., find a different way to solve the problem? (What is the real problem?)

This is important, and it's the second implementation of this feature.
The previous one was substantially more painful, and involved
local-expand and "dumpster-diving".

The reason we need a tool like this is that the expansion of some
macros (examples include `for`, `delay`, `quasiquote`, among others)
have runtime support functions that are not exported. Typed Racket
needs to specify the type of these operations.  You can see these
specifications here:
https://github.com/plt/racket/blob/master/collects/typed-racket/base-env/base-special-env.rkt
. That means that it needs to construct those identifiers, although it
never needs to execute code with those identifiers.

The previous implementation was much slower here, remarkably.

Sam

Posted on the dev mailing list.