Python 3 正在毀滅 Python

jopen 10年前發布 | 49K 次閱讀 Python

英文原文:Python 3 is killing Python

  Python 3 毫不費力地成為發生在 Python 社區里最糟糕的事。我還記得第一次使用 Python 的時候,我還在花大量時間在 C++ 這塊上,而 Python 就像是我的一次開光。我可以打開文本編輯器用幾秒鐘或者幾分鐘寫出一個可以工作的程序,而不是用幾小時或幾天。我記得 Python 2.5 出來的時候,帶來了一大堆嶄新的簡潔的語言特性。我愛 Python,但是我承認它有弱點,但是沒關系,所有編程語言都有。它強大的地方使其變得有趣。Python 3 相比 Python 2 擁有一些小小的增量的改進,但同時卻失去了很多 Python 2 強大的東西。

  Python 2 強大的一個地方是它身后巨大的第三方庫,恩,可以做任何事。Python 3 沒有這個。是的,很多庫已經移植了,但是仍然有數以十倍的庫沒有移植過去,而且也不太容易。舉個例子,你需要解析X格式,而X解析起來并不簡單,它不是常 見的像 YAML 或 JSON 的格式。很有可能這個為X的解析器在 Python 2 里已經寫好了,但是還沒有移植到 Python 3。另外,考慮到 Python 2 的字節字符串(str)和 Python 3 的字節字符串(bytes)之間的根本不同,移植起來將不會那么容易。事實上會很難移植,并且需要一點移植技巧,像維護 Python 2 和 Python 3 的兼容性那樣。因此,你有一些選擇,可以用 Python 2(一個被棄用的語言)快速寫你的 app,導入一些庫(還有它們所有的依賴),可能會有十倍之長;或者可以用另外的編程語言,它也有很多第三方庫,但是不會面臨 Python 2/3 的問題。第二個選擇顯然不是很流行,因為不然,我們就有大量 Python 3 寫的 app 產品,然后 Python 2 的一大批庫會被移植過來。(譯者注:這個邏輯貌似有點問題?)這兩種都沒有發生。人們要么繼續用 Python 2 寫軟件,要么選擇另一個不自己打臉的語言。

  另外一個 Python 2 的強大之處是用它寫的程序幾乎總是能夠不用大量修改而運行在 Python 的下一個版本上。如果你的公司運營在用 Python 2 寫的軟件上(就像很多公司那樣),移植到 Python 3 將會消耗大量資金,因為你的 requirements 文件可能十分大,并且充斥著各種還沒有移植到 Python 3 的庫。沒有哪個理智的商業理由會花成百上千甚至百萬美元價值的開發時間來移植到 Python 3。如果相比更便宜的話,你都可能會要求某某把他們整個代碼庫移植到 Ruby。現在如果你必須要重寫你的軟件的話,你會選擇 Python 3 嗎?不。

  那些支持 Python 2 和 3 的比較流行的庫幾乎都只用該語言的子集,這樣在兩個平臺上就都能運行。SQLAlchemy,我喜愛的 Python 庫之一,它這樣做的很好。Django 也如此,但是做得不那么好。這個語言子集,我會稱之為 Python X,使用起來很沒意思,需要一些奇淫技巧,并且通常沒有 Python 2 或者 Python 3 強大。把 Python 2 的庫移植到 Python X 有意思嗎?很可悲的是一點意思都沒有,因為令 Python 偉大的就是這些樂趣。

  Python 2,很可悲,已經被棄用了。Python 3 頹廢得沒人用。Python 3 的改動不大。沒有帶來多少好處,但缺失去了很多。在過去的幾個月,我用 Python 3 構建了一些項目和服務。我沒有被它打敗。這很像用 Python 2 寫軟件,除了只能獲得很少的一些庫。這里沒有什么令人驚嘆的事情。Python 社區在過去的幾年本應該轉移到 Python 3 了,但是結果就是越來越明顯看到人們轉移到新的語言(或者重新發現的舊語言)上。這些語言有些也有很好的特性,像強大的輸入系統,模式匹配,更出色的性 能,更好的多線程和并發,更簡單的外部函數接口(FFI),更漂亮的 lambda 語句等等。

  一個方案是 fork Python 2.7,然后繼續發展這門語言,加入一些盡量向后兼容的特性,這樣那些不能移植(由于一些財政方面的約束)的 Python 2 應用程序可以繼續演進和改善,進而給那些投入如此多時間開發他們的公司或個人帶來價值。這才是需要去做的正確的事(事實上,如果 Guido 和 Python 社區里其他主導人能夠官方地做這件事,而不是強迫大家 fork,那會是最好的)。Python 3 里的特性可以向后移植到 Python 2,然后發布 Python 2.8。那些已經花時間用純 Python 3 寫新的軟件的人可以使用例如 3to2 的工具變成與 Python 2.8 兼容。Python 3 然后就可以為了 Python 庫維護者們能夠用 Python 2 代替 Python X 而安靜地離去。

  還有一些其他的方案,但是拯救 Python 2 顯然是要做的正確的事,所以也不值一提了。Python 2 的拯救不會來自官方,因為負責這類事的人表現出了對 Python 2 使用者極大的鄙視。如果社區的人不團結起來拯救 Python 2,Python 3 數年之后會成為 Python 的標準,然后很多庫將要被移植(盡管很多肯定不會),然后很多的投入也將會白費。社區那時候會大量的萎縮,并失去往日的光芒。參考 Perl。人們將把它遺忘。

  翻譯: 伯樂在線 奇風余谷
  譯文鏈接: http://blog.jobbole.com/69811/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!