13個使用WebAssembly的熱門語言專案 - infoworld

banq發表於2022-04-06

WebAssembly能保證Web 應用類似本地桌面應用程式那麼快速和響應迅速。
WebAssembly 是一種低階的、類似彙編的語言,具有緊湊的二進位制格式,可在 Web 瀏覽器中以接近本機的效能執行。同時,WebAssembly 為 C/C++、C#、Rust、Go、Kotlin、Swift 和其他程式語言提供了可移植的編譯目標。
WebAssembly 被譽為提高 Web 應用程式效能並允許在瀏覽器應用程式開發中使用 JavaScript 以外的語言的一種方式,受到 Google、Mozilla、Apple 和 Microsoft 的擁護,所有這些公司都在其瀏覽器引擎中支援該技術。
以下是 13 個在 WebAssembly 上投入巨大的語言專案。

Binaryen
Binaryen是一個用於WebAssembly的編譯器工具鏈基礎設施庫。Binaryen是用C++編寫的,目的是使編譯到WebAssembly變得簡單、有效和快速。它在一個頭裡有一個C的API,它可以從JavaScript中使用。輸入是以類似WebAssembly的形式接受的,但對於喜歡它的編譯器來說,一般的控制圖也是接受的。

Binaryen的內部IR(中間表示)使用緊湊的資料結構,並利用所有的CPU核心進行並行編碼和最佳化。IR也很容易編譯成WebAssembly,因為它基本上是WebAssembly的一個子集。針對WebAssembly的最佳化改善了程式碼大小和速度,使Binaryen本身成為有用的編譯器後端。

Blazor WebAssembly
Blazor WebAssembly是一個框架,用於使用.NET構建互動式、客戶端、單頁Web應用程式,並將這些應用程式託管在基於WebAssembly的.NET執行時的現代瀏覽器(包括移動瀏覽器)上。不需要外掛或將程式碼重新編譯成其他語言。該執行時使.NET程式碼能夠透過WebAssembly的JavaScript API訪問瀏覽器功能。

當Blazor WebAssembly應用在瀏覽器中執行時,C# 程式碼檔案和Razor檔案被編譯成.NET程式集,與.NET執行時一起被下載到瀏覽器中。由於.NET程式碼是在瀏覽器的JavaScript沙盒中的WebAssembly上執行的,所以它可以防止客戶端機器上的惡意行為。Blazor的WebAssembly應用程式可以獨立部署,也可以在伺服器端支援。

Cheerp
Leaning Technologies的Cheerp被定位為企業級的網路C/C++編譯器,將C和C++(最高到C++ 17)編譯成WebAssembly、JavaScript或兩者的組合。Cheerp被整合到LLVM/Clang基礎架構中,並進行了定製最佳化,以提高效能和最大限度地減少編譯輸出的大小。Cheerp主要用於將現有的C/C++庫和應用程式移植到HTML5,也可用於編寫Web應用程式和WebAssembly元件。Cheerp以開放原始碼和商業許可的形式提供。

CheerpJ
被稱為 "網路的Java編譯器",這個基於LLVM的編譯器將任何Java客戶端應用程式轉換為WebAssembly、JavaScript和HTML,使Java客戶端應用程式能夠在現代瀏覽器中執行。CheerpJ利用三個元件:AOT(超前)編譯器、WebAssembly和JavaScript的執行時間以及JavaScript DOM互操作性API,以從Java訪問DOM。有了CheerpJ,JAR檔案可以使用AOT編譯器進行編譯。CheerpJ不需要任何伺服器端的支援。

Emscripten
這個開源的編譯器工具鏈將C和C++,或任何其他使用LLVM編譯器技術的語言編譯成WebAssembly,以便在網路、Node.js或Wasmer等Wasm執行時中部署。(Emscripten編譯器,emcc,也會發出JavaScript,為編譯後的程式碼提供API支援)。Emscripten已經被用來將一系列真實世界的程式碼庫轉換成WebAssembly,包括商業程式碼庫,如虛幻引擎4遊戲引擎和Unity 3D平臺。Emscripten支援C和C++標準庫、C++異常以及OpenGL/WebGL圖形命令。用於安裝Emscripten工具鏈(emcc、LLVM等)的Emscripten SDK可以在Linux、MacOS和Windows上使用。

Forest
Forest是一種函式性程式語言,可以編譯成WebAssembly。開發者Nick Johnstone說,Forest背後的目標是提供一種語言,使其更容易建立複雜、互動和功能性的網路應用,但沒有這種方法的傳統開銷。

目前,Forest被描述為 "alpha前、實驗性、概念性的研究軟體",其特點是靜態型別、模式匹配、不可變的資料結構、多種語法和自動程式碼格式化。正在開發的第一種語法的靈感來自Elm和Haskell。

Forest語言的設計原則包括:易於協作、無痛測試、在結構和語義上達成一致,同時在語法上達成分歧。Johnstone努力使Forest在構建複雜的遊戲時足夠快,這樣正常的網路應用就會 "快得不得了"。

Grain
該專案網站稱,Grain語言將學術語言和函式語言的特點帶到了21世紀。透過Binaryen工具鏈和編譯器基礎設施編譯成WebAssembly,Grain可以在瀏覽器、伺服器和可能的任何地方執行。沒有執行時的型別錯誤,也不需要型別註釋。Grain工具鏈具有CLI、編譯器、執行時和標準庫,以單一的二進位制檔案形式發貨。開發人員需要Node.js和Yarn來從源頭上構建Grain,二進位制檔案可用於Linux、MacOS和Windows。

JWebAssembly
JWebAssembly來自I-Net軟體公司,是一個Java位元組碼到WebAssembly的編譯器,以Java類檔案為輸入,生成WebAssembly二進位制格式(.wasm檔案)或文字格式(.wat檔案)作為輸出。目標是用WebAssembly在瀏覽器中原生執行。理論上,JWebAssembly可以編譯任何可以編譯成Java位元組碼的語言,如Clojure、Groovy、JRuby、Kotlin和Scala,但有待測試。

JWebAssembly應該很快就可以投入生產了。JWebAssembly 1.0版本所需的所有里程碑都已實現,並且已經發布了候選版本。1.0版本的路線圖要求具備一些能力,如Java位元組碼分析器、測試框架和Gradle外掛。

Pyodide
Pyodide專案最近從Mozilla轉為獨立專案,將Python和Python科學堆疊編譯為WebAssembly,將Python 3.8執行時、NumPy、SciPy、Matplotlib、Scikit-learn和其他幾十個軟體包帶到瀏覽器上。Pyodide提供了JavaScript和Python之間物件的透明轉換,並使Python能夠訪問Web APIs。Pyodide開始於2018年,作為Iodide專案的一部分,在瀏覽器中進行資料科學。Pyodide可以從瀏覽器的REPL中試用。

Spin
雲端計算軟體供應商Fermyon Technologies的Spin是一個WebAssembly框架,用於微服務、網路應用和其他基於伺服器的應用。開發人員可以使用Spin為雲端計算編寫WebAssembly。提供的介面用於編寫WebAssembly模組的功能,如回答HTTP請求。使用Spin,開發者可以使用包括Rust、Go、Python、Ruby、AssemblyScript、Grain、C/C++等語言。Spin支援WAGI(WebAssembly Gateway Interface)模組和Bindle打包系統。現在處於早期預覽階段,Spin被認為是實驗性程式碼,預計在第一個穩定版本之前會有突破性變化。

TeaVM
TeaVM是一個用於Java位元組碼的超前編譯器,它可以發出WebAssembly和JavaScript,在瀏覽器中執行。然而,請注意,對WebAssembly的支援目前還是試驗性的。與近親GWT(Google Web Toolkit)一樣,TeaVM允許開發者用Java編寫應用程式並將其部署為JavaScript。與GWT不同的是,TeaVM使用的是編譯過的類檔案,而不是原始碼。此外,TeaVM依賴於現有的編譯器,如javac、kotlinc和scalac,因此可以編譯Kotlin和Scala程式碼,也可以編譯Java。TeaVM主要是一個網路開發工具;它不是為使用Java或Kotlin的大型程式碼庫和製作JavaScript而設計的。TeaVM的一個子專案Flavour是一個用於編寫單頁網路應用的框架。

Uno平臺
作為Xamarin移動應用平臺的替代品,Uno平臺是一個UI平臺,供.NET團隊使用C# 和XAML為WebAssembly、網路、Windows、MacOS、Linux、iOS和Android構建單一程式碼庫應用程式。Uno利用.NET 5中的Mono-WASM執行時間,在所有主要的網路瀏覽器中執行C# 程式碼,並作為WinUI和UWP(通用Windows平臺)應用程式的橋樑,在WebAssembly上原生執行。對於用Uno構建網路應用,開發者可以使用Visual Studio或Visual Studio Code。

Wasmcloud
來自Cosmonic的Wasmcloud是一個應用程式執行時,它利用WebAssembly來開發可組合、可移植的應用程式,可以插入多雲、邊緣和瀏覽器環境。該技術被稱為提供近乎原生的效能,並透過WebAssembly沙箱和行為體模型提供安全保障,將業務邏輯與特定的底層能力分開。開發人員可以用他們選擇的語言編寫一次微服務,並將其部署到各地。目前支援的語言包括Rust、TinyGo和AssemblyScript。Wasmcloud已被接受為雲原生計算基金會(CNCF)沙盒專案。
 

相關文章