来自 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
如果我在 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