介绍编程类编写Lisp metacircular评估器的情况并不少见。有没有试图为Python做这个?
是的,我知道Lisp的结构和语法非常适合于元认证评估者等等.Python很可能会更难。我只是好奇是否已经做出这样的尝试。
答案 0 :(得分:8)
对于那些不知道元循环评估器是什么的人来说,它是一个用要解释的语言编写的解释器。例如:用Lisp编写的Lisp解释器,或者在我们的例子中,用Python编写的Python解释器。有关详细信息,请read this chapter from SICP。
作为JBernardo said,PyPy就是一个。但是,PyPy的Python解释器,即元循环评估器,是在名为RPython的Python的静态类型子集中实现的。
您会很高兴知道,从1.5版本开始,PyPy完全符合官方Python 2.7规范。更重要的是:PyPy nearly always beats Python在性能基准测试中。
有关详细信息,请参阅PyPy docs和PyPy extra docs。
答案 1 :(得分:0)
我想我写了一个here:
"""
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)