vlambda博客
学习文章列表

13 个使用 WebAssembly 的热门语言项目

当今的 Web 应用程序远没有本地桌面应用程序那么快速和响应迅速,但如果可以呢?这就是WebAssembly的承诺。


WebAssembly 是一种低级的、类似汇编的语言,具有紧凑的二进制格式,可在 Web 浏览器中以接近本机的性能运行。同时,WebAssembly 为 C/C++、C#、Rust、Go、Kotlin、Swift 和其他编程语言提供了可移植的编译目标。


WebAssembly 被誉为提高 Web 应用程序性能并允许在浏览器应用程序开发中使用 JavaScript 以外的语言的一种方式,受到 Google、Mozilla、Apple 和 Microsoft 的支持,所有这些公司都在其浏览器引擎中支持该技术。


WebAssembly 导致了一系列新技术的开发,包括利用其强大功能的全新编程语言。以下是 13 个在 WebAssembly 上投入巨大的语言项目。


Binaryen 

Binaryen 是 WebAssembly 的编译器工具链基础设施库。Binaryen 用 C++ 编写,旨在使编译到 WebAssembly 变得简单、有效和快速。它在单个标头中有一个 C API,并且可以从 JavaScript 中使用。输入以类似 WebAssembly 的形式接受,但通用控制图也被喜欢它的编译器接受。

Binaryen 的内部 IR(中间表示)使用紧凑的数据结构并利用所有 CPU 内核进行并行代码生成和优化。IR 也很容易编译为 WebAssembly,因为它本质上是 WebAssembly 的一个子集。特定于 WebAssembly 的优化提高了代码大小和速度,使 Binaryen 本身用作编译器后端。

您可以从GitHub[https://github.com/WebAssembly/binaryen]下载 Binaryen 。


Blazor WebAssembly

Blazor WebAssembly 是一个框架,用于使用 .NET 构建交互式、客户端、单页 Web 应用程序,并将这些应用程序托管在基于 WebAssembly 的 .NET 运行时的现代浏览器(包括移动浏览器)中。不需要插件或将代码重新编译成其他语言。运行时使 .NET 代码能够通过 WebAssembly 的 JavaScript API 访问浏览器功能。


当 Blazor WebAssembly 应用在浏览器中运行时,C# 代码文件和 Razor 文件将编译为 .NET 程序集,这些程序集与 .NET 运行时一起下载到浏览器。由于 .NET 代码是在浏览器的 JavaScript 沙箱中的 WebAssembly 上执行的,因此可以防止客户端计算机上的恶意操作。Blazor WebAssembly 应用可以独立部署,也可以在服务器端支持下部署。

可在 dotnet.microsoft.com 上找到Blazor 入门说明[https://dotnet.microsoft.com/learn/aspnet/blazor-tutorial/intro]


Cheerp 

Leaning Technologies 的Cheerp定位为用于 Web 的企业级 C/C++ 编译器,将 C 和 C++(最高 C++ 17)编译成 WebAssembly、JavaScript 或两者的组合。Cheerp 已集成到LLVM/Clang 基础架构中,具有旨在提高性能和最小化编译输出大小的自定义优化。Cheerp 主要用于将现有的 C/C++ 库和应用程序移植到 HTML5,也可用于编写 Web 应用程序和 WebAssembly 组件。Cheerp 是在开源和商业许可下提供的。

您可以从leaningtech.com 下载Cheerp[https://leaningtech.com/cheerp/]


CheerpJ 

这款基于 LLVM 的编译器被称为“用于 Web 的 Java 编译器”,可将任何 Java 客户端应用程序转换为 WebAssembly、JavaScript 和 HTML,从而使 Java 客户端应用程序能够在现代浏览器中运行。CheerpJ 利用三个组件:AOT(提前)编译器、WebAssembly 和 JavaScript 中的运行时以及 JavaScript DOM 互操作性 API,以从 Java 访问 DOM。使用 CheerpJ,可以使用 AOT 编译器编译 JAR 档案。CheerpJ 不需要任何服务器端支持。

与 Cheerp 一样,CheerpJ 来自 Leaning Technologies。您可以从leaningtech.com[https://leaningtech.com/cheerpj/#download]下载它。


Emscripten

这个开源编译器工具链将 C 和 C++ 或任何其他使用 LLVM 编译器技术的语言编译到 WebAssembly 中,以便在 Web、Node.js 或 Wasm 运行时(如Wasmer)上进行部署。(Emscripten 编译器 emcc 也会发出 JavaScript,为编译后的代码提供 API 支持。Emscripten 已被用于将现实世界代码库列表转换为 WebAssembly,包括诸如 Unreal Engine 4 游戏引擎和 Unity 3D 平台等商业代码库. Emscripten 支持 C 和 C++ 标准库、C++ 异常和 OpenGL/WebGL 图形命令。用于安装 Emscripten 工具链(emcc、LLVM 等)的Emscripten SDK[https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install]可以在 Linux、MacOS 和 Windows 上使用。

您可以从emscripten.org[https://emscripten.org/docs/getting_started/downloads.html]下载 Emscripten 。


Forest

Forest 是一种编译成 WebAssembly 的函数式编程语言。开发人员尼克约翰斯通说,Forest 背后的目标是提供一种语言,使创建复杂、交互式和功能性的 Web 应用程序变得更加容易,但没有这种方法的传统开销。

目前被描述为“pre-alpha、实验性、概念性研究软件”,Forest 具有静态类型、模式匹配、不可变数据结构、多种语法和自动代码格式化。开发中的第一个语法受到 Elm 和 Haskell 的启发。

Forest 语言的设计原则包括易于协作、尽可能轻松地进行测试,以及在结构和语义上达成一致,同时在语法上达成一致。Johnstone 努力让 Forest 的速度足以构建复杂的游戏,以使普通的 Web 应用程序“速度极快”。

您可以从GitHub[https://github.com/forest-lang/forest-compiler]下载 Forest 。


Grain

该项目网站称,Grain 语言将学术和功能语言的特性带入了 21 世纪。通过Binaryen[https://github.com/WebAssembly/binaryen]工具链和编译器基础架构编译到 WebAssembly ,Grain 可以在浏览器、服务器上以及可能在任何地方运行。没有运行时类型错误,也不需要类型注释。Grain 工具链具有 CLI、编译器、运行时和标准库,作为单个二进制文件提供。开发人员将需要 Node.js 和 Yarn 从源代码构建 Grain,并且二进制文件可用于 Linux、MacOS 和 Windows。 

您可以在grain-lang.org[https://grain-lang.org/docs/getting_grain]找到开始使用 Grain 的说明。


JWebAssembly

JWebAssembly 来自 I-Net Software,是一个 Java 字节码到 WebAssembly 编译器,它以 Java 类文件作为输入并生成 WebAssembly 二进制格式(.wasm 文件)或文本格式(.wat 文件)作为输出。目标是使用 WebAssembly 在浏览器中本地运行。理论上,JWebAssembly 可以编译任何可以编译为 Java 字节码的语言,例如 Clojure、Groovy、JRuby、Kotlin 和 Scala,有待测试。

JWebAssembly 应该很快就可以投入生产了。JWebAssembly 1.0 版本所需的所有里程碑都已实现,并且发布了候选版本。1.0 版路线图需要 Java 字节码解析器、测试框架和 Gradle 插件等功能。

您可以从GitHub[https://github.com/i-net-software/JWebAssembly]下载 JWebAssembly 。


Pyodide

最近从Mozilla 转为独立项目的 Pyodide 项目将 Python 和 Python 科学堆栈编译到 WebAssembly,将 Python 3.8 运行时、NumPy、SciPy、Matplotlib、Scikit-learn 和许多其他包带到浏览器。Pyodide 提供 JavaScript 和 Python 之间对象的透明转换,并允许 Python 访问 Web API。Pyodide 始于 2018 年,是 Iodide 项目的一部分,用于在浏览器中进行数据科学。可以从浏览器中的REPL[https://pyodide.org/en/stable/console.html]试用 Pyodide 。

您可以在pyodide.org[https://pyodide.org/en/stable/usage/quickstart.html]找到下载和使用 Pyodide 的说明。


Spin

Spin 来自云计算软件提供商Fermyon Technologies[https://www.fermyon.com/],是一个用于微服务、Web 应用程序和其他基于服务器的应用程序的 WebAssembly 框架。开发人员可以使用 Spin 为云编写 WebAssembly。提供接口用于编写 WebAssembly 模块以实现响应 HTTP 请求等功能。借助 Spin,开发人员可以使用包括 Rust、Go、Python、Ruby、AssemblyScript、Grain、C/C++ 等在内的语言。Spin 支持 WAGI(WebAssembly 网关接口)模块和 Bindle 打包系统。现在处于早期预览阶段,Spin 被认为是实验性代码,预计会在第一个稳定版本之前进行重大更改。 

Spin 托管在GitHub 上[https://github.com/fermyon/spin]


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 应用程序的框架。

您可以在GitHub 上[https://github.com/konsoletyper/teavm]找到下载和使用 TeaVM 的说明。


Uno Platform

作为 Xamarin 移动应用平台的替代品,Uno Platform是一个 UI 平台,供 .NET 团队使用 C# 和 XAML 为 WebAssembly、Web、Windows、MacOS、Linux、iOS 和 Android 构建单一代码库应用程序。Uno 利用.NET 5中的 Mono-WASM 运行时在所有主要 Web 浏览器中运行 C# 代码,并充当 WinUI 和 UWP(通用 Windows 平台)应用程序在 WebAssembly 上本机运行的桥梁。对于使用 Uno 构建 Web 应用程序,开发人员可以使用 Visual Studio 或 Visual Studio Code。

可以在Uno Platform 网站[https://platform.uno/docs/articles/getting-started-tutorial-1.html]上找到入门指南。


Wasmcloud

来自 Cosmonic 的Wasmcloud[https://wasmcloud.dev/]是一个应用程序运行时,它利用 WebAssembly 开发可插入多云、边缘和浏览器环境的可组合、可移植应用程序。该技术被宣传为提供接近原生的性能,通过 WebAssembly 沙箱和将业务逻辑与特定底层功能分离的参与者模型提供安全性。开发人员可以用他们选择的语言编写一次微服务,然后将它们部署到任何地方。当前支持的语言包括 Rust、TinyGo 和 AssemblyScript。Wasmcloud 已被接受为云原生计算基金会 (CNCF) 沙盒项目。

可以在wasmcloud.dev[https://wasmcloud.dev/overview/installation]找到 wasmCloud 的安装说明。