WebAssembly元件提案
本文探討了新的 WebAssembly 元件模型提案,並展示了一種使用介面、構建 Rust 和 C++ 元件、連結和使用 Wasmtime 執行它們的非常早期的方法。
隨著越來越多的程式語言將 WebAssembly 新增為編譯目標,並且構建了自動為這些程式語言生成繫結的工具,元件模型將為軟體實現真正的可移植和跨語言組合。
WebAssembly (或 Wasm)是 W3C 規範,用於分發和執行程式碼的可移植二進位制格式,自 2017 年以來已在四大瀏覽器引擎中實現。用熟悉的術語來說,Wasm 被用作 各種程式語言的編譯目標 ,生成一個緊湊的二進位制檔案,可以在瀏覽器中以接近本機的速度執行。這將 Rust、C 和 C++、Go 或 C# 等現有語言(以及Grain等新語言 )引入了網路,並允許將極其複雜的應用程式(如 Google Earth 或Photoshop )移植 到瀏覽器中。
WASI 專案或 WebAssembly 系統介面 是一項旨在標準化 Wasm 在瀏覽器之外的執行並提供通用(平臺無關)層和一組原語的提案,客戶端使用這些原語與其底層執行時進行互動,同時維護 WebAssembly 承諾的安全沙箱。
什麼是WebAssembly 元件模型
使用作業系統類比,WebAssembly 允許執行低階 CPU 指令,而 WASI 是一種對輸入/輸出介面進行建模的方法。
從這個角度來看,對定義流程如何啟動以及它們如何相互互動的“流程模型”的需求開始出現——這就是 WebAssembly 元件模型提案試圖解決的問題。
元件模型的第一個既定 目標 是定義一種可移植的、載入和執行時高效的二進位制格式 […],它支援可移植的跨語言組合——有效地解決多個元件如何相互互動,以及用例描述了嵌入元件、組合和動態連結的廣泛場景。
本文討論的主要用例如下——將 API 層定義為 WebAssembly 介面,將其實現為 WebAssembly 元件,然後透過傳遞引數和返回值從其他元件中使用它。在該領域還有許多其他主題需要探索,例如傳遞依賴、分發、開發人員體驗或為給定介面構建專門的主機執行時,所有這些都將在以後的文章中討論。
詳細點選標題
相關文章
- 建立和使用 WebAssembly 元件Web元件
- Blazor WebAssembly 修仙之途 - 元件與資料繫結BlazorWeb元件
- WebAssembly 系列(四)WebAssembly 工作原理Web
- webAssemblyWeb
- 在Firefox58中,WebAssembly元件效能提升了10倍FirefoxWeb元件
- WebAssembly 系列(五)為什麼 WebAssembly 更快?Web
- 你好WebAssemblyWeb
- [譯] ECMAScript 的 Observables 提案
- Go Wednesday活動提案Go
- [譯][A crash course in WebAssembly] 創作並使用 WebAssembly 模組Web
- WebAssembly 系列(一)生動形象地介紹 WebAssemblyWeb
- WebAssembly 系列(六)WebAssembly 的現在與未來Web
- 體驗WebAssemblyWeb
- 初識WebAssemblyWeb
- [譯][A crash course in WebAssembly] 為什麼WebAssembly這麼快Web
- [譯][A crash course in WebAssembly] WebAssembly的進度和計劃Web
- JavaScript 新提案:array.groupBy()JavaScript
- [譯] WebAssembly: How and whyWeb
- WebAssembly 的由來Web
- 什麼是 webAssembly ?Web
- webassembly 的那些事Web
- 解讀 PHP 的 P++提案PHP
- 20分鐘上手 webAssemblyWeb
- JavaScript也能寫WebAssemblyJavaScriptWeb
- WebAssembly學習筆記Web筆記
- [譯][A crash course in WebAssembly] assemblyWeb
- [WebAssembly 入門] Hello, world!Web
- 看漫畫,學 WebAssemblyWeb
- PNaCl 再見,WebAssembly 你好!Web
- WebAssembly和Emscripten工作整理Web
- 厲害了,JavaScript 新提案:array.groupBy()JavaScript
- 厲害了,ECMAScript 新提案:JSON模組JSON
- Python中必讀的PEP提案Python
- Java新提案:Extent-Local變數Java變數
- Fabric 1.0原始碼分析(40) Proposal(提案)原始碼
- Blazor WebAssembly 3.2 正式釋出BlazorWeb
- WebAssembly入門,未來可期Web
- WebAssembly真的要取代Docker嗎?WebDocker