成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

 為什么問這個問題?

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

但是,當(dāng)想到創(chuàng)建一個新的Python實現(xiàn)這一令人生畏的任務(wù)時,我的大腦也開始問這個問題:Python到底是什么?我們與CPython一起生活了這么長時間,我懷疑我們中的大多數(shù)人只是簡單地認(rèn)為“Python == CPython”。PyPy試圖做到兼容,以便實現(xiàn)CPython的實現(xiàn)細(xì)節(jié)?;旧?,我所知道的大多數(shù)Python實現(xiàn)都努力通過CPython的測試套件,并盡可能地與CPython兼容。

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

這讓我開始思考Python到底是什么?這門語言的核心是什么?所有的Python實現(xiàn)需要涵蓋什么樣的基線,才能真正能夠?qū)⒆约悍Q為人們?nèi)阅苷J(rèn)出的Python實現(xiàn)?或者從我的角度來看,一個人需要實現(xiàn)多少才能直接編譯Python到WebAssembly,并且仍然被認(rèn)為是Python實現(xiàn)?

 

[[335938]]

 

Python需要REPL嗎?

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

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

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

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

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

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

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

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

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

有多少兼容性是有用的?

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

我沒有答案

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

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2021-11-09 23:15:20

編程語言本質(zhì)

2012-05-16 13:11:28

編程語言開發(fā)語言Java

2022-08-17 17:57:37

GoGo語言

2022-08-26 09:51:49

索引簽名編程語言

2018-04-04 14:29:33

2021-03-15 14:00:56

PythonC語言編程語言

2020-03-10 11:00:22

CIO核心競爭力競爭力

2021-02-07 09:18:07

JavaScript 前端編程語言

2021-07-07 10:01:13

編程語言計算機斯坦福大學(xué)

2010-03-19 09:39:17

Python編程語言

2025-03-24 00:25:00

Go語言并發(fā)編程

2009-07-20 15:42:59

JDBC是什么

2014-07-02 09:56:33

2009-07-08 14:51:10

2015-08-26 09:54:19

物聯(lián)網(wǎng)

2022-09-21 13:53:15

C++移動語義

2017-02-05 14:49:39

2009-09-23 15:50:57

Python 3.1

2020-05-28 10:08:06

云計算Python編程語言

2015-08-12 13:23:37

運營商
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 中文字幕国产视频 | 久久免费高清 | 欧美日本在线观看 | 欧美成人精品欧美一级 | 中文在线一区二区 | 成人免费在线观看 | 国产成人免费在线观看 | 久久久一二三区 | 一区二区三区欧美在线 | 日日想夜夜操 | 日本中文字幕在线观看 | 久草中文在线 | 超碰成人免费 | 亚洲视频区 | 一区二区中文字幕 | 黄色片亚洲 | 婷婷国产一区二区三区 | 人人澡人人射 | 一区二区三区在线观看视频 | 久久一区二区三区免费 | 亚洲最新在线视频 | 欧美日韩国产一区二区三区 | 日韩二区三区 | 久久精品亚洲成在人线av网址 | 91高清视频在线 | 日韩视频在线观看 | 亚洲精品久 | 日韩中文字幕视频在线 | 久久网一区二区 | 91精品国产91久久久久久密臀 | 亚洲色图图片 | 亚洲风情在线观看 | 亚洲一级毛片 | 国产欧美视频一区 | 成人一级黄色毛片 | 久久一级 | 国产乱码精品一品二品 | 日韩精品在线播放 | 亚洲人一区| 国产偷录叫床高潮录音 | 欧美成人猛片aaaaaaa |