出于好奇,有许多编制者使用时,目标 .pyc 文件?

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

  • 邪恶的:why_的红宝石到pyc编译器
  • 蟒蛇:PSF的Python pyc编译器

所以...是否有任何更多吗?

(作为一个侧面说明,我想这是因为我想写一个计划--pyc compiler)

(作为第二个侧面说明,我不是在任何幻想,这一方案对pyc将编译器 有用的, 但它会给我一个令人难以置信的借口,以了解一些内部的方案和蟒蛇)

有帮助吗?

解决方案

我写了一个编译器,几年前接受的一个口齿不清样的语言,称为"面条"和产生Python码。同时,它从来没有成为特别有用,它是一个非常好的学习经验,了解共同的舌头好(I复制的若干功能),以及了解Python更好。

我可以想到的两个特定的情况下,当它可能是有益的目标Python码是直接的,而不是生产Python并通过它向Python编译器:

  1. 完全关闭:在Python3.0之前(前 nonlocal 关键字),不能修改价值的一个闭过变量,而不诉诸码车呀.你可以改变价值观相反,所以它是常见的做法有一个封闭引用一个清单,例如,改变中的第一个元素从内的范围。这可以得到真正令人讨厌。该限制是语法的一部分,不过,不Python虚拟机。我的语言已经明确的变量声明,使它成功地提供"正常的"封锁与可改变的闭上的价值观。
  2. 越来越在追溯的对象没有引用任何内置.真正的适当位置的情况下,可以肯定,但我用它来突破的一个早期版本的"safelite"监狱。看看 我的发布 关于它。

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

其他提示

"我想写一个计划--pyc编译器".

我的脑子好痛!为什么你要这么做?蟒蛇字节的代码是一个中间的语言专门设计用来满足需要的蟒蛇的语言设计和运行上Python虚拟机,再次,已经针对需求的蟒蛇。一些最重要的领域Python发展这些天正蟒蛇给其他"虚拟机",例如 Script (JVM), IronPython (.NET), PyPy空载燕子 项目(移动CPython到 编程基于表示)。想挤压法和语义的另一个非常不同的语言(方案)进入中间表示的另一个高级别的语言似乎是袭击的问题(什么的问题)在错误的水平。所以,一般来说,它似乎不像会有许多。pyc的编译出来那里有一个很好的理由。

我建议你集中在CPython.

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

而不是一个方案。pyc翻译,我建议你写上一个方案向Python翻译,然后让CPython处理转换。pyc.(有先例这样做,这种方式;第一C++编译器 Cfront 其中翻译C++进C,然后让系统,C编译器完成剩下的工作。)

从我知道的方案,它不会,难以翻译计划,以蟒蛇。

一个警告:蟒蛇虚拟机可能不是快速方案作为方案本身。例如,蟒蛇不会自动打开尾递归入次迭代;和Python具有相对较浅堆,所以你会实际上需要把尾巴递归的迭代进你的翻译。

作为奖励,一旦空载燕子的速度蟒蛇,你的计划到蟒蛇的翻译将得益,在这一点甚至可以成为实用!

如果这似乎是一个有趣的项目,给你,我说的去了。不是每个项目必须立即实际的。

P.S.如果你想要一个项目,是较为实际,可能要写一AWK向Python翻译。这样,人民与传统AWK脚本可以很容易让飞跃到蟒蛇!

只是为了你的利益我已经写了一个玩具的编译器从一个简单的口齿不清到蟒蛇。实际上,这是一个口齿不清到pyc编译器。

有一看: 正弦-最微小的口齿不清的编译器

可能有点晚在派对但是如果你还感兴趣的题-py项目(https://github.com/halgari/clojure-py)是现在能够编制一个显着的子集和向python码--但一些帮助,总是受欢迎的。

目标码是不是很难在本身,除了一件事:它是不稳定的跨平台(例如MAKE_FUNCTION pops2的元素从栈在Python3但只有1个在蟒蛇2),以及这些差异不明确记载在一个单一点(afaict)--因此你可能有一些抽象层的需要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top