博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PyPy 双版本同步更新,不仅仅是快
阅读量:7100 次
发布时间:2019-06-28

本文共 1902 字,大约阅读时间需要 6 分钟。

据博客介绍,此次更新的亮点有两个:

● 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 在最新版本中做出了改变。

  PyPy3.5 引入 Python 3 支持

改变之一是对 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 万美元的援助资金。现在看来,这项投资似乎物有所值。

PyPy 双版本同步更新,不仅仅是快

  PyPy2.7 提升 C 扩展包兼容性

另一个改进是基于 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 为核心发展起来的。

原文地址: 

PyPy 博客地址: 

PyPy 最新代码地址: 

本文作者:恒亮
本文转自雷锋网禁止二次转载,
你可能感兴趣的文章
JavaRebel的简单配置
查看>>
获取Extjs文本域中的内容
查看>>
man who
查看>>
Git详解之六 Git工具
查看>>
zookeeper 伪集群
查看>>
RabbitMQ 消息确认
查看>>
Ubuntu打印服务器配置
查看>>
用模型取代字典的好处
查看>>
我的友情链接
查看>>
Windows Server 2012组策略改进
查看>>
shell 打印顺倒三角
查看>>
Fedora 17 Gnome 3 备用模式
查看>>
我的友情链接
查看>>
Mac 键盘快捷键
查看>>
FastDFS海量数据分布式存储方案
查看>>
Nginx实战之--后端节点健康检查
查看>>
redhat 5.3 安装mysql详细步骤
查看>>
Openstack Mitaka for Centos7.2 部署指南(二)
查看>>
服务器上排除问题的头五分钟
查看>>
我的友情链接
查看>>