谷歌的开放源的博客:

PyPy是一个重新实现的蟒蛇 在蟒蛇,使用先进的技术 试图实现更好的性能 比CPython.许多年的艰苦工作 已经最后付清。我们的速度 结果常常打CPython,范围 从速度稍慢, 加速可达2个在真实的 应用程序的代码,以加速可达 10倍小的基准。

这怎么可能?这Python执行是用于实现PyPy? CPython?和什么是机会的一个PyPyPy或PyPyPyPy殴打他们,这是你?

(在一个相关的注意...为什么会有人尝试这样的事情?)

有帮助吗?

解决方案

Q1。这怎么可能?

手册管理存储器(这是什么CPython并与其计数)可以慢于自动管理,在某些情况下。

限制在执行CPython解释排除某些优化,PyPy可以做(例如。细锁).

作为马塞洛提到,JIT。能够在飞行中确认类型的对象可以救你需要做多指间接引用,以最后到达的方法你想要呼叫。

Q2。这Python执行是用于实现PyPy?

该PyPy解释是实现RPython这是一种静态型的子集Python(语言和不CPython翻译).-参阅 https://pypy.readthedocs.org/en/latest/architecture.html 对于细节。

Q3。和什么是机会的一个PyPyPy或PyPyPyPy殴打他们,这是你?

这将取决于实施这些假设的口译员。如果他们中的一个例如把源,有没有某种类型的分析和转换,它直接进入紧目标的具体组件码在运行一段时间,我想这将是相当快于CPython.

更新: 最近,在一个 精心打造的实例,PyPy超过一个类似的C节目编制与 gcc -O3.这是一个人为的情况,但并表现出一些想法。

Q4。为什么会有人尝试这样的事情?

从官方网站。 https://pypy.readthedocs.org/en/latest/architecture.html#mission-statement

我们的目标是提供:

  • 一个共同的翻译和支助框架的制造
    实现的动态语言,强调一个清洁的
    分离之间的语言规范和执行情况
    个方面。我们叫这个的 RPython toolchain_.

  • 一个兼容的、灵活和快速执行Python_ 语言使用上述工具启用新的先进的 高级别特征,而不必编码的低级 详细信息。

通过分离问题以这种方式,我们的执行情况的蟒蛇, 其他动态语言-是能够自动生成 只是时间编译器的任何动态的语言。它还允许一个 混合和匹配方法以实施的决定,包括许多 这在历史上被外面的一个用户的控制,例如 目标平台,存储器和线程模型、垃圾收集 战略和优化适用,包括是否 有一个JIT在第一位。

C编译器的海湾合作委员会是实现C,Haskell编译器GHC是写在Haskell.你有任何理由为蟒蛇的翻译/编译器不被书写在蟒蛇?

其他提示

"PyPy是一个重新实现的蟒蛇在蟒蛇"是个误导的方式来描述PyPy,恕我直言,虽然这在技术上正确的。

有两个主要部分的PyPy.

  1. 翻译框架
  2. 口译员

翻译框架是一个编译器。它编制 RPython 代码降至C(或其他目标),自动添加在方面,例如垃圾收集和JIT编译器。它的 不能 处理任意代码,只有RPython.

RPython是一个子集的正常Python;所有RPython代码代码,但不是周围的其他方法。没有正式定义的RPython,因为RPython是基本上只是"子集的蟒蛇可以翻译PyPy的翻译框架"。但是为了进行翻译,RPython码是 静态类型 (类型推断出来,你不宣布他们,但它仍然是一个严格的类型为每个变量),和你不能做的事情一样,宣布/修改的功能/课程在运行。

口译员然后是一个正常的蟒蛇口译员编写RPython.

因为RPython码是正常的代码,可以运行上的任何蟒蛇的解释。但没有PyPy的速度要求来运行它的方式;这只是为了一个快速测试循环,因为翻译的翻译需要 时间。

与理解,应当立即显而易见的,猜测有关PyPyPy或PyPyPyPy实际上没有任何意义。你有一个口译员编写RPython.你把它翻译到C码,执行蟒蛇很快。那里的进程停止;有没有更多的RPython加速通过处理它一次。

因此,"它怎么可能PyPy要快于CPython"也变得相当明显。PyPy有一个更好的执行,包括一个JIT编译器(这一般不是很快,而不JIT编译器,我相信,这意味着PyPy仅仅是速度更快的程序容易受到JIT汇编).CPython从未被设计成为一个高度优化执行Python语言(虽然他们不要尝试使它成为一个高度 优化 执行,如果按照差别)。


真正创新的位的PyPy项目是,他们没写复杂的GC方案或JIT编译器。他们写的解释相对直截了当在RPython,并为所有RPython是较低的水平比Python它仍然是一个面向对象的垃圾收集语言,更多的高级别于C。然后翻译框架 自动 添加的东西喜欢GC和JIT。这样的框架是一个翻译 巨大的 的努力,但它同样适用于该PyPy python解释但是他们改变他们的执行情况,允许更多的自由,在实验,以改善性能(而不必担心引入GC错误或更新JIT编译器,以应付改变)。它还意味着,当他们围绕执行Python3解释,它将以自动获得同样的好处。和任何其他口译员编写的PyPy框架(其中有一些在不同阶段的波兰).和所有口译人员使用的PyPy框架的自动支持,支持的所有平台的框架。

所以真正的利益PyPy项目的目的是独立出来(尽可能)的所有部分的执行的一个有效平台的独立口译员的一个动态的语言。然后来了一个良好的执行他们在一个地方,这可以被重新使用在许多口译人员。这不是一个立即赢得像"我Python程序的运行速度更快,现在",但它是一个伟大的前景未来。

它可以运行Python程序更快的(可能).

PyPy是用Python实现,但它实现JIT编译器以在飞行中产生的本机代码。

落实在Python之上PyPy的原因可能是它只是一个非常有成效的语言,特别是因为JIT编译器,使宿主语言的表现多少有些无关紧要的。

PyPy写入限制了Python。它不会对CPython的解释的顶部,据我所知运行。限制Python是Python语言的一个子集。 AFAIK,当安装它不利用在运行时python解释的PyPy解释器编译成机器代码,所以

您问题似乎想到的解释器在执行代码上的CPython上运行的PyPy。 修改是,使用PyPy首先用gcc翻译PyPy Python代码,无论是C和构建,以JVM字节代码,或到.NET CLI代码。请参阅入门

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