雷锋网消息。PyPy 团队 21 日通过官方博客正式发布了两个全新版本:PyPy2.7 v5.7 和 PyPy3.5 v5.7,即支持 Python v2.7 语法和 Python v3.5 语法的 PyPy 全新版本解释器。
据博客介绍,此次更新的亮点有两个:
● PyPy3.5 首次引入了对 Python 3 的语法支持;
● PyPy2.7 提升了对 C 扩展包的兼容性,可以直接运行 Numpy、Cython 和 Pandas 等。
大部分做 Python 开发的人或多或少可能都知道 PyPy:一种基于 Python 实现的 python 解释器。由于其特有的 JIT 动态编译,因此在运行速度上可以轻轻松松超过标准解释器 CPython 好几倍,甚至有报道称在某些极端情况下 PyPy 可以比 CPython 快好几百倍。基于这一重大优点,PyPy 团队长期以来的奋斗目标一直都是超越 CPython,成为各种 Python 实现版本中的王者。
但这一梦想一直没能实现。究其原因,一个重要的障碍可能来自版本支持:PyPy 的更新一直落后于 Python 语言的主流版本,即它并不支持全部的 Python 语法,而且往往不适配那些最新的特性。久而久之,在用户群里形成了一个刻板的固有印象:PyPy 只是那些不适配 Python 最新特性的 App 的替代品。
为了扭转这种并不光彩的固有印象,PyPy 在最新版本中做出了改变。
改变之一是对 Python 新特性的支持。
在此次更新的 PyPy3.5 版本中,PyPy 开始全面支持 Python 3 的语法,包括可以更方便地进行异步编程(asynchronous programming)。不但如此,PyPy3.5 还支持在 Python 3.4 中引入的异步模块 asyncio(包括 async/await 语法),而且有评论称,相对原版,该特性在 PyPy 中得到了相当大的性能提升。
另外,在 Python 3.6 中引入的 f-strings 特性,也在此次更新的 PyPy3.5 版本中得到了支持。事实上,f-strings 并非一个普遍受欢迎的特性,因为它仅仅提供了一个本地字符串格式化的简化选项,但此次依然获得了 PyPy3.5 的支持。这一点或许从另一个侧面反映了 PyPy 的改变:如果需要,未来 PyPy 可以支持更多的最新特性。
对于这些改变,有评论认为可能是源于去年 Mozilla 基金会授予 PyPy 团队的高达 20 万美元的援助资金。现在看来,这项投资似乎物有所值。
另一个改进是基于 Python 2 的 C 扩展包支持。
此前 PyPy2(基于 Python 2.x )的开发进度一直领先于 PyPy3(基于 Python 3.x ),这次 PyPy2 也没有落后。PyPy2.7 中除了适配 Python 2.x 最新的 bug 修复版 Python 2.7.13 之外,最大的亮点在于大大改善了对 C 扩展包的兼容性。
此前,Python 的 C 扩展包并不能像其他 Python 代码一样流畅地通过 PyPy 解释运行,而是必须借助一个名为 cpyext 的 API 兼容层。在此次更新中,PyPy 进一步改善了 cpyext 的效率,用户在 PyPy2.7 中可以方便地 import 包括 Numpy、Cython、Pandas 等在内的各种 C 扩展包。
这一点对与那些只支持 Python 2.x 的项目来说无疑是个好消息,但先不要高兴的太早。因为 PyPy 团队明确在博客中指出:C 扩展包的运行速度,尤其是针对那些调用频繁的 C 语言短函数,PyPy 的运行速度可能会比 CPython 慢。但同时团队也表示,如果开发者真的发现 PyPy 在运行过程中有速度瓶颈的话,可以随时通知他们,他们会在第一时间做出改进。
关于这一点,目前一个有效的解决方案是直接把 C 扩展包移植到 PyPy,就像 NumPy 在 PyPy 下的分支版本 NumPyPy 那样,充分利用 PyPy 的原生接口来集成 C 代码。但是考虑到这种方案有悖于 PyPy 团队推出 cpyext 兼容层的初衷,因此并不是一个值得推荐的长期解决方案。
另外值得一提的是,消息称从 2020 年开始,社区将停止对 Python 2.x 版本的支持。但现实是,由于各种各样的不可抗力,届时可能仍然会有许多团队不得不继续使用 Python 2.x 的代码。那时 PyPy 将会是一个不错的选择,毕竟 PyPy 最初就是以 Python 2.x 为核心发展起来的。
原文地址:http://www.infoworld.com/article/3183527/application-development/pypy-powers-up-python-35.html
PyPy 博客地址:https://morepypy.blogspot.com/2017/03/pypy27-and-pypy35-v57-two-in-one-release.html
PyPy 最新代码地址:http://pypy.org/download.html
雷锋网(公众号:雷锋网)相关阅读:
TOP5%Kaggler:如何在 Kaggle 首战中进入前 10% | 干货