当前位置: 首页 > 科技观察

基于WebAssembly的热门语言项目

时间:2023-03-23 10:38:20 科技观察

【.com快译】从即时运行的Web应用程序到浏览器中的Python语言,一些流行的编程语言和编译器项目为WebAssembly的承诺提供了多种选择。今天的Web应用程序远不及桌面应用程序那样快速和响应迅速,但是如果呢?这是WebAssembly做出的承诺。WebAssembly是一种低级类汇编语言,具有紧凑的二进制格式,可以在具有接近桌面性能的Web浏览器中运行。同时,WebBaseMulk为C/C++、C、RISE、GO、Kotlin、Swift等编程语言提供了可移植的编译目标。WebAssembly被誉为一种既可以提高Web应用程序性能又可以在浏览器应用程序开发中使用JavaScript以外的语言的方法,Google、Mozilla、Apple和Microsoft的浏览器都支持WebAssembly,所有这些浏览器都在其引擎中支持这项技术。WebAssembly促进了一系列新技术的开发,包括利用其强大功能的全新编程语言。这里有10个致力于支持WebAssembly的语言项目。1.BinaryenBinaryen是WebAssembly的编译器工具链基础设施库。Binaryen是用C++编写的,旨在使编译到WebAssembly更容易、更高效、更快。它在单个标头中有一个CAPI,可以从JavaScript中使用。以类似于WebAssembly的形式接受输入,但一些编译器也接受通用控制图。Binaryen的内部IR使用紧凑的数据结构,并利用所有CPU内核进行并行代码生成和优化。IR也很容易编译成WebAssembly,因为它本质上是WebAssembly的一个子集。WebAssembly特定的优化增加了代码大小和速度,使Binaryen能够单独用作编译器后端。2.BlazorWebAssemblyBlazorWebAssembly是一个框架,用于使用.NET构建交互式、客户端单页Web应用程序,并在基于WebAssembly的.NET运行时(包括移动设备浏览器)的浏览器中托管这些应用程序。不需要插件或将代码重新编译成其他语言。使.NET代码能够在运行时通过WebAssembly的JavaScriptAPI访问浏览器功能。当BlazorWebAssembly应用程序在浏览器中运行时,C#代码文件和Razor文件被编译成.NET程序集,这些程序集与.NET运行时一起下载到浏览器。而且,由于.NET代码是在浏览器的JavaScript沙箱中的WebAssembly之上执行的,因此它受到保护,从而防止在客户端计算机上进行恶意操作。BlazorWebAssembly应用程序可以独立部署或在服务器端支持下部署。3、CheerpLeaningTechnologyCompany开发的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和JavaScriptDOM互操作性API以从Java访问DOM。使用CheerpJ,可以使用AOT编译器编译JAR档案。CheerpJ不需要任何服务器端支持。和Cheerp一样,CheerpJ也是由LeaningTechnologies开发的。5.EmscriptenEmscripten这个开源编译器工具链使用LLVM编译器技术将C和C++或任何其他语言编译成WebAssembly,以便部署在Web、Node.js或Wasm上。Emscripten编译器emcc还为通过JavaScript编译的代码提供API支持。Emscripten已被用于将一系列真实世界的代码库转换为WebAssembly,包括商业代码库,例如UnrealEngine4游戏引擎和Unity3D平台。Emscripten支持C和C++标准库、C++和OpenGL/WebGL图形命令,安装Emscripten工具链(emcc、LLVM等)的EmscriptenSDK可以在Linux、MacOS、Windows等操作系统上使用。6.ForestForest是一种可以编译为WebAssembly的函数式编程语言。根据开发人员NickJohnstone的说法,Forest背后的目标是提供一种语言,可以更轻松地创建复杂、交互式和功能性的Web应用程序,而无需这种方法的传统开销。Forest目前被描述为“pre-alpha、实验性、概念研究软件”,具有静态类型、模式匹配、不可变数据结构、多种语法和自动代码格式化的功能。开发中的第一个语法受到Elm和Haskell的启发。Forest语言的设计原则包括易于协作、尽可能无痛地进行测试以及在就语法达成一致的同时就结构和语义达成一致。Johnstone努力使Forest足够快,以构建使用Web应用程序运行速度非常快的复杂游戏。7.GrainDevelopment该项目的网站声称Grain语言具有学术语言和功能语言的特点。通过Binaryen工具链和编译器基础架构编译为WebAssembly,Grain可以在浏览器、服务器和任何地方运行。没有运行时类型错误,也不需要类型注释。Grain工具链具有CLI、编译器、标准库,并作为单个二进制文件提供。开发人员将需要Node.js和Yarn从源代码构建Grain,二进制文件可用于Linux、MacOS和Windows。8.JWebAssemblyJWebAssembly由I-NetSoftware开发,是一个Java字节码到WebAssembly的编译器,它将Java类文件作为输入,并生成WebAssembly二进制格式(.wasm文件)或文本格式(.wat文件)作为输出。目标是使用WebAssembly在浏览器中本地运行。理论上,JWebAssembly可以编译出可以编译Javaava字节码的语言,比如Clojure、Groovy、JRuby、Kotlin、Scala,还有待测试。JWebAssembly尚未准备好用于生产。尽管JWebAssembly1.0版所需的一切都已实现,但测试仍有待完成。1.0路线图需要Java字节码解析器、测试框架和Gradle插件等功能。I-NetSoftware预计将在今年发布JWebAssembly1.0。9.PyodidePyodide项目最近从Mozilla迁移成为一个独立的项目,将Python和Python科学堆栈编译到WebAssembly、Python3.8、NumPy、SciPy、Matplotlib、Scikit-learn和其他几十个包到浏览器中。Pyodide提供JavaScript和Python之间对象的透明转换,并允许Python访问WebAPI。Pyodide于2018年作为浏览器数据科学Iodide项目的一部分启动。用户可以尝试在浏览器中使用REPL中的Pyodide。10.作为Java字节码的高级编译器,TeaVM通过WebAssembly和JavaScript运行在浏览器中。然而,重要的是要注意WebAssembly支持目前处于试验阶段。与其近亲GWT(GoogleWebToolkit)一样,TeaVM允许开发人员使用Java编写应用程序并将它们部署为JavaScript。与GWT不同,TeaVM使用编译的类文件,而不是源代码。此外,TeaVM依赖于现有的编译器,如javac、kotlinc和scalac,因此它可以编译Kotlin和Scala代码以及Java。TeaVM主要是一种Web开发工具,但它并非设计用于使用Java或Kotlin中的大型代码库并生成JavaScript。Flavor是TeaVM的一个子项目,可以作为编写单页Web应用程序的框架。原标题:骑WebAssembly的10个热门语言项目,作者:PaulKrill