我试图理解元循环评估器的概念。根据维基百科
在计算中,元循环评估器或元循环解释器是一种解释器,它使用解释器宿主语言的类似设施来定义解释语言的每个特征。例如,解释 lambda 应用程序可以使用函数应用程序来实现。
在 Lisp 的上下文中,我认为这意味着解释器实现将程序状态存储在与语法本身所表达的数据结构相似的数据结构中,即列表。
更一般地说,我会说解释器实现使用语法的范式来解释语法。此外,它与以解释语言实现的解释器无关(Lisp 解释器通常用 C 编写)。只有范式对等很重要。
让我们考虑一下 Java Maxine 虚拟机,即元循环 JVM。Maxine JVM 是用 Java 编写的。它是在 JVM 中运行的 JVM。同样,解释器使用与解释语言相同的范式。Java对象表达的可执行代码由Java对象表达的可执行代码管理。当然,实际的可执行文件是字节码,但它之外的抽象概念才是最重要的。因此,我相信 Maxine 可能是用任何语言编写的,并且仍然被视为元循环,只要实现符合 OOP 概念和 Java 规则。最明显的这种语言是 Java 本身。然而,这是我在上一段中描述的一个有趣的冲突,它真的让我头疼!
这就是我在理论上理解元循环评估器的含义的方式。但我并没有真正了解实际方面。根据维基百科
与现有的语言实现相结合,元循环解释器提供了一个基线系统,可以从中扩展语言,向上通过添加更多特性或向下编译特性而不是解释它们
这实际上意味着什么?例如,这是如何使用 Maxine 虚拟机实现或可能付诸实践的?这与诸如 的函数有何不同eval
?
如果我们更哲学一点,元循环解释器有两个前提
- 解释器实现语言无关紧要,范式等价才是
- 在执行层面,范式的概念不复存在,一切都只是字节
元循环的明确边界是什么?这个特性究竟体现在哪里?我可能想多了,但我觉得这是一个有趣的话题。