【51CTO.com快译】今天的 Web 应用程序远没有原生桌面应用程序响应快,但就是WebAssembly的承诺可以做到。
WebAssembly 是一种低级、类汇于汇编语言,具有紧凑的二进制格式,在 Web 浏览器中以接近本机的性能运行。与此同时,WebAssembly 为 C/C++、C#、Rust、Go、Kotlin、Swift 等编程语言提供了一个可移植的编译目标。
WebAssembly 被誉为提高 Web 应用程序性能并允许在浏览器应用程序开发中使用 JavaScript 以外的语言的一种方式,它到了 Google、Mozilla、苹果和微软
的支持,这些公司都在浏览器引擎中使用这项技术。
WebAssembly 开发了一系列新技术,包括利用其强大功能的全新编程语言。以下是在 WebAssembly 基础上开发的 10 个语言项目。
Binaryen
Binaryen是用于WebAssembly的编译器工具链基础结构库。Binaryen 用 C++ 编写,旨在使汇编语言易于编写、高效、快速。它在头文件中有一个 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 应用程序可以独立部署,也可以在服务器端支持下进行部署。
Cheep
Leaning Technologies 的Cheerp被定位为用于 Web 的企业级 C/C++ 编译器,将 C 和 C++ 编译为 C++ 17,并将其集成到 WebAssembly、JavaScript 或两者的组合中。Cheerp 集成到LLVM/Clang 基础结构中,通过定制优化来提高性能并最小化编译输出的大小。Cheerp 主要用于将现有的 C/C++ 库和应用程序移植到 HTML5,Cheerp也可以用来编写 Web 应用程序和 WebSasMeLabess组件。Cheerp 是在开源和商业许可下提供的。
CheerpJ
CheerpJ是基于被誉为“Web 的 Java 编译器”的 LLVM 编译器上运行的,它可将任何 Java 客户端应用程序转换为 WebAssembly、JavaScript 和 HTML,从而使 Java 客户端应用程序能够在浏览器中运行。CheerpJ 使用三个组件:AOT编译器、WebAssembly 和 JavaScript 中的运行时以及 JavaScript DOM 互操作性 API,从 Java 访问 DOM。使用 CheerpJ,可以使用 AOT 编译器编译 JAR 档案文件。CheerpJ 不需要任何服务器端支持。
Emscripten
这个开源编译器工具链将 C 和 C++ 或任何其他语言使用 LLVM 编译器技术编入WebBaseMalk中,用于部署在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 上使用。
Forest
Forest 是一种可编译为 WebAssembly 的函数式编程语言。开发人员Nick Johnstone说,Forest 背后的目标是提供一种语言,使创建复杂、交互式和功能性的web应用程序变得更加容易。
目前,Forest被描述为“pre-alpha、实验性、概念研究软件”,Forest 具有静态类型、模式匹配、不可变的数据结构、多种语法和自动代码格式。开发中的第一个语法受到 Elm 和 Haskell 的启发。
Forest 语言的设计原则包括易于协作、尽可能简单的测试以及在结构和语义上达成一致,同时在语法上达成一致。Johnstone 努力使 Forest 反应足够快,以构建复杂的游戏,使普通的web应用程序变得“非常快”。
Binaryen
该项目网站称,Grain语言为21世纪带来了学术语言和功能语言的特点。通过Binaryen工具链和编译器基础设施编译到 WebAssembly上 ,Grain 可以在浏览器、服务器甚至任何地方运行。没有运行时类型错误,也不需要类型注释。Grain 工具链具有 CLI、编译器、运行时间和标准库,作为单个二进制文件提供。开发人员只需要从Node.js 和 Yarn的源代码上构建 Grain,Linux、MacOS和Windows都可以使用二进制文件。
JWebAssembly
JWebAssembly 是一种Java字节码到WebAssembly编译器,它以 Java 类文件为输入,并生成 WebAssembly 二进制格式(.wasm 文件)或文本格式(.wat 文件)作为输出。目标是使用 WebAssembly 在浏览器中本地运行。理论上,JWebAssembly 可以编译任何可以编译为 Java 字节码的语言,例如 Clojure、Groovy、JRuby、Kotlin 和 Scala,有待测试。
JWebAssembly 尚未准备好生产。尽管 JWebAssembly 1.0 版本所需的所有内容都已实现,但测试仍有待完成。版本1.0 路线图要求提供诸如 Java 字节码解析器、测试框架和 Gradle 插件等功能。I-Net Software 预计今年将发布 JWebAssembly 1.0。
Pyodide
Pyodide 项目最近从Mozilla 变成了到一个独立项目,它将 Python 和 Python Scientific堆栈编译到 WebAssembly,将 Python 3.8 运行时间、NumPy、SciPy、Matplotlib、Scikit-learn 以及其他几十个包架构到浏览器中。Pyodide 提供了JavaScript 和 Python 之间对象的透明转换,并允许 Python 访问 Web API。Pyodide 始于 2018 年,是 Iodide 项目的一部分,用于在浏览器中进行数据科学研究。Pyodide可以从浏览器中的REPL试用。
虚拟机(TeaVM)
TeaVM是Java字节码的一个提前编译器,它可以使出WebAssembly和JavaScript在浏览器中运行。但是,请注意 ,WebAssembly 支持目前还处于试验阶段。与GWT(Google Web Toolkit)一样,TeaVM 允许开发人员用 Java 编写应用程序并将它们部署为 JavaScript。与 GWT 不同,TeaVM 使用编译后的类文件,而不是源代码。此外,TeaVM依赖于javac、kotlinc和scalac等现有的编译器,因此可以像编译 Java一样编译Kotlin和Scala代码。TeaVM 主要是一个 Web 开发工具;它不是为了在 Java 或 Kotlin 中获取大型代码基并生成JavaScript而设计的。TeaVM 子项目 Flavour可以作为编写单页web应用程序的框架。
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】