这是一个天真的问题,但到目前为止我看到的教程并没有明确说明。
如果我在一个高级语言(不是C,C ++等)上构建一个解释器,并且它有一个垃圾收集器......还需要为解释器本身制作一个解释器吗?
如果答案是肯定的......它必须是同一类型的主机? (即:如果主机是标记扫描,解释器也是?),或者可以利用主机并让它管理所有这些?
主持人的选择有所不同?我计划使用F#/ .NET,但对于Java和其他人来说是一样的吗?
答案 0 :(得分:3)
解释语言的内存管理可以捎带主机的内存管理,但如果您要实现非玩具解释器,则可能需要使用 weak pointers 对于从主机到解释世界的值的管理引用,如果在解释的世界中没有对它们的引用,则应该进行垃圾收集。
如果您正在实施一个玩具翻译,那么没有人会注意到您是否使用强指针进行从主机世界到解释世界的管理参考。在这种情况下,我建议你不要打扰:弱指针,作为一种功能,可用于所有足够先进的内存管理语言,但细节不同,它们的使用总是很棘手。 Bruno Haible's survey提供了所有品种的图片。在他的调查中,弱指针的使用属于“全局垃圾收集:允许垃圾收集跨越进程边界,或跨越Lisp - C / C ++ / Java外部接口边界”,除了外部接口边界在主机之间语言和解释语言。
答案 1 :(得分:1)
一般来说,没有。但是你可能有例外,例如因为解释语言的内存语义与您编写解释器的语言的内存语义不同。
例如,某些语言是垃圾收集线程或任务。如果您使用Java为这种语言编写解释器代码,那么您需要自己对GC执行任务。
您可能需要一些弱哈希表。