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