首頁 > 科技

基於 WebAssembly 的十個熱門語言項目

2021-06-11 11:30:57

從瞬時運行的Web應用程式到瀏覽器中的Python語言,一些熱門的程式語言和編譯器項目為WebAssembly的承諾提供多種選擇。

如今的Web應用程式的運行速度和響應速度遠不及桌面應用程式,但如果能做到呢?這就是WebAssembly做出的承諾。

WebAssembly是一種低階的類彙編(assembly-like)語言,具有緊湊的二進位制格式,可以在Web瀏覽器中以接近桌面裝置的效能運行。與此同時,WebBaseMulk為C/C++、C、RISE、GO、Kotlin、SWIFT等程式語言提供了一個可移植的編譯目標。

WebAssembly被譽為一種既可以提高Web應用程式效能,又允許在瀏覽器應用程式開發中使用JavaScript以外的語言的方式,它得到Google、Mozilla、Apple和Microsoft瀏覽器的支援,所有這些瀏覽器都在其引擎中支援該技術。

WebAssembly促進了一系列新技術的開發,其中包括利用其強大功能的全新程式語言。以下是致力為WebAssembly支援的10個語言項目。

1.Binaryen

Binaryen是一個用於WebAssembly的編譯器工具鏈基礎設施庫。Binaryen採用C++編寫,旨在使編譯到WebAssembly變得更加容易、高效和快速。它在單個標頭中有一個C API,並且可以從JavaScript中使用。輸入以類似 WebAssembly的形式被接受,但一般控制圖也被一些編譯器接受。

Binaryen的內部IR使用緊湊的資料結構,並利用所有 CPU 核心進行並行程式碼生成和優化。IR也很容易編譯到WebAssembly,因為它本質上是WebAssembly的一個子集。特定於 WebAssembly的優化提高了程式碼大小和速度,使Binaryen可以單獨用作編譯器後端。

2.Blazor WebAssembly

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

當Blazor WebAssembly應用程式在瀏覽器中運行時,C#程式碼檔案和Razor檔案將編譯為.NET程式集,這些程式集將隨著.NET運行時一起下載到瀏覽器。而且,由於.NET程式碼是在瀏覽器的JavaScript沙盒中的WebAssembly上執行的,所以它會受到保護,因此可以防止客戶端計算機上的惡意操作。Blazor WebAssembly應用程式可以獨立部署,也可以在伺服器端支援下部署。

3.Cheerp

Leaning科技公司開發的Cheerp被定位為用於Web的企業級C/C++ 編譯器,將C、C++、甚至C++ 17編譯成 WebAssembly、JavaScript 或兩者的組合。Cheerp可以整合到 LLVM/Clang基礎設施中,通過自定義優化來提高效能並最小化編譯輸出的大小。Cheerp主要用於將現有的C/C++庫和應用程式移植到HTML5,也可用於編寫Web應用程式和WebAssembly元件。Cheerp是在開源和商業許可下提供的。

4.CheerpJ

這款基於LLVM的編譯器被譽為「Web的Java編譯器」,可將任何Java客戶端應用程式轉換為WebAssembly、JavaScript和HTML,從而使Java客戶端應用程式能夠在各個瀏覽器中運行。CheerpJ利用三個元件:AOT(提前)編譯器、WebAssembly和JavaScript DOM互操作性API,以從Java訪問DOM。使用CheerpJ,可以使用AOT 編譯器編譯JAR檔案。CheerpJ 不需要任何伺服器端支援。

和Cheerp一樣,CheerpJ也是Leaning科技公司開發的。

5.Emscripten

Emscripten這個開源編譯器工具鏈將C和C++或任何其他使用LLVM編譯器技術的語言編譯成WebAssembly,以便部署在Web、Node.js或Wasm上。Emscripten 編譯器emcc也通過JavaScript為編譯後的程式碼提供API支援。Emscripten已被用於將現實世界的程式碼庫列表轉換為WebAssembly,其中包括商業程式碼庫,例如Unreal Engine 4遊戲引擎和Unity 3D 平臺。Emscripten支援C和C++標準庫、C++和OpenGL/WebGL圖形命令,用於安裝Emscripten 工具鏈(emcc、LLVM 等)的Emscripten SDK可以在Linux、MacOS和Windows等作業系統上使用。

6.Forest

Forest 是一種可編譯為 WebAssembly的函數語言程式設計語言。開發人員Nick Johnstone表示,Forest背後的目標是提供一種語言,使創建複雜、互動式和功能性的Web應用程式變得更容易,並且沒有這種方法的傳統開銷。

目前被描述為「pre-alpha、實驗性、概念研究軟體」,Forest具有靜態類型、模式匹配、不可變資料結構、多種語法和自動程式碼格式。開發中的第一個語法受到Elm和Haskell的啟發。

Forest語言的設計原則包括易於協作、儘可能無痛的測試以及在結構和語義上達成一致,同時在語法上達成一致。Johnstone 努力讓Forest足夠快來構建複雜的遊戲,這樣使用網路應用程式運行得非常快。

7.Grain

開發該項目的網站聲稱,Grain語言具有學術語言和功能語言的特性。通過Binaryen工具鏈和編譯器基礎設施編譯為WebAssembly,Grain可以在瀏覽器、伺服器和任何地方運行。沒有運行時類型錯誤,也不需要類型註釋。Grain工具鏈具有CLI、編譯器、標準庫,並作為單個二進位制檔案提供。開發人員將需要Node.js和Yarn從原始碼構建Grain,並且二進位制檔案可用於Linux、MacOS和Windows。

8.JWebAssembly

JWebAssembly由I-Net Software公司開發,是一個 Java位元組碼到WebAssembly編譯器,它以Java類檔案為輸入,生成WebAssembly二進位制格式(.wasm檔案)或文字格式(.wat檔案)作為輸出。目標是使用WebAssembly在瀏覽器中本地運行。在理論上,JWebAssembly可以編譯那些能夠編譯Java ava位元組碼的語言,例如Clojure、Groovy、JRuby、Kotlin和Scala,這些語言都有待測試。

JWebAssembly尚未準備好生產。儘管JWebAssembly 1.0版本所需的一切都已實現,但測試仍有待完成。1.0版路線圖需要Java位元組碼解析器、測試框架和Gradle插件等功能。 I-Net Software公司預計今年將釋出JWebAssembly 1.0。

9.Pyodide

Pyodide項目最近從Mozilla遷移出來之後成為一個獨立項目,將Python和Python科學堆棧編譯到WebAssembly,將Python 3.8、NumPy、SciPy、Matplotlib、Scikit-learn 和其他數十個包引入瀏覽器。Pyodide提供JavaScript和Python之間物件的透明轉換,並允許Python 訪問Web API。Pyodide始於2018年,是Iodide項目的一部分,用於在瀏覽器中進行資料科學。使用者可以從瀏覽器中的REPL嘗試採用Pyodide。

10.TeaVM

作為Java位元組碼的提前編譯器,TeaVM通過WebAssembly和JavaScript在瀏覽器中運行。但是,需要注意 WebAssembly 支援目前處於試驗階段。與其近親GWT(Google Web Toolkit)一樣,TeaVM允許開發人員採用Java編寫應用程式,並將它們部署為JavaScript。與GWT不同,TeaVM使用編譯後的類檔案,而不是原始碼。此外,TeaVM依賴於現有的編譯器,例如javac、kotlinc和scalac,因此可以編譯Kotlin和Scala程式碼以及Java。TeaVM主要是一個Web開發工具,但它不是為在Java或Kotlin中使用大型程式碼庫並生成JavaScript而設計的。TeaVM子項目Flavour可以作為編寫單頁Web應用程式的框架。


IT145.com E-mail:sddin#qq.com