针对.pyc文件的编译器?

2024-06-16 10:40:40 发布

您现在位置:Python中文网/ 问答频道 /正文

出于好奇,是否有很多编译器都是针对.pyc文件的?在

在谷歌上搜索了一下,我能找到的只有两个:

  • unholy:为什么使用Ruby-to-pyc编译器
  • Python:PSF的Python-to-pyc编译器

那么…还有吗?在

(作为补充说明,我之所以考虑这个问题是因为我想为pyc编译器编写一个方案)

(另一方面,我并没有幻想到pyc编译器的Scheme对有用,但它给了我一个令人难以置信的借口来学习Scheme和Python的一些内部原理)


Tags: 文件to编译器方案幻想原理schemepyc
3条回答

几年前我写了一个编译器,它接受了一种叫做“面条”的lisp语言,并生成了Python字节码。虽然它从来没有变得特别有用,但对于更好地理解公共Lisp(我复制了它的一些特性)和更好地理解Python来说,它是一个非常好的学习体验。

我可以想到两种特殊情况:直接以Python字节码为目标,而不是生成Python并将其传递给Python编译器时可能会有用:

  1. 完全闭包:在python3.0之前的版本中(在nonlocal关键字之前),如果不借助字节码黑客技术,就不能修改closed over变量的值。您可以改变值,因此通常的做法是让一个闭包引用一个列表,并从内部范围更改其中的第一个元素。这会让人很恼火。但是,限制是语法的一部分,而不是pythonvm。我的语言有显式的变量声明,因此它成功地提供了带有可修改closed over值的“normal”闭包。在
  2. 在不引用任何内置项的情况下获取回溯对象。当然是真正的利基案件,但我用它打破了早期版本的“safelite”监狱。请看my posting。在

所以,是的,这可能是比它的价值更多的工作,但我喜欢它,你也可能。

“我想给pyc编译器写一个方案”。

我的脑子疼!你为什么要这么做?Python字节码是一种中间语言,专门为满足Python语言的需要而设计,并设计为在Python虚拟机上运行,而Python虚拟机又是根据Python的需要而定制的。现在Python开发的一些最重要的领域是将Python移到其他“虚拟机”上,例如Jython(JVM)、IronPython(.NET)、PyPyUnladen Swallow项目(将CPython移动到基于LLVM的表示形式)。试图将另一种完全不同的语言(Scheme)的语法和语义压缩到另一种高级语言的中间表示中,似乎是在错误的层次上攻击问题(无论问题是什么)。所以,总的来说,似乎不会有很多.pyc编译器,这是有原因的。

我建议你关注CPython。

http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html

我建议您编写一个Scheme到Python转换器,然后让CPython处理到.pyc的转换,而不是Scheme到.pyc的转换。这样做是有先例的,第一个C++编译器是Cfront,它把C++翻译成C,然后让系统C编译器做剩下的工作)< <

据我对Scheme的了解,将Scheme转换为Python并不困难。

一个警告:Python虚拟机对Scheme的速度可能不如Scheme本身快。例如,Python不会自动将尾部递归转换为迭代;而且Python的堆栈相对较浅,因此您实际上需要将尾部递归转换为迭代。

作为奖励,一旦unladenswallow加速了Python,您的Python translator方案将受益匪浅,在这一点上甚至可能变得实用!

如果你觉得这是一个有趣的项目,我说去做吧。不是每个项目都必须立即实用。

如果你想要一个更实用的项目,你可以写一个AWK到Python的转换器。这样,使用遗留AWK脚本的人就可以轻松地跨越到Python!

相关问题 更多 >