Python 3 正在毀滅 Python
對于 Python 社區來說,Python 3 是最糟糕的的一個東西了。我依舊記得,當我***次使用Python的時候,我已經在C++的領域摸爬滾打了很長時間,Python對我來說就像是一本圣經。我可以隨便打開一個文本編輯器,幾秒鐘或幾分鐘之后,一個可以正常工作的程序就誕生了,而不用去花費幾小時或幾天的時間。我仍記得,Python 2.5問世的時候添加了許多好用的新特性。我愛Python,但同時我也承認她有缺點,但是還都說得過去,所有的語言都有缺點。她的優勢在于她很有趣。盡管Python 3相比Python 2來說有了一些小的提升,但是她丟掉了很多Python 2的優勢。
Python 2最重要的一個優勢在于擁有眾多的第三方庫,可以用來做任何事情,但是Python 3沒有這個優勢。誠然,有很多的庫已經移植到Python 3了,但是有更多的庫沒有移植,也不容易移植。例如,你需要解析 X,但是X不像YAML和JSON那樣容易解析。很可能有一個第三方的解析器可供選擇,但是只可以用Python 2,而沒有針對Python 3的移植版本。此外,加之Python 2中的字節字符串(str)和Python 3 中的字節字符串(bytes)之間有著功能上的差異,使得這更難移植。而事實上,移植它非常困難,并且需要很多的小技巧(trick)來兼容Python 2和Python 3。所以,你有兩種選擇,要么使用Python 2 (已經不建議使用的語言)快速的開發你的程序,但這會花費你十倍以上的時間去移植相關的庫(以及所有的依賴)。要么,使用另一門同樣擁有很多庫的編程語言,但是不用再困擾于Python 2 / 3之間的問題。第二種選擇顯然不受歡迎,因為如果我們這樣做了,在我們的生產環境中已經有很多Python 3的程序了并且大部分Python 2的庫需要被移植。不管這些情況是否存在,人們要么繼續使用Python 2開發程序,要么選擇另一門不會打自己臉的語言。
Python 2的另外一個優點是,用它寫的程序幾乎不用更改就可以運行在下一版本上。如果你的軟件是基于Python 2的,那么就可能花費一大筆錢才能將其遷移至Python 3,因為你需要的工程可能相當地大,并且塞滿了各種類庫手冊,而他們不能被遷移。這在商業策略上非常不明智,因為你不得不為此花費 大量的金錢和工程師的時間才能把工程遷移到Python 3。你不妨問問其他人將整個代碼遷移到Ruby,或者,那還更劃算。至此,要是你不得不重寫你的軟件,你還會選擇Python 3嗎?不。
大多數比較受歡迎并且支持兼容Python 2和Python3的庫是通過運行在各自平臺上的語言子集(subset)來寫的。我最喜歡的Python庫之一的SQLAlchemy做的很好,Django也是這樣做的,但是稍有遜色。語言子集,我稱之為Python X,并不那么好用,需要很怪異的hack,并且通常性能不如Python2 或 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的標準,同時很多相應的類庫會被接入(盡管大多數肯定永遠都不可能),很多的投資會失去。到那時,整個社區就會很明顯地萎縮,失去她原有的光輝??纯碢erl的下場吧,人們會離開去別的地方。
英文原文:Python 3 is killing Python
譯文鏈接:http://www.oschina.net/translate/python-3-is-killing-python