这是一个幼稚的问题,但在我迄今为止看到的教程中并没有拼写清楚。
如果我在一种高级语言(不是 C、C++ 等)之上构建一个解释器,并且它有一个垃圾收集器……是否有必要为解释器本身制作一个?
如果答案是肯定的……那一定是同一类宿主吧? (即:如果主机是标记-清除的,那么解释器也是如此?),或者是否可以利用主机并让它管理所有这些?
主机的选择有影响吗?我计划使用 F#/.NET,但 Java 和其他语言是否相同?
解释语言的内存管理可以搭载主机的内存管理,但如果您正在实现一个非玩具解释器,您可能需要使用弱指针 http://en.wikipedia.org/wiki/Weak_reference用于主机对解释世界的值的管理引用,如果解释世界中没有对它们的引用,则应对这些值进行垃圾收集。
如果您正在实现一个玩具解释器,甚至没有人会注意到您是否使用强指针来进行从主机世界到解释世界的管理引用。在这种情况下,我建议您不要打扰:弱指针作为一项功能,在所有足够高级的内存管理语言中都可用,但细节有所不同,并且它们的使用总是很棘手。布鲁诺·海布尔的调查 http://www.haible.de/bruno/papers/cs/weak/WeakDatastructures-writeup.html提供所有品种的图片。在他的调查中,弱指针的这种使用属于“全局垃圾收集:允许垃圾收集跨进程边界或跨 Lisp - C/C++/Java 外部接口边界”,除了外部接口边界位于主机之间语言和解释语言。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)