D是否适合编写跟踪JIT编译器?

Max*_* C. 5 c++ compiler-construction jit d go

我想为我正在设计的编程语言编写一个解释器并跟踪JIT.我已经有很多年用C++编程的经验,但我一直想知道是否有更新的替代方案可能更好.在我的C++时代,我发现最令人沮丧的事情之一就是不得不使用头文件来处理笨重的单通道编译器模型.问题是并非所有语言都适用于此目的.对于我的跟踪JIT,我需要能够将可执行代码写入内存并让解释器调用该代码.我还需要生成的代码才能回调主机功能.

我开始看Go,看到该语言有指针,但没有指针算术.这立刻让我感到震惊.我可能想编写自己的分配器和垃圾收集器.我需要严密控制我的语言对象在内存中的布局方式,并能够获取特定字段的地址并写入它们.除非有办法解决这个问题,否则Go似乎不能达到我的目的.

D语似乎很有希望.它有指针算法和进出D调用所需的ABI的清晰轮廓.我听到很多关于它的好东西.它也有垃圾收集,这对编译器编写很好,但我仍然有一些我不确定的事情:

  1. D是否有标准的库可以让我将内存块标记为可执行文件?

  2. 如果我分配了一大块内存,我想用自己的GC管理自己,并且有一堆指针进入那里,这会给D的垃圾收集器带来问题吗?

  3. 根据您的经验,D与C代码的互操作性如何?加载C动态库并调用它们相当容易吗?

最后,还有整个支持方面.对于那些在Linux上使用过D的人来说,工具链有多好?有什么问题?有没有人在D中编写JIT编译器,如果有,那么经验如何?

Meh*_*dad 5

  1. 我相信,看看core.memory.GC我是否记得正确.

  2. 不,它不应该.只需打电话malloc或任何你需要的,并确保GC没有看到它.

  3. 是的,与C代码互操作非常容易.

警告:你可能也不想依赖GC,因为它不是'精确'(即如果你运气不好就可以并且确实会泄漏内存).但对于小块数据,它通常很好.