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)沙盒项目。