CheerpX:使用 WebAssembly 在瀏覽器中執行任何程式語言
我們都知道 WebAssembly 支援多種語言,但是 CheerpX 有點特別。CheerpX 是 x86 處理器架構本身的模擬器 - 允許您直接在 WebAssembly 執行時上執行 x86 二進位制檔案。
CheerpX構建了一個基於 WebAssembly 的虛擬機器來在瀏覽器中執行 X86 二進位制檔案。您可以使用它執行任何 REPL 環境。示例:https : //repl.leaningtech.com/?python3
從歷史上看,JavaScript 一直是 Web的程式語言。這隨著 WebAssembly 的引入而改變,儘管是以一種相當間接的方式。
從根本上說,WebAssembly 是一個 編譯器:由來自不同源語言的專門程式發出的二進位制表示 。
這也反映在 WebAssembly 引擎本身的設計中,它假設傳入的位元組碼已經被很好地最佳化,並且它們的大部分內部最佳化管道被禁用。這與 JavaScript 編譯形成鮮明對比,JavaScript 編譯在該領域內最優秀的頭腦數十年的工作投入到讓低質量的 JavaScript快速執行 。
在撰寫本文時,WebAssembly 最常使用基於 LLVM 的工具鏈從 C/C++ 程式碼生成。當努力移植現代動態程式語言(如 Python)時,首選的解決方案是編譯 C/C++ 實現。為了實現這一點,可以使用精簡版本,例如禁用 JIT 支援或依賴於本地構建元件的模組。
將重要的 C/C++ 程式碼庫移植到 WebAssembly 並不一定是一項簡單的工作。程式語言實現很可能有多個依賴於目標的程式碼路徑或定義,因此所需的工作與將語言移植到新的本機架構沒有什麼不同。
如果在移植 Python 之後,你還想移植 Ruby……嗯,你需要從頭開始。
CheerpX 的核心是 X86 架構的模擬器
顯然,一個簡單的模擬器在效能方面不會讓你走得太遠,所以我們實現了一個複雜的 JIT 編譯器,它能夠為熱程式碼生成高效的 WebAssembly 表示。整個過程是 100% 自動化的,不需要任何後設資料或假設。該系統非常健壯,它實際上可以處理在執行時在內部生成新程式碼的應用程式,甚至可以處理自修改程式碼。這意味著您實際上可以執行 NodeJS 之類的東西,包括完整的 V8 引擎及其卓越的 JIT 和程式碼垃圾收集。
可以想象,這是一個極其複雜的問題。在設計 CheerpX 時,我們決定只關注使用者模式程式碼(Ring 3),忽略(目前)系統級(Ring 0)功能的複雜性。為了縮小差距並讓真實世界的應用程式執行,我們實現了 Linux 系統呼叫介面的(子集)。
到現在為止,可能很清楚 CheerpX 可用於在瀏覽器中執行任何程式語言 REPL。我們沒有將每種語言環境手動移植到 WebAssembly,而是讓整個 Linux/X86 構建執行在 CheerpX VM 之上。
。。。
Flash 模擬器
CheerpX 是CheerpX for Flash的基礎技術, 它是一種 Flash 模擬器,可在純 HTML5 中執行舊版 Adobe Flash 內容。CheerpX for Flash 透過執行 Flash 播放器(Linux 的 X86 二進位制檔案)來工作,其執行方式與我們在本文中展示的方式並無不同。
原文點選標題
相關文章
- 【譯】Go和WebAssembly:在瀏覽器中執行Go程式GoWeb瀏覽器
- 通過 WebAssembly 在瀏覽器執行 PHPWeb瀏覽器PHP
- 在瀏覽器中使用Lua語言:Fengari瀏覽器
- 在瀏覽器中執行vscode -DEV瀏覽器VSCodedev
- JS在瀏覽器中的執行機制JS瀏覽器
- Ooui:在瀏覽器中執行.NET應用UI瀏覽器
- 不用Blazor WebAssembly,開發在瀏覽器端編譯和執行C#程式碼的網站BlazorWeb瀏覽器編譯C#網站
- 瀏覽器渲染程式多執行緒瀏覽器執行緒
- 重學瀏覽器(1)-多程式多執行緒的瀏覽器瀏覽器執行緒
- ANTLR:在瀏覽器中玩語法解析瀏覽器
- 瀏覽器執行原理瀏覽器
- 瀏覽器執行緒瀏覽器執行緒
- JavaScript 獲取瀏覽器的所使用語言JavaScript瀏覽器
- daedalOS:基於WebAssembly在瀏覽器中實現桌面作業系統Web瀏覽器作業系統
- 如何在瀏覽器中執行 VS Code?瀏覽器
- 瀏覽器執行javaScript程式碼基礎瀏覽器JavaScript
- Browserflow - 在瀏覽器中自動執行重複性任務瀏覽器
- win10瀏覽器語言怎麼設定_win10瀏覽器語言如何修改Win10瀏覽器
- 【總結】瀏覽器的執行緒與程式瀏覽器執行緒
- 按照谷歌瀏覽器執行 js 在html中meta屬性設定谷歌瀏覽器JSHTML
- Rust在瀏覽器Wasm和後端伺服器中執行效能比較Rust瀏覽器ASM後端伺服器
- 在瀏覽器裡使用SAPGUI瀏覽器GUI
- 解決在IE瀏覽器中JQuery.resize()執行多次的方法薦瀏覽器jQuery
- WebRTC在瀏覽器中的演示Web瀏覽器
- Chrome 瀏覽器中,使用 Shift + Esc 開啟工作管理員 / 瀏覽器程式管理 結束程式Chrome瀏覽器
- 瀏覽器EventLoop執行過程解析瀏覽器OOP
- 瀏覽器與go語言的websocket通訊瀏覽器GoWeb
- UC瀏覽器開發語言的選擇瀏覽器
- 瀏覽器多執行緒和js單執行緒瀏覽器執行緒JS
- 用500行純前端程式碼在瀏覽器中構建一個Tableau前端瀏覽器
- 精通前端 polyfill ,相容各瀏覽器執行E6語法前端瀏覽器
- 從一道執行題,瞭解瀏覽器中JS執行機制瀏覽器JS
- 介紹 Turbo:比 Yarn 和 NPM 快 5 倍,可以在本地瀏覽器中執行YarnNPM瀏覽器
- 判斷是否在微信瀏覽器中瀏覽器
- 在搜狗瀏覽器中啟用WebGL瀏覽器Web
- 選擇一門程式語言,任何一門語言
- 使用 CefSharp 在 C# App 中嵌入 Chrome 瀏覽器C#APPChrome瀏覽器
- 在瀏覽器上執行 VS Code——GitHub 熱點速覽 v.21.22瀏覽器Github