Python 3 這十年
本來想寫點關於 Andrew Godwin – Taking Django Async 這個視訊的,但是因為這個視訊資訊量太大,還在多刷之中,所以我決定寫另外一個視訊的解析
來自 CPython 核心開發者的一個分享 Python 3這十年
Python 3 在 2008 年正式釋出,風風雨雨也走過了整整十年。同時官方早已宣佈,在 2020 年對 Python 2.x 停止維護。所以某種意義上來講,今年的 PyCon 2018 的這個 Topic 是一個非常具有特殊意義的分享
初始之地
故事開始於那個難忘的夏天
在 2006 年,PEP 3000 正式提出,旨在於解決一些 Python 2 中的遺留問題
-
大整數與整數的分裂,新式類與舊式類的分裂
-
除法的實現誰的姿勢水平更高一點
-
Unicode / str 傻傻分不清楚
-
相對引入和絕對引入
在經過社群的辛勤工作後,在 2008 年,Python 3 正式釋出
正當開發者們歡天喜地的慶祝 Python 3 釋出的時候,他們沒有注意到,事情正在起變化
凜冬將至
Python 3 首當其衝的問題便是版本割裂,開發者們的遷移代價十分的巨大。分享裡,開發者講了一個冷笑話。
在早期 Python 3.x 和 Python 2.x 都沒有引入一些相容特性的時候,對於社群而言,版本割裂似乎是無可避免的一件事
在當時 Python 2.6 和 Python 3 中,如果想進行遷移,可能會面臨這樣一些問題
這樣的問題,導致在 Python 3 最開始推出的時候,基本沒有包能去相容他
同時開發者舉了兩個當時的老大難的例子,一個是 Django,一個是 Twisted
為了不被人砍死,社群一度有人喊出了 Python 2.8 的口號!
但是隨著情況的改善,社群喊出了「2.8是不可能的,這輩子都是不可能」的口號
知春到
隨著 Python 3 的逐漸迭代與妥協,凜冬已過。首先開發者解決了第一個大問題:包管理
同時社群也正式給出了一些真正可行的遷移建議
同時針對於歷史程式碼比較多的情況,也給出了相對應的 tips
(注:這一點,instagram 起了一個好頭,參見 Lisa Guo, Hui Ding Keynote PyCon 2017)
同時社群的開發者,也在對 Python 3 進行一些迭代,以減少大家的遷移負擔
其中包括但是不僅限於 PEP 414 重新引入 u``
,PEP 461 重新引入 b`%`
。
社群的努力沒有白費,在遷移成本減小,利好增加的情況下,2/3 割裂的情況得到了極大的改善
在 2018 年所做的一個調查中,支援 Python 3 的包所佔的比例已經達到了 90+%
社群的遷移動力來自於三方面,一方面是 Python 3 的效能實打實的提升,開發者舉了兩個例子,
另外一個是 instagram 給出的資料:
第二個方面是修復了過去 Python 2.x 中遺留下的一些坑
包括不僅限於 Python 2 中的隨機數種子並不是真的隨機等等。
另一方面是 Python 3 中所引入了很多全新的東西,來幫助開發者更好的寫程式碼,比如在 Python 3 中引入了這樣一些新的 module
其中比較重頭戲的幾個就是,PEP 3156 引入的 asyncio , PEP 3148 引入的 future 模型,PEP 557 引入的 DataClass
等等
於此同時,Python 3.x 除了引入新的 module 以外,還不斷地帶來了新的語言特性
比如 PEP 498 引入 f-string , PEP 492 引入 async/await , PEP 484 引入 Type Annotation(再次安利這貨啊,可以單獨寫文章介紹了,簡直神器)等等
最後,分享者給大家分享了一下 Python 2 現在的境況。
To Be Continued
Python 2/3 的這十年,無疑是 Python 史亦或者是計算機史上最重大的一次事件之一。我們見證了 Python 的成長,也見證了 Python 開發組們的前輩的成長。所以這十年,對於我們每一個 Python 開發者而言都是意義重大的十年。
不管 Python 的未來會怎麼樣,下一個十年裡,Python 又會變成什麼模樣。衷心祝願我們每一個人都能一如既往的盡情享受寫 Python 的樂趣與成就感。
Life is simple, We use Python !