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

Python遇見JavaScript:Wasm與PythonMonkey的魔力

開發 前端
PythonMonkey 的模塊系統允許輕松地將 JavaScript 庫移植到 Python,反之亦然。運行時使開發人員“能夠輕松地將他們的 JavaScript 庫移植到 Python,而無需承擔用 Python 重寫庫并維護端口的昂貴負擔,”Pringle 寫道。

PythonMonkey 使開發人員能夠輕松地在 JavaScript 和 Python 代碼之間相互使用,并且幾乎沒有性能損失。

譯自Python Meets JavaScript, Wasm With the Magic of PythonMonkey,作者 Darryl K Taft。

PythonMonkey是一款創新的JavaScript運行時,它嵌入在Python中,彌合了世界上兩種最流行的編程語言之間的差距。

PythonMonkey 是一個運行在 Python 中的 JavaScript 運行時,它建立在Mozilla的SpiderMonkey引擎之上。開發人員可以將其用作 Python 庫,在 Python 中運行 JavaScript 代碼。

Distributive是一家位于加拿大安大略省金斯頓的云計算初創公司,他們創建了 PythonMonkey,以便將他們的 JavaScriptNodeJSSDK 直接移植到 Python,而無需維護兩個項目,從而將代碼維護成本降低了一半。

“我們希望 PythonMonkey 能幫助彌合數百萬 npm 包和 Python 開發人員之間的差距,并有朝一日能夠獨立成為一個 JavaScript 運行時,與Node.js、Bun和Deno競爭,但它能夠從 JS 中使用‘任何’ Python 包,”Distributive 的軟件開發人員Will Pringle說。

事實上,PythonMonkey 使開發人員能夠輕松地在 JavaScript 和 Python 之間使用代碼,并且幾乎沒有性能損失,Pringle 在去年的一篇介紹該技術的博客文章中寫道——與此同時,Distributive 計劃在下個月發布 PythonMonkey 1.0。

WebAssembly API 和引擎

“例如,可以從 JavaScript 庫中調用 Python 包,例如NumPy,或者直接從 Python 中使用 NPM 包,例如crypto-js,“Pringle 寫道,“此外,使用 SpiderMonkey 中的 WebAssembly API 和引擎,在 Python 中執行WebAssembly(Wasm) 模塊變得微不足道。”

是的,該庫利用了 SpiderMonkey 的功能,包括其 WebAssembly 引擎,允許 Python 在沙箱中從各種語言(如 C、C++、Rust等)運行不受信任的 Wasm 代碼。

此外,開發人員可以使用 PythonMonkey 將用 Python 編寫的緩慢的“熱循環”重構為在 JavaScript 中執行,利用 SpiderMonkey 的即時編譯器來實現接近本機的速度,Pringle 寫道。

此外,PythonMonkey 還附帶 PMJS,這是一個類似于 Node.js 的 JavaScript 運行時環境,它支持從 JavaScript 調用 Python 庫。

簡單代碼示例

在他的文章中,Pringle 提供了一些編碼指導,包括下面的“hello world”示例,它演示了從 JavaScript 生成的字符串被返回到 Python 上下文:

>>> import pythonmonkey as pm
>>> hello = pm.eval(” ‘Hello World’.toUpperCase(); “)
>>> print(hello)
‘HELLO WORLD’

下面的更復雜的示例演示了將 Python print 函數作為參數傳遞給 JavaScript 函數,然后從 Python 調用該 JavaScript 函數:

>>> import pythonmonkey as pm
>>> hello = pm.eval(“(func) => { func(‘Hello World!’)}”)
>>> hello(print)
Hello World!

此示例使用 pmjs 執行一個 JavaScript 文件,該文件使用 Python 的 print 函數(這可以通過 pmjs main.js 執行):

main.js

const pyPrint = python.eval(“print”);
pyPrint(“Hello, World!”); // 這將輸出“Hello, World!”

項目目標

該項目的目標包括:

  • 快速且內存高效。
  • 使在 JS 或 Python 中編寫代碼成為開發人員的偏好。
  • 從 Python 中使用 JavaScript 庫。
  • 從 JavaScript 中使用 Python 庫。
  • 相同的過程運行 JavaScript 和 Python 虛擬機——沒有序列化、管道等。
  • Python 列表和字典的行為與 JavaScript 數組和對象相同,反之亦然,完全適應給定的上下文。

Distributive 的 CTOWes Garland創建了 PythonMonkey,旨在為公司開發人員簡化工作。Garland 在 2007 年左右創建了 Node.js 的前身gpsee——基于 Mozilla 的 SpiderMonkey 引擎,與 PythonMonkey 類似。

“我們在 Distributive 擁有一個龐大而復雜的客戶端 SDK,名為 dcp-client,用 JavaScript 編寫,”Pringle 告訴 The New Stack。“其中包含大量邏輯,因此我們不想用 Python 重寫它并維護兩個項目——實際上是將 SDK 的開發成本增加一倍。PythonMonkey 使我們能夠將 JavaScript 庫中的所有底層邏輯移植到 Python,同時只維護一個代碼庫。”

Distributive 主要使用 JavaScript 進行開發,因為公司需要在 Web 堆棧中運行。

“為了說明,我們正在構建DCP (Distributive Compute Protocol),這是一個計算市場,人們可以在其中從其他人的家用電腦租用 CPU/GPU 周期,”Pringle 說。“這個想法是,如果你有一臺閑置的電腦,你可以將其連接到我們的云計算網絡并通過計算其他人的工作負載來賺錢。將你的電腦變成工作節點的程序是一個 JavaScript 引擎,它可以執行 JS 程序、WebAssembly 或任何可以編譯到 (或具有編譯到) WebAssembly 的編程語言。

“你也可以直接在瀏覽器中運行它。總之,我們實現中有很多 JavaScript 代碼,但每個人都想用 Python 編寫這種代碼,因此 PythonMonkey 使 Python 開發人員能夠使用我們的產品 (DCP)——而無需我們重新編寫 SDK。”

Pringle 現在正在開發 Distributive 的 Python SDK,該公司預計將在未來幾周內發布它。

項目演變

自去年 7 月推出 PythonMonkey 以來,Distributive 對該技術進行了大量改進,包括:

Web 堆棧 API

  • 從頭開始實現XMLHttpRequestAPI —— 使 socketio 等流行的 JavaScript 庫能夠使用標準 JavaScript 網絡 API 在 PythonMonkey 中運行。
  • 實現了一些計時器全局函數:setInterval/clearInterval、setImmediate/clearImmediate 和 setTimeout/clearTimeout,返回 Node.js 風格的Timeout類,帶有.ref()和.unref()方法。
  • 實現consoleAPI 中所有缺失的方法,現在console的行為與 Web 規范https://console.spec.whatwg.org/相同。
  • atob、btoa函數。

跨語言強制轉換

  • 用戶現在可以將任何任意 Python 對象包裝/代理到 JavaScript 中。
  • 更好的跨語言迭代器支持。

異常處理

  • 實現完整的跨語言堆棧跟蹤。
  • 改進了跨語言嵌套異常處理和 Promise 拒絕處理。
  • uncaughtExceptionHandler

JavaScript 引擎更新

  • 將 SpiderMonkey 更新到最新版本,因此用戶可以享受與最新 Firefox 相同的新的 JS + WASM 語言功能,并且性能更好。
  • 貢獻了一個補丁到 SpiderMonkey,修復了一個錯誤。

開發人員體驗改進

  • 更好的開發人員體驗,帶有嵌入式調試工具pmdb(受gdb啟發)和 WTFPythonMonkey(受wtfnode啟發)。
  • 更好的 Python 類型提示和開發人員文檔。

模塊系統

PythonMonkey 的模塊系統允許輕松地將 JavaScript 庫移植到 Python,反之亦然。運行時使開發人員“能夠輕松地將他們的 JavaScript 庫移植到 Python,而無需承擔用 Python 重寫庫并維護端口的昂貴負擔,”Pringle 寫道。

此外,“JavaScript 也非常適合高度異步的工作負載,而 Python 則不然,”Pringle 在他的帖子中解釋道。“在 Distributive,我們打算使用這個庫來執行我們復雜的dcp-client庫,該庫是用 JS 編寫的,并支持 Web 堆棧上的分布式計算。”

同時,Pringle 指出,PythonMonkey 旨在通過盡可能共享不可變的備份存儲來最大限度地減少內存消耗和復制開銷。

PythonMonkey 路線圖

“PythonMonkey 的路線圖包括許多功能和改進,以擴展其可用性,例如使用 esm 語法在 JavaScript 中導入 Python 模塊,XMLHttpRequest,實現獨立的事件循環而不依賴 Python 的事件循環,以及對 Node.js API 的支持,例如 fs、path、process,這將允許 Python 使用 NPM 包,例如express.js和socket.io,”Pringle 在去年發布時寫道。該公司已經實現了其中大部分。

路線圖中另一個提出的目標是將 PMJS 擴展為一個完全集成的 Node.js 環境,它可以作為 Node.js 的直接替代品,并且還能夠從 JavaScript 中使用 Python 包。

通過這些計劃的增強功能,PythonMonkey 和 PMJS 旨在為開發人員提供一個完全集成的 Python-JS 環境。

比相關項目更優越?

同時,Pringle 將 PythonMonkey 與JS2PY、PyV8和Metacall等相關項目進行了比較,強調了 PythonMonkey 在性能和功能方面的優勢。

您可以在Google Colab上試用 PythonMonkey。

責任編輯:武曉燕 來源: 云云眾生s
相關推薦

2022-11-10 15:19:24

JavaScript事件發射器通信

2023-02-16 08:03:06

2022-11-28 11:41:24

Wasm

2023-12-06 08:45:01

WasmJavaScript

2023-11-23 08:58:45

PythonNumPy

2025-02-03 09:53:42

2023-09-04 07:30:03

Wasm匯編語言

2017-07-25 12:42:23

互聯網

2021-09-16 09:59:13

PythonJavaScript代碼

2012-09-27 09:08:55

刀片服務器服務器模塊化

2021-11-29 18:27:12

Web Wasmjs

2017-02-22 13:40:45

華為

2022-08-06 08:16:10

Gartnerr備份與恢復魔力象限

2011-06-30 17:21:56

2016-10-20 16:09:03

技術預見互聯網技術路線圖

2012-11-21 09:19:04

2022-05-23 09:03:35

Heighliner開發者工具

2012-10-24 11:08:38

刀片服務器刀片服務器廠商魔力象限

2021-11-29 10:24:56

WasmEnvoy 負載均衡

2015-03-12 09:51:09

CoreDataiCloud
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产乱码久久久久久久久 | 黄色片在线观看网址 | 亚洲综合视频一区 | 81精品国产乱码久久久久久 | 中文字幕高清免费日韩视频在线 | 国产视频久久久久 | 毛片久久久 | 国产激情自拍视频 | 一a级片 | 日韩伦理电影免费在线观看 | av中文字幕网 | 伊人精品 | 成人午夜影院 | 久久精品男人的天堂 | 欧美一区二区在线观看 | 欧美极品在线 | 亚洲精品一区中文字幕乱码 | 欧美美乳 | 日韩一区在线播放 | 91大神新作在线观看 | 国产精品久久久久久久久免费高清 | 国内自拍视频在线观看 | av网站在线免费观看 | 最新国产精品视频 | 美女露尿口视频 | 亚洲精品乱码久久久久久按摩观 | 国产精品精品视频一区二区三区 | 日韩综合在线 | av一区二区三区 | 国产第一亚洲 | 日本免费一区二区三区四区 | 国产剧情一区二区三区 | 成人免费视频观看 | 亚洲成人精品一区 | 国产成人综合亚洲欧美94在线 | 激情欧美日韩一区二区 | 日韩免费视频 | 二区在线视频 | 成人精品福利 | 精品99久久 | 91极品视频 |