Metacircular Interpreter的确切定义是什么?

Vij*_*hew 18 c lisp scheme interpreter self-interpreter

调用用C编写的C编译器或用PHP metacircular编写的PHP解释器是否合法?这个定义是否仅对特定类型的语言有效,比如Lisp?简而言之,口译员被称为Metacircular应满足的条件是什么?

sil*_*cle 25

metacircular interpreter是一种用同一种语言(可能更基本)实现的解释器.这通常用于尝试向语言添加新功能或创建不同的方言.

这个过程与Lisp相关的原因是由于高度清晰的论文"翻译的艺术",其中显示了几个基于Scheme的元外解释器.(本文是SICP一书的核心,第四章通过其他人创作,例如一个懒惰评估的方案.)

这也极大地更容易在"homoiconic"语言(语言其代码可以被操纵,因此在运行时的数据),如Lisp的,Prolog的,来回做.

至于你的直接问题 - C编译器根本就不是解释器.用自己的语言编写的编译器是"自托管",这是一个类似的属性,但与bootstrapping更相关.PHP中的PHP解释器可能不会计算,因为您可能会在此过程中重新实现一些非常重要的语言.传统的metacircular解释器的主要好处是不需要这样做 - 你可以插入现有的解析器,垃圾收集(如果有的话)等,然后编写一个具有不同语义的顶级求值器.在Scheme或Prolog中,它通常不到一页代码.

  • Alan Kay说:'......当我在读研究生时,这对我来说是个大启示 - 当我终于明白Lisp 1.5手册第13页底部的半页代码本身就是Lisp.这些是"麦克斯韦的软件方程式!" 这是整个编程世界,我可以把手放在一边. (6认同)
  • 虽然最初的Lisp是在纸上定义的(在它实施之前,这本身就是一个有趣的故事),但AotI/SICP可能已经做了更多的工作来直接推广这个想法,特别是这个术语,这就是问题所在.而且,事实上我听说过他.真的有必要吗? (4认同)
  • 这与Lisp有关的原因是McCarthy(你可能听说过他)在Lisp中给出了Lisp评估的描述. (3认同)
  • 说出你想要的东西,这个词与Lisp通过McCarthy的着名论文联系在一起.17年后,一份计划文件和一些书籍很好地接受了这个想法. (2认同)

Ste*_*n C 6

以下是维基百科页面中对metacircular的定义:

元循环求值器是自解释器的一种特殊情况,其中父解释器的现有设施直接应用于被解释的源代码,而无需额外的实现.

所以在这两种情况下答案都是否定的:

  • AC编译器不是解释器(评估器).它将程序从一种形式转换为另一种形式而不执行它.
  • 用PHP编写的(假设的)PHP解释器将是一个自我解释器,但不一定是metacircular.