来自 Nim 编译器的 C 字符串文字

C string literal from a Nim compiler

如果我在 Nim 中从 "Hello World!" 读取生成的 C 代码,我会看到这一行

STRING_LITERAL(TM_xLHv575t3PG1lB5wK05Xqg_2, "Hello world!", 12);

序列TM_xLHv575t3PG1lB5wK05Xqg_2是如何创建的? Nim 编译器实际上是从自身生成这个名称,还是在转换为 C 时使用变量的预定义名称?

它正在使用模块信息的 md5 散列作为基础来生成名称。该过程主要局限于 compiler/cgen.nim 文件。

实际名称来自这里:https://github.com/nim-lang/Nim/blob/d5da450100f35008df06ecf812f1eeabda05d285/compiler/cgen.nim#L233

名称的组成部分源自此处的模块参数:https://github.com/nim-lang/Nim/blob/d5da450100f35008df06ecf812f1eeabda05d285/compiler/cgen.nim#L1468