中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python編程語言的核心是什么

發布時間:2021-10-29 15:28:01 來源:億速云 閱讀:135 作者:iii 欄目:編程語言

本篇內容介紹了“Python編程語言的核心是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

 為什么問這個問題?

我們需要一個用于WebAssembly的Python實現,這已經不是什么秘密了。它不僅將Python引入到瀏覽器中,而且由于iOS和Android都支持將JavaScript作為應用的一部分運行,它也將Python引入到移動端。這一切都讓我興奮。

但是,當想到創建一個新的Python實現這一令人生畏的任務時,我的大腦也開始問這個問題:Python到底是什么?我們與CPython一起生活了這么長時間,我懷疑我們中的大多數人只是簡單地認為“Python  ==  CPython”。PyPy試圖做到兼容,以便實現CPython的實現細節。基本上,我所知道的大多數Python實現都努力通過CPython的測試套件,并盡可能地與CPython兼容。

這是令人生畏的。由CPython實現的Python是非常動態的,并且暴露了許多只有在使用解釋器實現Python時才有意義的東西。例如,PyPy有一個用于JIT的基線解釋器,但是在Python中可以使用許多東西來強制PyPy關閉JIT并堅持使用字節碼。僅靠REPL就可以使事情變得非常動態,因為解釋器會立即對進入REPL的所有內容進行動態解析、編譯和執行。

這讓我開始思考Python到底是什么?這門語言的核心是什么?所有的Python實現需要涵蓋什么樣的基線,才能真正能夠將自己稱為人們仍能認出的Python實現?或者從我的角度來看,一個人需要實現多少才能直接編譯Python到WebAssembly,并且仍然被認為是Python實現?

Python編程語言的核心是什么

Python需要REPL嗎?

真正讓我開始思考這個問題的是當我開始思考如何將Python編譯成WebAssembly?沒有實現另一個解釋器,但實際上發出靜態WebAssembly從Python源代碼,并仍然合理地稱為“Python”。

我知道的一件事是,通過eval()或compile()進行動態編譯可能不太容易,因為WebAssembly的安全模型在加載時驗證模塊。這就意味著在其他代碼的內存空間中并不存在運行任意代碼的結構,這可能會使REPL的實現變得棘手。

但這讓我思考:Python真的需要REPL嗎?不要誤解我的意思,它非常方便,但是如果一個實現沒有REPL,它就不再是Python了嗎?我認為沒有應答的Python仍然是Python,它只是缺少一個(潛在的關鍵)特性。

這讓我開始思考Python的哪些部分需要被認為是“Python”?

沒有當地人你能生活嗎?它是一個非常動態的事情,能夠任意地收集所有定義的局部變量和它們的值到一個字典。如果你在一個像CPython這樣的intepreter中,你只需要從當前執行框架中獲取一些局部變量。但是在編譯語言中,這需要做更多的工作,因為您必須知道何時收集所有這些信息,因為調用local()時,這些信息并不一定是到處都有的。

或者人們重寫local()本身怎么樣?在CPython中,這不是什么大問題,因為builtins模塊有一個__dict__,你可以覆蓋它,它將簡單地傳播到任何未來的調用。但是在編譯語言中,進行這種檢測需要花費更多的精力,而且這樣的檢查最終會降低性能。

關于sys.settrace ()呢  ?它實際上會觸發每個字節碼的回調,如果代碼被編譯,它就不能正常工作。您可以通過檢查是否在每一行后面設置了跟蹤函數來偽造它,但是當您大多數時候沒有設置這樣的鉤子時,這樣做似乎有點過分(不過,它可能是在這種支持下編譯的編譯器標志)。

那么sys._getframe()呢?編譯語言并不一定要直接訪問執行框架,所以您需要費心去模擬它嗎?由于執行幀可以被任何函數請求,所以您需要隨時準備按需提供執行幀。

正如您所看到的,Python中有很多東西使得編譯變得困難(Nuitka因此更有能力接受這個挑戰)。但我敢打賭,我上面提到的東西你在99.9%的時間里都不會用到,所以如果一個實現沒有使用它們,它還能被認為是“Python”嗎?

有多少兼容性是有用的?

我對這個問題沒有很好的答案。但是它的答案說明了實現Python的難度以及它與現有軟件的兼容性。我想說的是,我認為WebAssembly不需要支持大量的Python軟件就可以發揮作用。WebAssembly可以訪問其他語言生態系統,比如Rust和JavaScript,所以用其他語言實現需要的東西的可能性絕對大于零。

我沒有答案

開發一個將Python代碼直接轉換為WebAssembly并犧牲一些兼容性以提高性能的編譯器可能是有意義的。開發一個以WebAssembly的設計為目標,同時又能保持與現有代碼的兼容性的解釋器可能是有意義的。在他們的WebAssembly努力中,簡單地支持RustPython可能是有意義的。也許Pyodide能幫我們到達那里。我不認為這些可能性在本質上都是錯誤的,它可能只會歸結為引起人們足夠興趣的那一個,從而看到它對別人有用。

“Python編程語言的核心是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榆社县| 广宁县| 郸城县| 隆德县| 县级市| 南投市| 武冈市| 栾川县| 尼勒克县| 呼图壁县| 巴东县| 邮箱| 青阳县| 镇原县| 永泰县| 恭城| 阜新| 泰兴市| 年辖:市辖区| 玉溪市| 卓尼县| 光泽县| 新化县| 胶南市| 汶上县| 资溪县| 开原市| 吉安县| 嫩江县| 武宁县| 岫岩| 苍梧县| 沂水县| 大兴区| 定州市| 黄骅市| 靖远县| 湘乡市| 吉林市| 甘洛县| 满城县|