【51CTO.com快译】从瞬时运行的Web应用程序到浏览器中的Python语言,一些热门的编程语言和编译器项目为WebAssembly的承诺提供多种选择。
如今的Web应用程序的运行速度和响应速度远不及桌面应用程序,但如果能做到呢?这就是WebAssembly做出的承诺。
WebAssembly是一种低级的类汇编(assembly-like)语言,具有紧凑的二进制格式,可以在Web浏览器中以接近桌面设备的性能运行。与此同时,WebBaseMulk为C/C++、C、RISE、GO、Kotlin、SWIFT等编程语言提供了一个可移植的编译目标。
WebAssembly被誉为一种既可以提高Web应用程序性能,又允许在浏览器应用程序开发中使用JavaScript以外的语言的方式,它得到Google、Mozilla、Apple和Microsoft浏览器的支持,所有这些浏览器都在其引擎中支持该技术。
WebAssembly促进了一系列新技术的开发,其中包括利用其强大功能的全新编程语言。以下是致力为WebAssembly支持的10个语言项目。
1.Binaryen
Binaryen是一个用于WebAssembly的编译器工具链基础设施库。Binaryen采用C++编写,旨在使编译到WebAssembly变得更加容易、高效和快速。它在单个标头中有一个C API,并且可以从JavaScript中使用。输入以类似 WebAssembly的形式被接受,但一般控制图也被一些编译器接受。
Binaryen的内部IR使用紧凑的数据结构,并利用所有 CPU 内核进行并行代码生成和优化。IR也很容易编译到WebAssembly,因为它本质上是WebAssembly的一个子集。特定于 WebAssembly的优化提高了代码大小和速度,使Binaryen可以单独用作编译器后端。
2.Blazor WebAssembly
Blazor WebAssembly是一个框架,用于使用.NET构建交互式、客户端的单页Web应用程序,并将这些应用程序托管在基于WebAssembly的.NET 运行时的浏览器中(包括移动设备浏览器)。不需要插件或将代码重新编译成其他语言。在运行时使.NET代码能够通过 WebAssembly的JavaScript API访问浏览器功能。
当Blazor WebAssembly应用程序在浏览器中运行时,C#代码文件和Razor文件将编译为.NET程序集,这些程序集将随着.NET运行时一起下载到浏览器。而且,由于.NET代码是在浏览器的JavaScript沙盒中的WebAssembly上执行的,所以它会受到保护,因此可以防止客户端计算机上的恶意操作。Blazor WebAssembly应用程序可以独立部署,也可以在服务器端支持下部署。
3.Cheerp
Leaning科技公司开发的Cheerp被定位为用于Web的企业级C/C++ 编译器,将C、C++、甚至C++ 17编译成 WebAssembly、JavaScript 或两者的组合。Cheerp可以集成到 LLVM/Clang基础设施中,通过自定义优化来提高性能并最小化编译输出的大小。Cheerp主要用于将现有的C/C++库和应用程序移植到HTML5,也可用于编写Web应用程序和WebAssembly组件。Cheerp是在开源和商业许可下提供的。
4.CheerpJ
这款基于LLVM的编译器被誉为“Web的Java编译器”,可将任何Java客户端应用程序转换为WebAssembly、JavaScript和HTML,从而使Java客户端应用程序能够在各个浏览器中运行。CheerpJ利用三个组件:AOT(提前)编译器、WebAssembly和JavaScript DOM互操作性API,以从Java访问DOM。使用CheerpJ,可以使用AOT 编译器编译JAR档案。CheerpJ 不需要任何服务器端支持。
和Cheerp一样,CheerpJ也是Leaning科技公司开发的。
5.Emscripten
Emscripten这个开源编译器工具链将C和C++或任何其他使用LLVM编译器技术的语言编译成WebAssembly,以便部署在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等操作系统上使用。
6.Forest
Forest 是一种可编译为 WebAssembly的函数式编程语言。开发人员Nick Johnstone表示,Forest背后的目标是提供一种语言,使创建复杂、交互式和功能性的Web应用程序变得更容易,并且没有这种方法的传统开销。
目前被描述为“pre-alpha、实验性、概念研究软件”,Forest具有静态类型、模式匹配、不可变数据结构、多种语法和自动代码格式。开发中的第一个语法受到Elm和Haskell的启发。
Forest语言的设计原则包括易于协作、尽可能无痛的测试以及在结构和语义上达成一致,同时在语法上达成一致。Johnstone 努力让Forest足够快来构建复杂的游戏,这样使用网络应用程序运行得非常快。
7.Grain
开发该项目的网站声称,Grain语言具有学术语言和功能语言的特性。通过Binaryen工具链和编译器基础设施编译为WebAssembly,Grain可以在浏览器、服务器和任何地方运行。没有运行时类型错误,也不需要类型注释。Grain工具链具有CLI、编译器、标准库,并作为单个二进制文件提供。开发人员将需要Node.js和Yarn从源代码构建Grain,并且二进制文件可用于Linux、MacOS和Windows。
8.JWebAssembly
JWebAssembly由I-Net Software公司开发,是一个 Java字节码到WebAssembly编译器,它以Java类文件为输入,生成WebAssembly二进制格式(.wasm文件)或文本格式(.wat文件)作为输出。目标是使用WebAssembly在浏览器中本地运行。在理论上,JWebAssembly可以编译那些能够编译Java ava字节码的语言,例如Clojure、Groovy、JRuby、Kotlin和Scala,这些语言都有待测试。
JWebAssembly尚未准备好生产。尽管JWebAssembly 1.0版本所需的一切都已实现,但测试仍有待完成。1.0版路线图需要Java字节码解析器、测试框架和Gradle插件等功能。 I-Net Software公司预计今年将发布JWebAssembly 1.0。
9.Pyodide
Pyodide项目最近从Mozilla迁移出来之后成为一个独立项目,将Python和Python科学堆栈编译到WebAssembly,将Python 3.8、NumPy、SciPy、Matplotlib、Scikit-learn 和其他数十个包引入浏览器。Pyodide提供JavaScript和Python之间对象的透明转换,并允许Python 访问Web API。Pyodide始于2018年,是Iodide项目的一部分,用于在浏览器中进行数据科学。用户可以从浏览器中的REPL尝试采用Pyodide。
10.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应用程序的框架。
原文10 hot language projects riding WebAssembly,作者:Paul Krill
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】