0
本文作者: 恒亮 | 2017-03-22 17:39 |
雷鋒網(wǎng)消息。PyPy 團隊 21 日通過官方博客正式發(fā)布了兩個全新版本:PyPy2.7 v5.7 和 PyPy3.5 v5.7,即支持 Python v2.7 語法和 Python v3.5 語法的 PyPy 全新版本解釋器。
據(jù)博客介紹,此次更新的亮點有兩個:
● PyPy3.5 首次引入了對 Python 3 的語法支持;
● PyPy2.7 提升了對 C 擴展包的兼容性,可以直接運行 Numpy、Cython 和 Pandas 等。
大部分做 Python 開發(fā)的人或多或少可能都知道 PyPy:一種基于 Python 實現(xiàn)的 python 解釋器。由于其特有的 JIT 動態(tài)編譯,因此在運行速度上可以輕輕松松超過標準解釋器 CPython 好幾倍,甚至有報道稱在某些極端情況下 PyPy 可以比 CPython 快好幾百倍。基于這一重大優(yōu)點,PyPy 團隊長期以來的奮斗目標一直都是超越 CPython,成為各種 Python 實現(xiàn)版本中的王者。
但這一夢想一直沒能實現(xiàn)。究其原因,一個重要的障礙可能來自版本支持:PyPy 的更新一直落后于 Python 語言的主流版本,即它并不支持全部的 Python 語法,而且往往不適配那些最新的特性。久而久之,在用戶群里形成了一個刻板的固有印象:PyPy 只是那些不適配 Python 最新特性的 App 的替代品。
為了扭轉(zhuǎn)這種并不光彩的固有印象,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 的支持。這一點或許從另一個側(cè)面反映了 PyPy 的改變:如果需要,未來 PyPy 可以支持更多的最新特性。
對于這些改變,有評論認為可能是源于去年 Mozilla 基金會授予 PyPy 團隊的高達 20 萬美元的援助資金。現(xiàn)在看來,這項投資似乎物有所值。
另一個改進是基于 Python 2 的 C 擴展包支持。
此前 PyPy2(基于 Python 2.x )的開發(fā)進度一直領(lǐng)先于 PyPy3(基于 Python 3.x ),這次 PyPy2 也沒有落后。PyPy2.7 中除了適配 Python 2.x 最新的 bug 修復(fù)版 Python 2.7.13 之外,最大的亮點在于大大改善了對 C 擴展包的兼容性。
此前,Python 的 C 擴展包并不能像其他 Python 代碼一樣流暢地通過 PyPy 解釋運行,而是必須借助一個名為 cpyext 的 API 兼容層。在此次更新中,PyPy 進一步改善了 cpyext 的效率,用戶在 PyPy2.7 中可以方便地 import 包括 Numpy、Cython、Pandas 等在內(nèi)的各種 C 擴展包。
這一點對與那些只支持 Python 2.x 的項目來說無疑是個好消息,但先不要高興的太早。因為 PyPy 團隊明確在博客中指出:C 擴展包的運行速度,尤其是針對那些調(diào)用頻繁的 C 語言短函數(shù),PyPy 的運行速度可能會比 CPython 慢。但同時團隊也表示,如果開發(fā)者真的發(fā)現(xiàn) PyPy 在運行過程中有速度瓶頸的話,可以隨時通知他們,他們會在第一時間做出改進。
關(guān)于這一點,目前一個有效的解決方案是直接把 C 擴展包移植到 PyPy,就像 NumPy 在 PyPy 下的分支版本 NumPyPy 那樣,充分利用 PyPy 的原生接口來集成 C 代碼。但是考慮到這種方案有悖于 PyPy 團隊推出 cpyext 兼容層的初衷,因此并不是一個值得推薦的長期解決方案。
另外值得一提的是,消息稱從 2020 年開始,社區(qū)將停止對 Python 2.x 版本的支持。但現(xiàn)實是,由于各種各樣的不可抗力,屆時可能仍然會有許多團隊不得不繼續(xù)使用 Python 2.x 的代碼。那時 PyPy 將會是一個不錯的選擇,畢竟 PyPy 最初就是以 Python 2.x 為核心發(fā)展起來的。
原文地址: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
雷鋒網(wǎng)(公眾號:雷鋒網(wǎng))相關(guān)閱讀:
TOP5%Kaggler:如何在 Kaggle 首戰(zhàn)中進入前 10% | 干貨
Cloudera 發(fā)布自助式數(shù)據(jù)科學開發(fā)環(huán)境 原生支持 R、Python、Scala 和各大開源框架
支持Python!Facebook開源預(yù)測工具Prophet
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。