7

介绍编程类编写 Lisp 元循环评估器的情况并不少见。有没有尝试为 Python 做这件事?

是的,我知道 Lisp 的结构和语法非常适合元循环评估器等。Python 很可能会更困难。我只是好奇是否有过这样的尝试。

4

2 回答 2

8

对于那些不知道什么是元循环评估器的人来说,它是一个用要解释的语言编写的解释器。例如:用 Lisp 编写的 Lisp 解释器,或者在我们的例子中,是用 Python 编写的 Python 解释器。有关更多信息,请阅读 SICP 中的这一章

正如JBernardo 所说PyPy就是其中之一。但是,PyPy 的 Python 解释器,即元循环评估器,是在称为RPython的 Python 的静态类型子集中实现的。

您会很高兴知道,从 1.5 版本开始,PyPy 完全符合官方 Python 2.7 规范。更重要的是:PyPy在性能基准测试中几乎总是胜过 Python 。

有关更多信息,请参阅PyPy 文档PyPy额外文档

于 2011-05-30T00:04:17.317 回答
0

我想我在这里写了一篇:

"""
Metacircular Python interpreter with macro feature.
By Cees Timmerman, 14aug13.
"""

import re
re_macros = re.compile("^#define (\S+) ([^\r\n]+)", re.MULTILINE)

def meta_python_exec(code):
    # Optional meta feature.
    macros = re_macros.findall(code)
    code = re_macros.sub("", code)
    for m in macros:
        code = code.replace(m[0], m[1])

    # Run the code.
    exec(code)

if __name__ == "__main__":
    #code = open("metacircular_overflow.py", "r").read()  # Causes a stack overflow in Python 3.2.3, but simply raises "RuntimeError: maximum recursion depth exceeded while calling a Python object" in Python 2.7.3.
    code = "#define 1 2\r\nprint(1 + 1)"
    meta_python_exec(code)
于 2013-08-15T13:30:08.340 回答