網(wǎng)傳Python即將被淘汰?
Python語法簡單,使用方便,有數(shù)量極為龐大的軟件包可以使用,使用Python開發(fā)的效率極高!但Python又被無數(shù)人吐槽運(yùn)行效率低,更要命的是工程化開發(fā)(多人協(xié)作開發(fā)、代碼量很大)時(shí)極易踩雷,出現(xiàn)bug難以追蹤!有很多人吐槽Python應(yīng)該被淘汰,傳著傳著就成了Python即將被淘汰!
下面我重點(diǎn)講講Python被人傳言即將被淘汰的兩大致命缺陷!
一、Python運(yùn)行效率低
Python是一門動(dòng)態(tài)語言,簡單的解釋一下它運(yùn)行慢的原因:Python解釋器在程序運(yùn)行時(shí)遇到首次出現(xiàn)的變量,要根據(jù)它的值動(dòng)態(tài)分配內(nèi)存;再次用到該變量時(shí)要計(jì)算它的引用次數(shù);在引用次數(shù)完畢后還要負(fù)責(zé)銷毀變量回收內(nèi)存。而靜態(tài)語言是在編譯時(shí)就計(jì)算好變量占用的空間,程序加載時(shí)已經(jīng)為其分配好內(nèi)存,至于銷毀變量回收內(nèi)存的方式不同的靜態(tài)語言又有區(qū)別,這里不再贅述。通過比較可以得知,Python的便利是因?yàn)镻ython解釋器做了非常多額外的工作,Python的效率低也正是因?yàn)镻ython解釋器做了過多的工作。
另外一個(gè)Python是30年前開發(fā)的編程語言,那時(shí)候還沒有多核CPU,所以那時(shí)作者沒考慮到Python運(yùn)行時(shí)怎么利用多核運(yùn)行,Python代碼運(yùn)行都是靠Python解釋器將代碼翻譯成電腦可以執(zhí)行的二進(jìn)制指令。后來出現(xiàn)了多核CPU,很多人為了提高Python運(yùn)行效率開發(fā)了Python線程包和進(jìn)程包,但有一座大山至今繞不過去——GIL(全局解釋器鎖),造成Python軟件始終沒法真正利用多核CPU。
二、Python開發(fā)工程化易踩雷
Python不能強(qiáng)制約束變量類型、函數(shù)參數(shù)和方法參數(shù)的類型。Python程序有非常多的bug一方面是由于函數(shù)調(diào)用者傳參不符合要求造成的;另一方面很多函數(shù)編寫者編寫函數(shù)時(shí)對(duì)參數(shù)檢查不夠細(xì)致,對(duì)參數(shù)不符合要求時(shí)不返回提示信息或提示信息不足。這兩種情況造成了很多隱性bug極難發(fā)現(xiàn)!在所有代碼代碼量小時(shí)這些問題不明顯,但對(duì)于軟件開發(fā)工程化(工作量越來越大、參與人數(shù)越來越多)是一個(gè)相當(dāng)要命的缺陷!
目前Python新版本也增加了參數(shù)類型提示的語法和功能,期望上述問題有所改觀,但Python要考慮兼容以前版本的軟件包,無法做到類似typescript那樣強(qiáng)制約束!順帶提一嘴,JavaScript也是一門類似Python的動(dòng)態(tài)語言,也有對(duì)參數(shù)類型約束弱的毛病,在工程化開發(fā)時(shí)同樣被無數(shù)人吐槽,所以目前前端工程化開發(fā)很流行用TypeScript(偽靜態(tài)語言,最終還是要編譯成JavaScript代碼執(zhí)行),TypeScript比JavaScript強(qiáng)在對(duì)參數(shù)約束力,參數(shù)不合要求根本不能通過編譯!
總結(jié):
該死的歷史包袱!Python極難繞過GIL(全局解釋器鎖)以提高對(duì)多核CPU的利用率!!!Python也極難強(qiáng)制約束參數(shù)類型!!!所以Python被傳言即將被淘汰不奇怪!
但是就好比瑞士軍刀,一把小小的瑞士軍刀涵蓋了剪刀、螺絲刀、錘子、尺子、起子眾多功能,雖然它不如專門的剪刀、螺絲刀、錘子趁手,但就是有人愛用瑞士軍刀!只要這世上還有人愛用瑞士軍刀,那么這世上一樣會(huì)有人愛用Python!!!
Python是一種優(yōu)點(diǎn)、缺點(diǎn)都極為鮮明的編程語言,它即將被淘汰是傳言!
但如果想要吃程序員這碗飯,只會(huì)Python的程序員即將被淘汰不是傳言!