Python 編程語言的核心是什麼?

雲棲號資訊:【點擊查看更多行業資訊
在這裏您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

爲什麼要問這個問題?

我想要用Python實現WebAssembly,這並不是什麼祕密。這不僅可以讓Python進入瀏覽器,而且由於iOS和Android都支持將JavaScript作爲應用的一部分運行,因此Python也可以進入移動開發。想到這些我就覺得興奮。

但是每當想到創建一個新Python實現的艱鉅任務時,我就會不斷地問自己:

“Python究竟是什麼?”

我們使用CPython已經很長時間了,以至於我懷疑我們大多數人都認爲“ Python == CPython”。PyPy試圖將兼容做到極致,所以他們打算實現CPython的實現細節。基本上,我所知道的大多數Python實現都會爲通過CPython的測試套件而努力,並儘可能與CPython兼容。
這就有點可怕了。

CPython實現的Python非常動態,它公開了許多東西,只有當你以某種方式使用解釋器實現Python纔有意義。例如,PyPy有一個基本的解釋器使用JIT,但是你可以通過Python中的很多東西來迫使PyPy關閉JIT並堅持使用字節碼。僅憑REPL就讓Python變得十分動態,因爲輸入到REPL的所有內容都會由解釋器動態地解析、編譯和執行。

因此我開始思考:Python到底是什麼的問題?這門語言的核心究竟是什麼?究竟Python實現需要覆蓋到哪些基本功能,才能成爲人們心目中認可的Python實現?還有以我來看,將Python直接編譯成WebAssembly的實現需要付出多少代價?

Python是否需要REPL?

我真正開始思考這個問題是當我開始思考將Python編譯成WebAssembly都需要什麼的時候。這並不是要實現另一個解釋器,而是從Python源代碼產生靜態的WebAssembly,並且它依然可以稱爲“Python”。

我知道的,通過eva()或compile()進行動態編譯可能不容易實現,因爲WebAssembly的安全模型會在加載時驗證模塊。這意味着沒有辦法在其他代碼的內存空間內運行任意代碼,這可能會加劇實現REPL的難度。

但這讓我思考:Python真的需要REPL嗎?別誤會我的意思,它非常方便,但是我的意思是,如果某個實現不包含REPL,那麼它還是Python嗎?我認爲無REPL的Python仍然是Python,只是缺少(可能是關鍵的)功能。

這不禁讓我思考必須將Python的哪些部分視爲“ Python”的想法。

沒有locals()行不行?能夠將定義的所有局部變量及其值都收集到一個字典中,這是非常動態的東西。如果你使用像CPython這種解釋器,那麼只需要從當前的執行幀裏取一些東西就能獲得locals。但在編譯語言中,實現這一點需要大量工作,因爲你必須知道應當何時收集這些信息,因爲調用locals()的時候並不一定所有信息都存在。

如果有人重載了locals()怎麼辦?同樣,在CPython中這也不是什麼問題,因爲builtins模塊有一個__dict__屬性,只需要重載它,就會向下傳遞到以後的調用中。但在編譯語言中,做類似的檢測需要大量的工作,最終會影響性能。

那麼sys.settrace()呢?它會觸發每個字節的回調,而如果代碼已經編譯,這一點是無法實現的。儘管你可以通過檢查每行末尾是否設置了跟蹤函數來模仿這一行爲,但這似乎有點過了,因爲絕大多數情況下這種鉤子並不存在(儘管可以實現爲編譯器開關)。

那麼sys._getframe()呢?編譯語言並不一定能夠直接訪問每個執行幀,那麼你還要不要模擬這一行爲?由於任何函數都可以請求執行幀,你必須時刻準備着提供執行幀。

可見,Python中有很多東西加劇了編譯的難度(因此Nuitka擁有更大的能力來應對這一挑戰)。但是我敢打賭,上面提到的內容在99.9%的情況下都不會使用,因此,如果這些功能沒有實現,那麼是否仍可以將其視爲“Python”?

具備多少兼容性纔有意義?

這個問題我沒有很好的答案。但是這個問題的答案標誌着實現Python的難度以及與現有軟件的兼容性。我會說,我認爲WebAssembly不需要支持大量的Python軟件。WebAssembly可以訪問Rust和JavaScript等其他語言生態系統,因此你需要的某個東西完全有可能在其他語言中已經實現了。

我沒有答案

也許我們可以開發一個將Python代碼直接轉換爲WebAssembly並犧牲性能兼容性的編譯器。也許我們可以開發針對WebAssembly設計的解釋器,同時與先前已有的代碼保持兼容性。也許可以僅在其WebAssembly工作中支持RustPython。也許Pyodide可以實現這一點。我認爲這些都有可能,這些都有可能激發人們的興趣,進而產生更好的結果。

對此,你怎麼看呢?

原文:https://snarky.ca/what-is-the-core-of-the-python-programming-language/

【雲棲號在線課堂】每天都有產品技術專家分享!
課程地址:https://yqh.aliyun.com/live

立即加入社羣,與專家面對面,及時瞭解課程最新動態!
【雲棲號在線課堂 社羣】https://c.tb.cn/F3.Z8gvnK

原文發佈時間:2020-07-14
本文作者:Brett Cannon
本文來自:“csdn”,瞭解相關信息可以關注“csdn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章