01-神魔宇宙 ***宇宙天國首部曲 彌勒天書閣 https://maitreya-books.com/ 神話從來就不是怪力亂神,而是原始先民在日常生活情況的觀察之中,所建立的真實認知。唯有相信神話中的真實,才能感受到神話的詩意隱喻背後,所具有的神聖力量。打開你的想像,打開你的相信,你才能知道神話告訴了你什麼宇宙生命的資訊。 生命起源於宇宙之中,生長於宇宙之中,結束於宇宙之中,因此,宇宙的起源就是生命背景的起源。生命形成的每一個階段,其實都在述說著生命的本能,也就是生命本就存在的一種力量,在此雖是說明一種狀況,然而將這狀況投射在生命的生活行動之中,你就會明白自己究竟有哪些不可思議的本能!

到底該不該使用Python?

2023081516:58

最近,大家總在吐槽Python:「雖然它是一種不錯的語言,但不適用於專業領域。」

前不久,我在LinkedIn上找到一篇帖子,主要建議初級開發人員應該學習哪種語言,以便獲得更好的工作機會,Python憑藉出色的表現穩居第一。



其它證據同樣表明:Python確實太受歡迎了!近日,TIOBE編程社區公布了「2023年8月編程語言排行榜」。數據顯示:Python依然排名第一,占比13.33%;C語言緊隨其後,排行第二,占比11.41%;C++位列第三,占比10.63%,與C語言差距為0.78%。



此外,Java和C#分別排在第四和第五位,占比分別為10.33%和7.04%。JavaScript在本月依然保持榜單第六位,占比為3.29%。

雖然Python如此受歡迎,但它能否持續流行依舊是一個重大問題,很多用戶普遍認為,如果持續使用將會使行業倒退好幾年。

1、局限:Python無法開發大型應用程序

Python對於開發大型應用程序不太友好,在工程化實踐中需要特殊的技術支持。

「我曾用Python編寫過大型應用程序很多年。由於Python入門非常簡單,在編寫大型應用程序時就像用樂高積木構建核反應堆一樣。」原作者在文章中形象地比喻道。

「但是,現在『反應堆』已經運行很久,輻射泄漏到處都有,我們需要到處『貼新磚』讓『反應堆』持續運轉。」

實際上,目前唯一能做的就是將「反應堆」封裝在混凝土中讓它冷卻下來,然後再用合適的建築材料構建出一個新的。

認為「Python無法開發大型應用程序」的網友認為它「不太友好」,在工程化實踐中需要特殊技術支持。



也有反對者認為:在大型項目中,與影響更大的其它因素相比,編程語言的語法、語義、範式等幾乎無關緊要。團隊經驗和熟悉度、開發管理、流程、實踐、支持工具、文檔、語言生態系統、語言成熟度、管理支持等都會對項目結果產生更大的影響。

另外,從技術層面來講,質疑Python無法開發大型編程語言只能反映提問者對相關開發缺乏了解。這些質疑一是源於Python的動態類型特性,使類型推斷變得困難,對代碼的靜態檢查和重構十分不利;二是由於Python代碼沒有編譯過程,因此缺少編譯時檢查錯誤機制。

關於動態類型特性質疑,Python從3.3版本起就引入類型聲明,因此,只要遵循規範編寫代碼,類型推斷和代碼重構就不是問題。

不久前,ChatGPT的問世也證明了Python可以寫出高性能、可擴展性強的大型分布式計算平台—Ray。目前,這個平台已匯聚超過1億的月活躍用戶。

「糟糕的應用程序架構是絕大多數應用產生性能瓶頸的原因,而不應該由開發語言來背黑鍋。」有些評論者這樣認為。

2、速度慢

誠然,Python與其它開發語言相比,在運行速度方面確實落後不少。究其根源,還是由於Python之父認為不需要過多關注Python的速度問題,認為它已經足夠快了。

確實,對於99%以上的任務來說,Python的速度夠快,快到足以支撐早期Google和Dropbox。

自那時起,Python的速度又有了顯著提升,但開發者仍要求Python運行得更快。因為,無論人們已經使用Python構建出算力多麼驚人的計算平台,它的計算能力在很多場景下依然更慢。

3、功能差

當然,Python是一種靈活的和duck類型的語言:我們鍵入代碼、保存它,然後僅在運行時才能根據輸入的數據確定語句始終有效、有時有效還是根本不可能實現。

此外,你在用Python編寫程序時,只能部分控制進入該函數的數據,需要嚴格檢查所有輸入的數據。

更糟糕的是,Python的duck式輸入方式可能會引入「可怕」代碼,這會帶來麻煩。

4、錯誤百出

我在用Python編寫大型應用程序的這些年裡,經歷過一些可怕的事情;如果這些應用程序是用理性的、安全的語言編寫的,這些事就不會發生。

*在幾年前的一個例子中,我設法說服組織用Rust重寫系統,效果非常不錯!

實際上,我曾多次在社區中發布用Python編寫的大型應用程序新版本,結果卻立即被錯誤「吞噬」;這些錯誤都是由Python代碼異常導致的。

*Python的捍衛者會說,這不是語言的缺陷,而是代碼審查和測試方法的缺陷。

*他們錯了!理論上,測試方法主要是查看每一行代碼並檢查每個輸入和場景,但實際上這並不可能!

好的編程語言的特點之一是:你不必檢查和測試內存中每個相關位置的排列;如果必須詳盡地檢查和測試每個「a=b+c」,程序將可能永遠無法應用於實踐。

我會經常查看Python函數,並想了解是否有人實際調用了它們以及攜帶了哪些參數。

我也經常不得不「求助」代碼庫的全文搜索功能尋找調用位置;不幸的是,即便沒有輸出任何結果,當我刪除相應函數時,程序依然會崩潰;就算程序沒有立即崩潰,也無法判斷程序是否會在某種情況下崩潰。

5、分叉進程,耗盡內存

用Python的另一個問題是內存。我的筆記本電腦有10個CPU內核,其中,Python應用程序大約占用1.2個。

這該怎麼辦呢?幸運的是,我可以在Python中使用分叉工作進程的功能處理請求,確保所有核心都能正常使用。

不幸的是,分叉進程的操作很快就耗盡了內存,所以我決定在處理完一定數量的請求後自行終止分叉,然後由Linux進行內存管理。雖然這並不是Python本身的問題,但Python使內存管理變得更加糟糕。

分叉工作進程還有另一個影響:Python使用引用計數法擊敗了寫時複製。為控制引用計數,保存只讀變量的內存塊也被寫入,從而耗費了一定的內存。

解決這個問題的有效方法是:讓編譯器對所有由主進程創建和由worker進程繼承的變量使用參考數值,而不必觸及到具有該參考數值的引用計數。

這是超級聰明的解決方案,但我認為應該沒這個必要。如果你需要破解編譯器才能讓Python為你所用,那這種語言又有什麼用呢?

總之,Python使編寫可靠、易於維護和快速的代碼變得非常困難。

6、將Python替換成GO

當我對Python忍無可忍之時就會轉向Go,它使用起來幾乎與Python同樣容易、安全,還能快速構建系統並生成高度優化的二進制本機代碼文件。

雖然Go也並不是完美的,但是,如果你想可靠和快速地編寫代碼,並在代碼失控時可以調試和重構,Go比Python好很多!-(編譯:王瑞平/51CTO)-

參考資料:

https://www.zhihu.com/question/321166662/answer/2937406779?utm_id=0

https://www.zhihu.com/question/321166662/answer/2937406779