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