python程式設計的核心知識點總結

2022-10-03 16:27:08 字數 2065 閱讀 9348

我想要python實現,這已經不是什麼秘密了。webassembly它不僅會讓python進入瀏覽器,而且事實是兩者都是ios和安卓支援將j**ascript作為應用程式的一部分執行,它還可以讓python進入移動平台。這一切都讓我興奮。

但是當想到建立python的新實現這一艱鉅任務時,我的大腦也開始問到底是什麼東西。是python?我們一起生活過cpython長期以來,我懷疑我們大多數人只是認為「python==cpython」。皮皮試著這麼做相容他們將實現cpython的實現細節。基本上,據我所知,python的大多數實現都力求通過cpython的測試套件,並盡可能與cpython相容。

這太令人望而生畏了。由cpython實現的python是非常動態的,並且暴露了許多只有在您使用直譯器實現python時才有意義的事情。例如,pypy有乙個基線直譯器,他們使用jit,但是在python中可以使用很多東西,這些東西迫使pypy關閉jit並繼續使用位元組碼。僅repl本身就使事情變得非常動態,因為您輸入到repl中的所有內容都是由直譯器動態解析、編譯和執行的。

這讓我思考了到底是什麼是python?語言的核心是什麼?所有python實現都需要覆蓋哪些基線,才能真正將自己稱為python的實現,而人們仍然會認識到這一點?或者從我的角度來看,要將python直接編譯到webassembly並仍然被認為是python實現,還需要實現多少呢?

真正讓我開始思考這個問題的是,當我開始思考如何將python編譯成webassembly時?沒有實現另乙個直譯器,但實際上從python源發出靜態webassembly,並且仍然合理地稱之為「python」。

我知道的一件事是通過動態編譯eval()或compile(程式設計客棧)很難做到webassembly安全模型在載入時驗證模組。這意味著在其他**的記憶體空間中不存在只執行任意**的結構化結構,這可能會使repl的實現變得很棘手。

但這讓我想:python真的需要repl?不要誤解我的意思,它非常方便,但是如果乙個實現沒有repl,它會不會不再成python?我認為沒有repl的python仍然是python,它只是缺少乙個(可能的鍵)特性。

你能活下去嗎locals()?能夠任意地將所有定義的區域性變數及其值收集到字典中是一件非常動態的事情。如果您是在乙個整數(如cpython)中,您只需從當前執行框架中收集一些內容,就可以得到區域性變數。但是在編譯語言中,這需要做更多的工作,因為您必須知道何時收集所有這些資訊,因為不一定只是在呼叫時躺在那裡。locals().

或者其他人locals()本身?再說一次,這在cpython中並不是什麼大問題,因為builtins模組有程式設計客棧乙個__dict__您可以覆蓋它,它將簡單地傳播到任何未來的呼叫。但是在一種編譯語言中,做這種檢測需要付出更多的努力,這樣的檢查最終要花費效能。

關於sys.settrace()?它實際上會觸發每個位元組碼的**,如果編譯了**,這就不太起作用了。您可以通過檢查在每一行之後是否設定了跟蹤函式來偽造它,但是當大多數時候沒有設定這樣的鉤子時,這看起來就有點麻煩了(不過,在這種支援下編譯可能是乙個編譯器標誌)。

那你覺得呢?sys._getframe()?編譯後的語言不一定會直接訪問執行框架,所以您是否需要進行模擬呢?由於任何函式都可以請求執行框架,因此您需要隨時準備按需提供執行幀。

正如您所看到的,python中有很多東西使得編譯變得困難(因此更強大到努特卡接受這個挑戰)。但我敢打賭,我上面提到的東西--你不會在99.9%的時間裡使用它們,所以如果乙個實現忽略了它們,它還能被認為是「python」嗎?

我對這個問題沒有很好的答案。但它的答案決定了實現python有多困難,以及它與現有軟體的相容性。我要說的是,我認為webassembly不需要支援大量的python軟體才有用。webassembly可以訪問其他語言生態系統,如rust和j**ascript,因此您需要用另一種語言實現一些您可以使用的其他語言的可能性肯定在零以上。

我沒有答案

開發乙個直接將pytho**轉換為webassembly並為效能犧牲一程式設計客棧些相容性的編譯器可能是有意義的。開發乙個針對webassembly設計但與已有**保持大量相容性的直譯器可能是有意義的。簡單地支援rustpython在他們的webassembly的努力中。也許吧皮笛會把我們帶到那裡。我不認為任何這些可能性本質上都是錯誤的,它很可能會歸結到任何乙個足以激發人們的興趣glbqxhhnd,看到它對他人有用的程度。

一 python程式設計核心知識點

1 互動模式和檔案模式 2 變數型別 輸入和輸出 整數 小數 字串 複數 列表 元組 字典 集合 int float str complex list tuple dict set a 3 type a b 1.0 type b s abc type s d 1 2j type d l 1,2,a ...

Eureka核心知識點

一 eureka特性 1.當註冊中心掛了,客戶端之間依然可以通過原有的登錄檔進行呼叫 註冊中心重啟後,客戶端會繼續註冊進來 2.當服務提供者掛了,在關閉自我保護的情況下,註冊中心在規定時間 預設是60s 內移除客戶端 關閉eureka註冊中心的自我保護模式,配置如下 eureka server en...

Eureka核心知識點

一 eureka特性 1.當註冊中心掛了,客戶端之間依然可以通過原有的登錄檔進行呼叫 註冊中心重啟後,客戶端會繼續註冊進來 2.當服務提供者掛了,在關閉自我保護的情況下,註冊中心在規定時間 預設是60s 內移除客戶端 關閉eureka註冊中心的自我保護模式,配置如下 eureka server en...