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

From: Eric Dobson (eric.n.dobson at gmail.com)
Date: Thu May 23 20:43:06 EDT 2013

Isn't that exactly what free-indentifier=? is checking for on
identfiers with a module level binding? Or is there something else it

On Thu, May 23, 2013 at 3:13 PM, Carl Eastlund <cce at ccs.neu.edu> wrote:
> On Thu, May 23, 2013 at 4:13 PM, Ryan Culpepper <ryanc at ccs.neu.edu> wrote:
>> On 05/23/2013 01:57 AM, Eric Dobson wrote:
>>> Some modules have macros which expand into identifiers that are not
>>> exported, as they want to protect those bindings. TR currently has the
>>> following code which allows it to generate an identifier which is
>>> free-identifier=? to what would appear in the output of the macros.
>>> define (make-template-identifier what where)
>>>    (let ([name (module-path-index-resolve (module-path-index-join where
>>> #f))])
>>>      (parameterize ([current-namespace (make-empty-namespace)])
>>>        (namespace-attach-module (current-namespace) ''#%kernel)
>>>        (parameterize ([current-module-declare-name name])
>>>          (eval `(,#'module any '#%kernel
>>>                   (#%provide ,what)
>>>                   (define-values (,what) #f))))
>>>        (namespace-require `(for-template ,name))
>>>        (namespace-syntax-introduce (datum->syntax #f what)))))
>>> This turns out to be a slightly slow part of the initialization of TR.
>>> Does anyone know another way to get such an identifier?
>> There's another way around this issue, which is to avoid creating these
>> identifiers at all. In other words, change the representation of the type
>> environment to something that supports symbol+module pairs as keys in
>> addition to identifiers. The easiest way to do that is to add in a hash
>> table behind the current free-id-table, since the two tables would handle
>> disjoint sets of identifiers.
>> Ryan
> I would not have thought that'd work, but apparently identifier-binding will
> give one that information.  Nice going, Ryan!
> --Carl

Posted on the dev mailing list.