python核心編程PDF,python語言核心理念是什么_Python 編程語言的核心是什么?

 2023-12-10 阅读 29 评论 0

摘要:作者 | Brett Cannon譯者 | 彎月,責編 | 王曉曼頭圖 | CSDN 下載自視覺中國出品 | CSDN(ID:CSDNnews)以下為譯文:python核心編程PDF。為什么要問這個問題?我想要用 Python 實現 WebAssembly,這并不是什么秘密。這不僅可以讓 Python 進入瀏

article.php?pk=5f0c2caeb15ec04d7c36b407

作者 | Brett Cannon

譯者 | 彎月,責編 | 王曉曼

頭圖 | CSDN 下載自視覺中國

出品 | CSDN(ID:CSDNnews)

以下為譯文:

python核心編程PDF。為什么要問這個問題?

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

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

"Python 究竟是什么?"

我們使用 CPython 已經很長時間了,以至于我懷疑我們大多數人都認為 " Python == CPython"。PyPy 試圖將兼容做到極致,所以他們打算實現 CPython 的實現細節。基本上,我所知道的大多數 Python 實現都會為通過 CPython 的測試套件而努力,并盡可能與 CPython 兼容。

這就有點可怕了。

計算機語言python,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 的哪些部分視為 " 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/

python編程、本文為 CSDN 翻譯,轉載請注明來源出處。

更多精彩推薦

點分享

點點贊

點在看

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/194182.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息