13個使用WebAssembly的熱門語言專案 - infoworld
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)沙盒專案。
相關文章
- 最熱門的13個Java微服務框架Java微服務框架
- 哪種程式語言最熱門?
- 十個python熱門專案,你知道幾個Python
- 第四種Web語言:WebAssemblyWeb
- Go 語言入門練手專案推薦Go
- 使用Blazor WebAssembly整合PocketBase的基礎專案模板BlazorWeb
- 一個小而美的 C 語言專案
- 13個不容錯過的Java專案Java
- 【Go 語言入門專欄】Go 語言的起源與發展Go
- 關於機器學習,你應該知道的3個熱門專業術語機器學習
- 近幾個月Github上最熱門的Java專案一覽GithubJava
- 使用 nodejs 寫爬蟲(二): 抓取 github 熱門專案NodeJS爬蟲Github
- 推薦10個Java方向最熱門的開源專案(8月)Java
- WebAssembly 基礎以及結合其他程式語言Web
- CheerpX:使用 WebAssembly 在瀏覽器中執行任何程式語言Web瀏覽器
- 身為最熱門的程式語言,Java求職前景到底如何?Java求職
- C語言 檔案IO的使用C語言
- 13 個示例快速入門 JS 抽象語法樹JS抽象語法樹
- 2018年Github上值得學習的十個熱門專案Github
- 手拉手教你實現一門程式語言 Enkel, 系列 13
- Python是什麼?Python成為熱門語言的原因!Python
- IT培訓分享:11種熱門程式語言的主要用途!
- 近期GitHub上最熱門的開源專案(附連結)Github
- 好玩的github專案-go語言統計github上面各個程式語言每月的新增或者更新的數量GithubGo
- 近期 github 機器學習熱門專案top5Github機器學習
- github上十款熱門cmdb專案分享Github
- 各個程式語言語言的檔案/函式/變數的命名方法函式變數
- 在大型專案開發上,Python 真是個“爛”語言!Python
- 在大型專案開發上,Python真是個“爛”語言!Python
- Go語言入門系列(四)之map的使用Go
- GitHub專案:自然語言處理專案的相關乾貨整理Github自然語言處理
- 選擇一門程式語言,任何一門語言
- 值得學習的C語言開源專案C語言
- 13 種程式語言名稱的來歷
- 使用Go語言構建一個解釋型語言Go
- Go 語言專案程式碼品質Go
- Golang語言檔案操作快速入門篇Golang
- 上手一個 Vue 的入門專案Vue