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

01編程

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


1240

爲何要問這個問題?安全

我想要用Python實現WebAssembly,這並非什麼祕密。這不只可讓Python進入瀏覽器,並且因爲iOS和Android都支持將JavaScript做爲應用的一部分運行,所以Python也能夠進入移動開發。想到這些我就以爲興奮。app

可是每當想到建立一個新Python實現的艱鉅任務時,我就會不斷地問本身:編程語言

「Python到底是什麼?」ide

咱們使用CPython已經很長時間了,以致於我懷疑咱們大多數人都認爲「 Python == CPython」。PyPy試圖將兼容作到極致,因此他們打算實現CPython的實現細節。基本上,我所知道的大多數Python實現都會爲經過CPython的測試套件而努力,並儘量與CPython兼容。函數

這就有點可怕了。性能

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

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

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能夠實現這一點。我認爲這些都有可能,這些都有可能激發人們的興趣,進而產生更好的結果。

相關文章
相關標籤/搜索