2024-06-16 10:40:40 发布
网友
出于好奇,是否有很多编译器都是针对.pyc文件的?在
.pyc
在谷歌上搜索了一下,我能找到的只有两个:
那么…还有吗?在
(作为补充说明,我之所以考虑这个问题是因为我想为pyc编译器编写一个方案)
(另一方面,我并没有幻想到pyc编译器的Scheme对有用,但它给了我一个令人难以置信的借口来学习Scheme和Python的一些内部原理)
几年前我写了一个编译器,它接受了一种叫做“面条”的lisp语言,并生成了Python字节码。虽然它从来没有变得特别有用,但对于更好地理解公共Lisp(我复制了它的一些特性)和更好地理解Python来说,它是一个非常好的学习体验。
我可以想到两种特殊情况:直接以Python字节码为目标,而不是生成Python并将其传递给Python编译器时可能会有用:
nonlocal
所以,是的,这可能是比它的价值更多的工作,但我喜欢它,你也可能。
“我想给pyc编译器写一个方案”。
我的脑子疼!你为什么要这么做?Python字节码是一种中间语言,专门为满足Python语言的需要而设计,并设计为在Python虚拟机上运行,而Python虚拟机又是根据Python的需要而定制的。现在Python开发的一些最重要的领域是将Python移到其他“虚拟机”上,例如Jython(JVM)、IronPython(.NET)、PyPy和Unladen 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!
几年前我写了一个编译器,它接受了一种叫做“面条”的lisp语言,并生成了Python字节码。虽然它从来没有变得特别有用,但对于更好地理解公共Lisp(我复制了它的一些特性)和更好地理解Python来说,它是一个非常好的学习体验。
我可以想到两种特殊情况:直接以Python字节码为目标,而不是生成Python并将其传递给Python编译器时可能会有用:
nonlocal
关键字之前),如果不借助字节码黑客技术,就不能修改closed over变量的值。您可以改变值,因此通常的做法是让一个闭包引用一个列表,并从内部范围更改其中的第一个元素。这会让人很恼火。但是,限制是语法的一部分,而不是pythonvm。我的语言有显式的变量声明,因此它成功地提供了带有可修改closed over值的“normal”闭包。在所以,是的,这可能是比它的价值更多的工作,但我喜欢它,你也可能。
“我想给pyc编译器写一个方案”。
我的脑子疼!你为什么要这么做?Python字节码是一种中间语言,专门为满足Python语言的需要而设计,并设计为在Python虚拟机上运行,而Python虚拟机又是根据Python的需要而定制的。现在Python开发的一些最重要的领域是将Python移到其他“虚拟机”上,例如Jython(JVM)、IronPython(.NET)、PyPy和Unladen 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!
相关问题 更多 >
编程相关推荐