在Python中快速动态代码执行的可能性

时间:2011-07-08 15:42:20

标签: python scripting abstract-syntax-tree jit vm-implementation

我在某种形式的AST中有一些代码,我想执行它。

我可以想到几种方法,例如:

  • 只是直截了当地解释它。
  • 将其转换为Python AST(ast模块)和
    • Python - compile
    • Python - eval那个。
  • 将其翻译成Python源代码(例如纯字符串)和
    • Python - compile
    • Python - eval那个。
  • 以某种形式的低级代码进行翻译,并在Python中编写一个运行该代码的简单VM。

我想我会通过将其转换为Python AST compile并执行它来获得禁食执行。 ESP。使用PyPy时,我甚至可能通过PyPys JIT编译优化得到改进(我希望我这样做,是吗?)。

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

2 个答案:

答案 0 :(得分:1)

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

如果代码具有可以转换为Cython / C类型的类型注释,那么这可能非常快。但要注意,因为Cython处于测试阶段并且仍然有点粗糙。此外,此解决方案仅适用于CPython。

答案 1 :(得分:0)

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

这不是伟大的可能性,因为它可能是很多工作而Python compile可能会做得更好,除非在相当特殊的情况下,但我只是扔它在那里。