Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PyPy比CPython、Jython和IronPython提供了什么?_Python_Interpreter_Pypy - Fatal编程技术网

PyPy比CPython、Jython和IronPython提供了什么?

PyPy比CPython、Jython和IronPython提供了什么?,python,interpreter,pypy,Python,Interpreter,Pypy,从我在博客上看到的和读到的,PyPy是一个非常雄心勃勃的项目。与它的兄弟(CPython、Jython和IronPython)相比,它将为表带来哪些优势?是速度、跨平台兼容性(包括移动平台)、在不使用GIL的情况下使用c扩展的能力,还是这更像是一个关于可以做什么的技术练习?最重要的特性当然是JIT编译器。在CPython中,文件被编译成字节码(.pyc)或优化字节码(.pyo),然后进行解释。使用PyPy,它们将被编译为本机代码。PyPy还包括一些补丁,包括它令人印象深刻的(tasklet序列化

从我在博客上看到的和读到的,PyPy是一个非常雄心勃勃的项目。与它的兄弟(CPython、Jython和IronPython)相比,它将为表带来哪些优势?是速度、跨平台兼容性(包括移动平台)、在不使用GIL的情况下使用c扩展的能力,还是这更像是一个关于可以做什么的技术练习?

最重要的特性当然是JIT编译器。在CPython中,文件被编译成字节码(
.pyc
)或优化字节码(
.pyo
),然后进行解释。使用PyPy,它们将被编译为本机代码。PyPy还包括一些补丁,包括它令人印象深刻的(tasklet序列化、轻线程等)

如果Python得到真正的应用,我认为它将与任何其他实现一样快

它的优点是更容易实现新功能。今天,通过观察图书馆可以看到这一点。通常模块首先用Python编写,然后翻译成C

跨平台兼容性


是的,PyPy实际上是两个项目:

  • 解释器编译器工具链,允许您使用RPython(Python的静态子集)编写解释器,并为JVM和.NET(等)独立编译跨平台解释器
  • Python在RPython中的实现
这两个项目考虑了很多事情

  • 在Python中维护Python比在C中维护Python容易得多
  • 从单个代码库中,您可以生成在JVM、.NET和单机版上运行的Python解释器,而不是有多个稍微不兼容的实现
  • 编译器工具链的一部分包括一个实验性的JIT生成器(现在是它的第五个化身,并且开始很好地工作)-目标是让JIT PyPy比CPython运行得快得多
  • 实验基本的语言特性要容易得多——比如删除GIL、更好的垃圾收集、集成stackless等等

因此PyPy有很多令人兴奋的理由,它终于开始兑现它的所有承诺。

我想在这个伟大的列表中添加一个:每次升级到新的.X版本时,都不需要获得新版本的Python库(即C扩展)。这将是一个多么巨大的胜利。PyPy将如何改善C扩展的情况?事实上,C扩展是PyPy(目前)的主要缺点之一——除非经过专门移植,否则它们根本无法工作。随着PyPy JIT带来的额外速度(特别是如果它们可以有效地将其应用于
ctypes
code),首先,组合中的C扩展应该要少得多。FWIW您已经可以在没有GIL的情况下在CPython上使用C扩展了。正常的Python代码(与线程一起运行时)确实会受到GIL.Hmmm。。。不,PyPy不将Python程序编译为本机可执行文件,这是不正确的。声称PyPy最重要的功能是JIT编译器在我看来就像说执行速度是编程语言中最重要的部分。如果是,我们为什么要使用Python呢?我相当确信PyPy背后的主要动机是为了实现Python,从而允许更多的可能性。JIT只是其中之一。这与JVM十多年来一直在做的事情有什么不同?我不确定我是否明白为什么pypyjit比javajit好