我想为我正在设计的一种编程语言编写一个解释器并跟踪JIT。我已经有多年使用C ++编程的经验,但是我一直在想,也许新的替代方法可能更好。在我的C ++时代,我最沮丧的事情之一就是不得不使用头文件来处理笨拙的一遍编译器模型。问题在于,并非所有语言都同样适合于此目的。对于我的跟踪JIT,我需要能够将可执行代码写入内存并具有对该代码的解释器调用。我还将需要生成的代码,以便能够回调到主机函数中。我开始看Go,发现该语言有指针但没有指针算术。这立即使我震惊,成为一个巨大的问题。我可能很想编写自己的分配器和垃圾收集器。我将需要严格控制语言对象在内存中的布局方式,并能够获取特定字段的地址并对其进行写入。除非有解决方法,否则Go似乎不足以达到我的目的。D语言似乎很有希望。它具有指针运算法则和调用D所需的ABI的清晰轮廓。我听说过很多关于它的好东西。它还具有垃圾回收,这对于编译器的编写非常有用,但是我仍然有一些不确定的地方:D是否有标准库使我可以将内存块标记为可执行文件?如果我使用自己的GC分配了自己要管理的大量内存,并且有一堆指针插入其中,那么D的垃圾收集器会带来问题吗?根据您的经验,D与C代码的互操作性如何?加载C动态库并调用它们相当容易吗?最后,还有整个支持方面。对于那些在linux上使用过D的人来说,工具链有多好?有什么问题吗?有没有人用D编写过JIT编译器,如果是的话,经验如何?
3 回答
12345678_0001
TA贡献1802条经验 获得超5个赞
我相信,请
core.memory.GC
记住我是否记得正确。不,不应该。只需致电
malloc
或您需要的任何电话,并确保GC看不到它即可。是的,与C代码互操作非常容易。
警告:您可能也不想依赖GC,因为它不是“精确的”(即,如果不幸的话,会并且确实会泄漏内存)。但是对于小块数据,通常没问题。
慕神8447489
TA贡献1780条经验 获得超1个赞
Go确实允许指针算术,但是您必须导入unsafe
包才能这样做(或使用C函数)。指针运算是错误的常见来源,并转到了其他机制,如片,它提供了安全的方式做一些需要在C指针运算用同样的活动,unsafe
你可以将任何指针uintptr
和背部,且uintptr
是普通数字类型,可让您进行算术运算。
- 3 回答
- 0 关注
- 196 浏览
添加回答
举报
0/150
提交
取消