基于WebAssembly的熱門語言項目
譯文【51CTO.com快譯】從瞬時運行的Web應用程序到瀏覽器中的Python語言,一些熱門的編程語言和編譯器項目為WebAssembly的承諾提供多種選擇。
如今的Web應用程序的運行速度和響應速度遠不及桌面應用程序,但如果能做到呢?這就是WebAssembly做出的承諾。
WebAssembly是一種低級的類匯編(assembly-like)語言,具有緊湊的二進制格式,可以在Web瀏覽器中以接近桌面設(shè)備的性能運行。與此同時,WebBaseMulk為C/C++、C、RISE、GO、Kotlin、SWIFT等編程語言提供了一個可移植的編譯目標。
WebAssembly被譽為一種既可以提高Web應用程序性能,又允許在瀏覽器應用程序開發(fā)中使用JavaScript以外的語言的方式,它得到Google、Mozilla、Apple和Microsoft瀏覽器的支持,所有這些瀏覽器都在其引擎中支持該技術(shù)。
WebAssembly促進了一系列新技術(shù)的開發(fā),其中包括利用其強大功能的全新編程語言。以下是致力為WebAssembly支持的10個語言項目。
1.Binaryen
Binaryen是一個用于WebAssembly的編譯器工具鏈基礎(chǔ)設(shè)施庫。Binaryen采用C++編寫,旨在使編譯到WebAssembly變得更加容易、高效和快速。它在單個標頭中有一個C API,并且可以從JavaScript中使用。輸入以類似 WebAssembly的形式被接受,但一般控制圖也被一些編譯器接受。
Binaryen的內(nèi)部IR使用緊湊的數(shù)據(jù)結(jié)構(gòu),并利用所有 CPU 內(nèi)核進行并行代碼生成和優(yōu)化。IR也很容易編譯到WebAssembly,因為它本質(zhì)上是WebAssembly的一個子集。特定于 WebAssembly的優(yōu)化提高了代碼大小和速度,使Binaryen可以單獨用作編譯器后端。
2.Blazor WebAssembly
Blazor WebAssembly是一個框架,用于使用.NET構(gòu)建交互式、客戶端的單頁Web應用程序,并將這些應用程序托管在基于WebAssembly的.NET 運行時的瀏覽器中(包括移動設(shè)備瀏覽器)。不需要插件或?qū)⒋a重新編譯成其他語言。在運行時使.NET代碼能夠通過 WebAssembly的JavaScript API訪問瀏覽器功能。
當Blazor WebAssembly應用程序在瀏覽器中運行時,C#代碼文件和Razor文件將編譯為.NET程序集,這些程序集將隨著.NET運行時一起下載到瀏覽器。而且,由于.NET代碼是在瀏覽器的JavaScript沙盒中的WebAssembly上執(zhí)行的,所以它會受到保護,因此可以防止客戶端計算機上的惡意操作。Blazor WebAssembly應用程序可以獨立部署,也可以在服務器端支持下部署。
3.Cheerp
Leaning科技公司開發(fā)的Cheerp被定位為用于Web的企業(yè)級C/C++ 編譯器,將C、C++、甚至C++ 17編譯成 WebAssembly、JavaScript 或兩者的組合。Cheerp可以集成到 LLVM/Clang基礎(chǔ)設(shè)施中,通過自定義優(yōu)化來提高性能并最小化編譯輸出的大小。Cheerp主要用于將現(xiàn)有的C/C++庫和應用程序移植到HTML5,也可用于編寫Web應用程序和WebAssembly組件。Cheerp是在開源和商業(yè)許可下提供的。
4.CheerpJ
這款基于LLVM的編譯器被譽為“Web的Java編譯器”,可將任何Java客戶端應用程序轉(zhuǎn)換為WebAssembly、JavaScript和HTML,從而使Java客戶端應用程序能夠在各個瀏覽器中運行。CheerpJ利用三個組件:AOT(提前)編譯器、WebAssembly和JavaScript DOM互操作性API,以從Java訪問DOM。使用CheerpJ,可以使用AOT 編譯器編譯JAR檔案。CheerpJ 不需要任何服務器端支持。
和Cheerp一樣,CheerpJ也是Leaning科技公司開發(fā)的。
5.Emscripten
Emscripten這個開源編譯器工具鏈將C和C++或任何其他使用LLVM編譯器技術(shù)的語言編譯成WebAssembly,以便部署在Web、Node.js或Wasm上。Emscripten 編譯器emcc也通過JavaScript為編譯后的代碼提供API支持。Emscripten已被用于將現(xiàn)實世界的代碼庫列表轉(zhuǎn)換為WebAssembly,其中包括商業(yè)代碼庫,例如Unreal Engine 4游戲引擎和Unity 3D 平臺。Emscripten支持C和C++標準庫、C++和OpenGL/WebGL圖形命令,用于安裝Emscripten 工具鏈(emcc、LLVM 等)的Emscripten SDK可以在Linux、MacOS和Windows等操作系統(tǒng)上使用。
6.Forest
Forest 是一種可編譯為 WebAssembly的函數(shù)式編程語言。開發(fā)人員Nick Johnstone表示,F(xiàn)orest背后的目標是提供一種語言,使創(chuàng)建復雜、交互式和功能性的Web應用程序變得更容易,并且沒有這種方法的傳統(tǒng)開銷。
目前被描述為“pre-alpha、實驗性、概念研究軟件”,F(xiàn)orest具有靜態(tài)類型、模式匹配、不可變數(shù)據(jù)結(jié)構(gòu)、多種語法和自動代碼格式。開發(fā)中的第一個語法受到Elm和Haskell的啟發(fā)。
Forest語言的設(shè)計原則包括易于協(xié)作、盡可能無痛的測試以及在結(jié)構(gòu)和語義上達成一致,同時在語法上達成一致。Johnstone 努力讓Forest足夠快來構(gòu)建復雜的游戲,這樣使用網(wǎng)絡(luò)應用程序運行得非???。
7.Grain
開發(fā)該項目的網(wǎng)站聲稱,Grain語言具有學術(shù)語言和功能語言的特性。通過Binaryen工具鏈和編譯器基礎(chǔ)設(shè)施編譯為WebAssembly,Grain可以在瀏覽器、服務器和任何地方運行。沒有運行時類型錯誤,也不需要類型注釋。Grain工具鏈具有CLI、編譯器、標準庫,并作為單個二進制文件提供。開發(fā)人員將需要Node.js和Yarn從源代碼構(gòu)建Grain,并且二進制文件可用于Linux、MacOS和Windows。
8.JWebAssembly
JWebAssembly由I-Net Software公司開發(fā),是一個 Java字節(jié)碼到WebAssembly編譯器,它以Java類文件為輸入,生成WebAssembly二進制格式(.wasm文件)或文本格式(.wat文件)作為輸出。目標是使用WebAssembly在瀏覽器中本地運行。在理論上,JWebAssembly可以編譯那些能夠編譯Java ava字節(jié)碼的語言,例如Clojure、Groovy、JRuby、Kotlin和Scala,這些語言都有待測試。
JWebAssembly尚未準備好生產(chǎn)。盡管JWebAssembly 1.0版本所需的一切都已實現(xiàn),但測試仍有待完成。1.0版路線圖需要Java字節(jié)碼解析器、測試框架和Gradle插件等功能。 I-Net Software公司預計今年將發(fā)布JWebAssembly 1.0。
9.Pyodide
Pyodide項目最近從Mozilla遷移出來之后成為一個獨立項目,將Python和Python科學堆棧編譯到WebAssembly,將Python 3.8、NumPy、SciPy、Matplotlib、Scikit-learn 和其他數(shù)十個包引入瀏覽器。Pyodide提供JavaScript和Python之間對象的透明轉(zhuǎn)換,并允許Python 訪問Web API。Pyodide始于2018年,是Iodide項目的一部分,用于在瀏覽器中進行數(shù)據(jù)科學。用戶可以從瀏覽器中的REPL嘗試采用Pyodide。
10.TeaVM
作為Java字節(jié)碼的提前編譯器,TeaVM通過WebAssembly和JavaScript在瀏覽器中運行。但是,需要注意 WebAssembly 支持目前處于試驗階段。與其近親GWT(Google Web Toolkit)一樣,TeaVM允許開發(fā)人員采用Java編寫應用程序,并將它們部署為JavaScript。與GWT不同,TeaVM使用編譯后的類文件,而不是源代碼。此外,TeaVM依賴于現(xiàn)有的編譯器,例如javac、kotlinc和scalac,因此可以編譯Kotlin和Scala代碼以及Java。TeaVM主要是一個Web開發(fā)工具,但它不是為在Java或Kotlin中使用大型代碼庫并生成JavaScript而設(shè)計的。TeaVM子項目Flavour可以作為編寫單頁Web應用程序的框架。
原文標題:10 hot language projects riding WebAssembly,作者:Paul Krill
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】