Generating fresh names in a source plugin
Simon Peyton Jones
simon.peytonjones at gmail.com
Mon Aug 4 22:18:38 UTC 2025
>
> think there is at least another tag that is treated specially: `f`,
> having to do with type families, from what I remember. The fact that some
> tags do cause special compiler behavior makes the situation quite tricky.
If you believe that the tag has significance beyond debugging etc, you may
be right -- *but can you point to any evidence? *Perhaps you can record
what you learn on #26264?
It may seem that a plugin author should pick a
> tag that isn’t used by GHC. This is already difficult, because you can’t
> reliably tell what tags GHC uses and what tags it may use in the future.
> However, what if the tags of the uniques that the plugin generates
> *need* special treatment? For example, you may want to create uniques
> for local variables that your plugin introduces, and GHC may use a tag
> for uniques of local names that causes necessary special compiler
> behavior.
Once again, I know of no "special compiler behaviour" but I may be wrong.
> you can’t
> reliably tell what tags GHC uses and what tags it may use in the future.
> In the end, I used `grep` and my own eyes to check potentially the whole
> GHC codebase for tag use.
Indeed this is bad. Can you record the list of tags you discovered, and
where they are born, in #26264?
Thanks!
Simon
On Mon, 4 Aug 2025 at 23:06, Wolfgang Jeltsch <wolfgang at well-typed.com>
wrote:
> Am Montag, dem 04.08.2025 um 16:12 +0200 schrieb Andreas Klebinger:
> > On 03/08/2025 17:25, Kai Prott wrote:
> > > According to the documentation, "the payload part of the Uniques
> > > allocated from this UniqSupply are guaranteed distinct wrt all other
> > > supplies, regardless of their 'tag'." (Assuming the unique does not
> > > overflow it's number of bits)
> >
> > If you read on the docs refer to an edge case in the next lines. GHC
> > contains a (limited) number of fixed/"built in" uniques. GHC itself
> > never creates uniques with the same tag as those fixed ones on the fly
> > so there is no risk of collision. However if you explicitly use this
> > tag it could happen and then compilation could go wrong. Outside of
> > this that is correct.
>
> I think there is at least another tag that is treated specially: `f`,
> having to do with type families, from what I remember.
>
> The fact that some tags do cause special compiler behavior makes the
> situation quite tricky. It may seem that a plugin author should pick a
> tag that isn’t used by GHC. This is already difficult, because you can’t
> reliably tell what tags GHC uses and what tags it may use in the future.
> However, what if the tags of the uniques that the plugin generates
> *need* special treatment? For example, you may want to create uniques
> for local variables that your plugin introduces, and GHC may use a tag
> for uniques of local names that causes necessary special compiler
> behavior.
>
> In the end, I used `grep` and my own eyes to check potentially the whole
> GHC codebase for tag use. My conclusion is that likely no specially
> treated tag is used for local variables, which are what I want the
> uniques for. Therefore, I probably should pick a tag that GHC surely
> doesn’t use and won’t ever use. I guess I’ll go for some ASCII control
> character.
>
> All the best,
> Wolfgang
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20250804/4612bf23/attachment.html>
More information about the ghc-devs
mailing list