Python 3 正在毀滅 Python
對(duì)于 Python 社區(qū)來(lái)說,Python 3 是最糟糕的的一個(gè)東西了。我依舊記得,當(dāng)我***次使用Python的時(shí)候,我已經(jīng)在C++的領(lǐng)域摸爬滾打了很長(zhǎng)時(shí)間,Python對(duì)我來(lái)說就像是一本圣經(jīng)。我可以隨便打開一個(gè)文本編輯器,幾秒鐘或幾分鐘之后,一個(gè)可以正常工作的程序就誕生了,而不用去花費(fèi)幾小時(shí)或幾天的時(shí)間。我仍記得,Python 2.5問世的時(shí)候添加了許多好用的新特性。我愛Python,但同時(shí)我也承認(rèn)她有缺點(diǎn),但是還都說得過去,所有的語(yǔ)言都有缺點(diǎn)。她的優(yōu)勢(shì)在于她很有趣。盡管Python 3相比Python 2來(lái)說有了一些小的提升,但是她丟掉了很多Python 2的優(yōu)勢(shì)。
Python 2最重要的一個(gè)優(yōu)勢(shì)在于擁有眾多的第三方庫(kù),可以用來(lái)做任何事情,但是Python 3沒有這個(gè)優(yōu)勢(shì)。誠(chéng)然,有很多的庫(kù)已經(jīng)移植到Python 3了,但是有更多的庫(kù)沒有移植,也不容易移植。例如,你需要解析 X,但是X不像YAML和JSON那樣容易解析。很可能有一個(gè)第三方的解析器可供選擇,但是只可以用Python 2,而沒有針對(duì)Python 3的移植版本。此外,加之Python 2中的字節(jié)字符串(str)和Python 3 中的字節(jié)字符串(bytes)之間有著功能上的差異,使得這更難移植。而事實(shí)上,移植它非常困難,并且需要很多的小技巧(trick)來(lái)兼容Python 2和Python 3。所以,你有兩種選擇,要么使用Python 2 (已經(jīng)不建議使用的語(yǔ)言)快速的開發(fā)你的程序,但這會(huì)花費(fèi)你十倍以上的時(shí)間去移植相關(guān)的庫(kù)(以及所有的依賴)。要么,使用另一門同樣擁有很多庫(kù)的編程語(yǔ)言,但是不用再困擾于Python 2 / 3之間的問題。第二種選擇顯然不受歡迎,因?yàn)槿绻覀冞@樣做了,在我們的生產(chǎn)環(huán)境中已經(jīng)有很多Python 3的程序了并且大部分Python 2的庫(kù)需要被移植。不管這些情況是否存在,人們要么繼續(xù)使用Python 2開發(fā)程序,要么選擇另一門不會(huì)打自己臉的語(yǔ)言。
Python 2的另外一個(gè)優(yōu)點(diǎn)是,用它寫的程序幾乎不用更改就可以運(yùn)行在下一版本上。如果你的軟件是基于Python 2的,那么就可能花費(fèi)一大筆錢才能將其遷移至Python 3,因?yàn)槟阈枰墓こ炭赡芟喈?dāng)?shù)卮?,并且塞滿了各種類庫(kù)手冊(cè),而他們不能被遷移。這在商業(yè)策略上非常不明智,因?yàn)槟悴坏貌粸榇嘶ㄙM(fèi) 大量的金錢和工程師的時(shí)間才能把工程遷移到Python 3。你不妨問問其他人將整個(gè)代碼遷移到Ruby,或者,那還更劃算。至此,要是你不得不重寫你的軟件,你還會(huì)選擇Python 3嗎?不。
大多數(shù)比較受歡迎并且支持兼容Python 2和Python3的庫(kù)是通過運(yùn)行在各自平臺(tái)上的語(yǔ)言子集(subset)來(lái)寫的。我最喜歡的Python庫(kù)之一的SQLAlchemy做的很好,Django也是這樣做的,但是稍有遜色。語(yǔ)言子集,我稱之為Python X,并不那么好用,需要很怪異的hack,并且通常性能不如Python2 或 Python 3。將現(xiàn)有的Python 2的庫(kù)移植到Python X有趣嗎?沒有什么趣味可言,反而很悲哀,因?yàn)檎怯捎谟腥げ旁炀土私裉斓腜ython。
不幸的是,Python 2 已經(jīng)不推薦使用了,Python 3用的也不多。Python 3 的改變比較小,沒有得到多少,反倒失去了不少。在過去的幾個(gè)月里,我使用Python 3編寫程序和服務(wù)。我個(gè)人感覺(沒有吹噓的意思),和用Python 2 寫程序沒有太多差別,除了第三方的庫(kù)少一些。真沒有其他的令人眼前一亮的了。Python的社區(qū)原本要在過去的幾年中轉(zhuǎn)移到Python 3,但是,他們逐漸發(fā)現(xiàn),人們正在轉(zhuǎn)向新的語(yǔ)言(或重新改進(jìn)過的舊語(yǔ)言)。這些語(yǔ)言大都擁有非常棒的功能,像強(qiáng)大的類型系統(tǒng),模式匹配,更好的性能,更好的支持線程和高并發(fā),更簡(jiǎn)單的FFI,更好的lambda表達(dá)式等等。
一種解決方案是fork Python 2.7,并繼續(xù)開發(fā)它,以向后兼容的方式添加新的功能,以便大多數(shù)不能移植的Python 2的應(yīng)用程序可以繼續(xù)演化和改善,并給人們和花費(fèi)了大量時(shí)間來(lái)開發(fā)它的公司帶來(lái)價(jià)值。這是正確的事(實(shí)際上,如果Guido和其他Python社區(qū)中的***以官方的名義這樣做而不是強(qiáng)制fork就更好了)。Python 3中的功能需要向后移植到Python 2,并且需要發(fā)布Python 2.8。對(duì)于少數(shù)已經(jīng)在使用純Python 3開發(fā)程序的人來(lái)說,可以使用像3to2這樣的工具來(lái)兼容Python 2.8。之后,Python 3就可以逐漸的退居幕后,這樣以來(lái),那些Python庫(kù)的維護(hù)者就可以使用Python 2而不用使用Python X了。
雖然還有些別的方案,但復(fù)興Python 2明顯是現(xiàn)在應(yīng)該做的,其他的都不值一提。因?yàn)楣俜降呢?fù)責(zé)人對(duì)Python 2的使用者十分不屑,所以別指望他們會(huì)來(lái)復(fù)興Python 2。如果社區(qū)不重振旗鼓并復(fù)興Python 2,那Python 3在幾年后就會(huì)變成Python的標(biāo)準(zhǔn),同時(shí)很多相應(yīng)的類庫(kù)會(huì)被接入(盡管大多數(shù)肯定永遠(yuǎn)都不可能),很多的投資會(huì)失去。到那時(shí),整個(gè)社區(qū)就會(huì)很明顯地萎縮,失去她原有的光輝??纯碢erl的下場(chǎng)吧,人們會(huì)離開去別的地方。
英文原文:Python 3 is killing Python
譯文鏈接:http://www.oschina.net/translate/python-3-is-killing-python