5

我有一些以某种形式的 AST 可用的代码,我想执行它。

我可以想到几种方法来做到这一点,例如:

  • 直接解释就行了。
  • 将其翻译成 Python AST(ast模块)和
    • Python-compile那个或
    • Python-eval那个。
  • 将其翻译成 Python 源代码(例如纯字符串)和
    • Python-compile那个或
    • Python-eval那个。
  • 将它翻译成某种形式的低级代码,然后用 Python 编写一个简单的 VM 来运行它。

我想我会通过将其转换为 Python ASTcompile并运行它来获得快速执行。特别是。使用 PyPy 时,我什至可以通过 PyPys JIT 编译优化得到改进(我希望我这样做,是吗?)。

你能想到其他的可能性吗?你能就什么可能是最好的方法提出建议吗?

4

2 回答 2

1

另一种可能性:转换为Cython代码,写入文件,使用 Cython 编译,然后打开优化的 C 编译器,加载生成的模块并执行它。

如果代码具有可以转换为 Cython/C 类型的类型注释,这可能会非常快。不过要小心,因为 Cython 处于测试阶段,边缘仍然有点粗糙。此外,此解决方案仅适用于 CPython。

于 2011-07-08T16:02:56.523 回答
0

另一种可能性:将 AST 直接转换为 Python 字节码并执行。除了使用现有的 Python VM 之外,这就像您的最后一个想法。

这不是一个很好的可能性,因为它可能需要大量工作,并且 Pythoncompile可能会做得更好,除非在相当特殊的情况下,但我只是把它扔在那里。

于 2011-07-08T16:25:56.980 回答