我想为我正在设计的编程语言编写一个解释器并跟踪 JIT。我已经有多年的 C++ 编程经验,但我一直想知道更新的替代方案是否会更好。在我的 C++ 时代,我发现最令人沮丧的一件事是不得不使用头文件来处理笨重的一次性编译器模型。问题是并非所有语言都同样适合此目的。对于我的跟踪 JIT,我需要能够将可执行代码写入内存并让解释器调用该代码。我还需要生成的代码才能回调主机函数。
我开始研究 Go,发现该语言有指针但没有指针算术。这立刻让我觉得这是一个大问题。我可能很想编写自己的分配器和垃圾收集器。我需要密切控制我的语言对象在内存中的布局方式,并能够获取特定字段的地址并写入它们。除非有办法解决这个问题,否则 Go 的底层似乎不足以满足我的目的。
D 语言似乎很有前途。它具有指针算法和调用 D 所需的 ABI 的清晰轮廓。我听说过很多关于它的好消息。它还具有垃圾收集,非常适合编译器编写,但我仍然有一些我不确定的事情:
D 是否具有允许我将内存块标记为可执行的标准库?
如果我分配了一大块我想自己管理的内存,用我自己的 GC,并且有一堆指针进入那里,这会对 D 的垃圾收集器造成问题吗?
根据您的经验,D 与 C 代码的互操作性如何?加载 C 动态库并调用它们相当容易吗?
最后,还有整个支持方面。对于在这里使用过 D on linux 的人来说,工具链有多好?有什么问题吗?有没有人用 D 编写过 JIT 编译器,如果有,体验如何?