Python核心開發者解釋為何Python 4.0不會像3.0一樣,答案在這里

翻譯:oschina ,英文:Nick Coghlanwww.oschina.net/translate/why-python-4-wont-be-python-3?print

當提出向后不兼容的更改時,python-ideas的新手偶爾會提出“Python 4000”的概念,這些更改不給當前合法的Python3代碼提供明確的移植路徑。畢竟,我們允許Python 3.0進行這種更改,那么為什么我們不允許它用于Python 4.0呢?

我現在已經聽過那么多問題了(包括更關注的措辭“你做了一次大的向后兼容性突破,我怎么知道你不會再這樣做了?”),我想我會在這里記錄我的答案,所以我將來能夠將人們引回來。

現在對Python 4.0的預測是什么?

我現在的預測就是Python 4.0只不過是“Python 3.9后的版本”。就是這樣。對語言來說沒有重大改變,沒有主要向后兼容突破——從Python 3.9到4.0應該就像從Python 3.3 到3.4(或者從2.6到2.7)。我甚至預測穩定的應用程序二進制接口(Application Binary Interface)(在PEP 384中首次定義一樣)會在這個過渡邊界上保留。

按照當前語言特性發布的速度(大約每18個月),意味著我們可能會在2023年的某個時候看到Python 4.0,而不是看到Python 3.10。

那么 Python 將如何繼續發展?

首先,Python 增強提議流程沒有任何變化 —— 仍然提出了后向兼容的更改,添加了新模塊(如 asyncio)和語言功能(如 yield from)以增強 Python 應用程序可用的功能。隨著時間的推移,Python 3 在默認情況下提供的功能方面繼續領先于 Python 2,即使 Python 2 用戶可以通過第三方模塊或 Python 3 的后端訪問同等功能。

在解釋器實現和擴展上競賽還將繼續探索增強Python的不同方法,包括PyPy對JIT編譯器生成和軟件事務存儲的探索,以及在科學和數據分析社區中對充分利用現代CPU和GPU所提供的矢量化計算能力的面向陣列編程的探索。與其他虛擬機運行時(如JVM和CLR)的集成也有望隨著時間的推移而改進,尤其是當Python在教育領域取得的進展可能使其作為嵌入式腳本語言在更多的應用程序的運行時的運行環境中更受歡迎。

對于向后不兼容的改動,PEP 387提供了在Python 2系列中使用多年的方法的合理概述,并且至今仍然適用:如果某個功能被識別為過于有問題,那么它可能會被棄用并最終被移除。

然而,對開發和發布過程進行了許多其他變更,這使得在Python 3系列中不太可能需要這些棄用。

正如CPython核心開發團隊和Python Packaging Authority之間的協作,以及將pip安裝程序與Python 3.4+的捆綁所揭示的,越加注重的Python Package Index,在它們能足夠穩定適應相對較慢的語言更新周期之前,減少了將模塊添加到標準庫的壓力。

“臨時API”概念(在PEP 411中引入)使得可以在提供標準向后兼容性保證之前,對可能從更廣泛的反饋中受益的庫和API應用“穩定”期。

很多累積的遺留行為確實在Python 3過渡中被清除了,而Python和標準庫的新增功能要求比Python 1.x和Python 2.x時期要嚴格得多。

“單一來源”Python 2/3庫和框架的廣泛開發強烈鼓勵在Python 3中使用“文檔棄用”,即使功能被更新的,首選的替代品替換。在這些情況下,文檔中會放置棄用通知,建議新代碼首選的方法,但不添加編程棄用警告。這允許現有代碼(包括支持Python 2和Python 3的代碼)保持不變(以犧牲新用戶為代價,在維護現有代碼庫的任務時可能需要稍微學習一些)。

從(多數是)英語到所有書面語言

同樣值得注意的是,Python 3預計不會像它原來那樣具有破壞性。在Python 3中所有與之相關的向后不兼容的改動中,許多嚴重的遷移障礙可以放在PEP 3100的一個小基點上:

使所有字符串都是Unicode,并具有單獨的bytes()類型。新的字符串類型將被稱為’str’。

PEP 3100是Python 3變更的基地,它被認為是毫無爭議的,單獨的PEP是沒有必要的。這個特殊變化被認為是無爭議的原因是因為我們使用Python 2的經驗表明Web和GUI框架的作者是正確的:作為應用程序開發者明智地處理Unicode意味著確保所有文本數據從二進制轉換為盡可能接近于系統邊界,按照文本處理,然后轉換回二進制以用于輸出的目的。

遺憾的是,Python 2并不鼓勵開發人員以這種方式編寫程序 – 它大大模糊了二進制和文本數據之間的界限,并使開發人員難以將兩者分開,更不用說在代碼中了。因此,Web和GUI框架作者必須告知他們的Python 2用戶“始終使用Unicode格式文本。如果不這樣做,你可能會在處理Unicode輸入時遇到晦澀難以處理的bug”。

Python 3是不同的:它在“二進制域”和“文本域”之間實現了更大的隔離,使得編寫正常的應用程序代碼變得更加容易,同時使得編寫二進制及文本邊界不太清晰的系統中的代碼變得更加困難。我在其他地方更詳細地介紹了Python 2和Python 3之間文本模型的實際變動。

Python 對 Unicode 支持的這場革命是發生在更大的計算文本操作遷移的背景下的,從僅支持英文的 ASCII(1963年正式定義),到“二進制數據+編碼聲明”的模型(包括 C/POSIX locale 和在20世紀八十年代后期引入的 Windows 代碼頁系統)的復雜性以及從最初的 16 位 Unicode 標準版本(1991年發布)到相對全面的現代 Unicode 代碼點系統(1996年首次定義,每幾年發布一個包含了新的主要更新的版本)。

為什么要提這一點呢?因為這種切換到“默認情況下使用 Unicode”是對 Python3 中后向不兼容最具破壞性的,而不像其他改動(它們與語言本身相關性更高),它是文本數據表示和操作方式在更大行業廣泛變化的一小部分。隨著 Python 3 轉換清除了語言特定問題,與 Python 早期版本相比,新語言功能的進入門檻要高得多,而且正在進行的從“帶編碼的二進制數據”切換到用于文本建模的 Unicode 的規模都比其他行業更廣泛,我看不到任何需要 Python 3 樣式后向兼容性中斷和并行支持的更改。相反,我希望我們能夠在正常的變更管理流程中適應任何未來的語言演變,任何無法以這種方式處理的提案都會被否決,因為它會給社區和核心開發團隊帶來不可接受的高昂成本。

關于作者Nick Coghlan – Nick是CPython的核心開發人員,也是Python Software Foundation的董事會成員。他是幾個公認的Python增強建議的作者或共同作者(包括PEP 343,它在Python 2.5中添加了with語句和上下文管理器,PEP 453看到了與Python 3.4捆綁在一起的pip安裝程序),并且還接受了一些Guido van Rossum代表BDFL代表的PEP。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容

  • 不管我們如何希望PHP永遠天下第一,亦或是Java永久無敵,更或者希望C語言永遠是最好的語言。然而,筆者今天搜索百...
    Python編程社區閱讀 6,974評論 5 28
  • 第六章:數字 第七章:序列,列表,元組 1.序列 序列類型有著相同的訪問模式:它的每一個元素可以通過指定一個偏移量...
    m風滿樓閱讀 910評論 0 2
  • 更新時間:2016/5/13 介紹 本文檔所提供的編碼規范,適用于主要的Python發行版中組成標準庫的Pytho...
    超net閱讀 5,886評論 0 15
  • 我總說忘記你 離開你 卻發現 我錯了 我忘不了你 更離不開你 我好想你 想你的一切 你還在的一切 你未離開的一切 ...
    從前慢QAQ閱讀 294評論 0 2
  • 很久以前就聽過成為自己的父母這句話,不過只是簡單地以為我們要學會照顧自己。這當然是內容之一,但這里的照顧不僅簡簡單...
    何處漣漪閱讀 189評論 1 0