首页 > 其他分享 >WebAssembly 语言支持

WebAssembly 语言支持

时间:2023-01-08 13:31:42浏览次数:58  
标签:WebAssembly JavaScript 语言 Enarx wasmtime 支持 WASI

对 WebAssembly(和 WASI)的支持在所有主要编程语言中都取得了很好的进展。 评估一种语言对 WebAssembly/WASI 的支持程度很重要,因为它可以让我们了解 wasmtime 和 Enarx 的可能性。

Enarx 使用 wasmtime 作为 WebAssembly 的运行时,如果 Wasm 应用程序在 wasmtime 上运行良好,那么它在 Enarx 上也应该同样运行良好。 对给定语言的良好支持意味着整个开发人员社区/生态系统都能够利用 Enarx。

帮助我们评估 WebAssembly 支持的一项重要研究是 WebAssembly 的状态,这是一项年度调查,提供 Wasm 景观的概述,包括语言流行度(当前使用)和可取性(未来)。

wasmtime 用户的受欢迎程度/受欢迎程度

Enarx 团队专门针对使用 wasmtime(Enarx 使用的运行时)的调查受访者分析了数据 。 以下是一些主要发现:

  1. Rust 是最受欢迎的语言(在 wasmtime 用户中经常使用的比例从最初调查的 28% 上升到 44%)和最理想的语言(从 55% 上升到 68%)。 当考虑频繁、有时或偶尔使用时,受欢迎程度跃升至 85%。 当考虑想要很多或一点点时,受欢迎程度会跃升至惊人的 95%。
  2. JavaScript 仍然很受欢迎(如预期的那样,在 wasmtime 用户中经常使用的比例从 18% 下降到 13%)并且非常受欢迎(令人惊讶的是,从 21% 上升到 25%)。 兴趣不仅仅在于浏览器中的 JavaScript 和 Wasm,尽管目前在服务器端的使用率很低。
  3. Go / TinyGo 也越来越受欢迎(在 wasmtime 用户中经常使用的比例从 4% 上升到 8%)并且非常受欢迎(从 19% 上升到 32%)。
  4. 另一种非常受欢迎的语言是 Python(从 16% 上升到 22%)。
    下图突出显示了 wasmtime 用户对 Wasm 语言的使用情况,按“频繁”排序:

WebAssembly 语言支持_WebAssembly

下图是 The State of WebAssembly 年度调查中的 WebAssembly 语言使用情况,但我们从下到上显示了从频繁到偶尔的使用情况,以便更容易直观地了解采用程度:

WebAssembly 语言支持_Python_02

下图突出显示了 wasmtime 用户对 WebAssembly 所需的语言支持,按“多”排名:

WebAssembly 语言支持_WebAssembly_03

下图是 WebAssembly 年度调查的原始图表,但从下到上显示了可取性:

WebAssembly 语言支持_WebAssembly_04

整体语言流行度

在下表中,我们根据 RedMonk 编程语言排名展示了 Wasm/WASI 流行度/受欢迎度以及每种语言的整体流行度。 总体而言,最受欢迎的语言依次为:JavaScript、Python、Java、PHP、C#、C++、TypeScript、Ruby、C、Swift、C、Swift、R、Objective-C、Shell、Scala、Go、PowerShell、Kotlin、 rust和Dart。

受欢迎程度/受欢迎程度和反馈

重要的是要注意一种语言对 WebAssembly 支持所创建的正反馈循环。 更好的支持将提高它的受欢迎程度和吸引力,这反过来又会刺激更好的支持。

这也与先有鸡/先有蛋的问题有关。 对 WebAssembly 支持不佳的语言将继续衰落,直到循环被打破。

在欧洲和北美最近的 Wasm 日中,我们观察到来自 Go/TinyGo、JavaScript、Java、Python 和 C# 等语言的社区投资于为 WebAssembly 提供更好的支持。 这些进步将解锁巨大的生态系统,并允许大型开发人员社区使用 WebAssembly(和 Enarx)。

虽然服务器端的 WebAssembly 还处于早期阶段,但我们在下面提供了每种语言当前状态的简要总结:

WebAssembly 和 Rust

  • WebAssembly 对 Rust 的支持非常好。
  • Rust 是与 WebAssembly 一起工作的最流行和最理想的语言。
  • Enarx 和wasmtime(Enarx 的运行时)都是用Rust 编写的。
  • Enarx 团队为 WASI 套接字、线程和加密做出了上游贡献。

WebAssembly 和 C++

  • WebAssembly 对C++ 的支持非常好。
  • C/C++ 是使用WebAssembly 最流行的语言之一。
  • WASI SDK 工具链由Bytecode 联盟维护。
  • WASI SDK 拉取上游项目 Clang 和 LLVM ,以及 wasi-libc 。

WebAssembly 和C

  • WebAssembly 对C 的支持非常好。
  • C/C++ 是使用WebAssembly 最流行的语言之一。
  • WASI SDK 工具链由Bytecode 联盟维护。
  • WASI SDK 拉动上游项目Clang 和LLVM,以及wasi-libc。

WebAssembly 和Golang

  • 由于 TinyGo ,WebAssembly 对 Go 的支持非常好。
  • TinyGo 提供了一个基于LLVM 的编译器。
  • Go 是使用 WebAssembly(使用 wasmtime)的最流行和第二受欢迎的语言之一。

WebAssembly 和 JavaScript

  • 由于 Javy,WebAssembly 对 JavaScript 的支持很好。
  • Javy 将微型 JavaScript 运行时 QuickJS 与要执行的脚本一起编译为 Wasm。
  • JavaScript 是与 WebAssembly 一起工作的第二大最流行和最理想的语言。
  • TypeScript 是 JavaScript 的超集,可以在编译为 Wasm 之前先转换为 JavaScript。

WebAssembly 和 TypeScript

  • TypeScript 是JavaScript 的超集。 因此,将 TypeScript 与 WebAssembly 结合使用的最佳方法是将其转换为 JavaScript。
  • 由于 Javy,WebAssembly 对 JavaScript 的支持很好。
  • Javy 将微型 JavaScript 运行时 QuickJS 与要执行的脚本一起编译为 Wasm。
  • JavaScript 是与 WebAssembly 一起工作的第二大最流行和最理想的语言。

WebAssembly 和Python

  • 由于 wasm32-wasi 上的 CPython,WebAssembly 对 Python 的支持很好。
  • wasm32-wasi 上的 CPython 包含实用程序和库,用于使用 WASI SDK 和 wasix 为 WebAssembly 平台构建 CPython 源代码。
  • Python 是最适合与WebAssembly 一起工作的语言之一。
  • Python 解释器需要编译为 Wasm,并且 Python 库应该可以从 VFS(虚拟文件系统)获得。
  • 目前 Python 与 wasmtime 一起工作,一旦 Enarx 支持 VFS,它应该与 Enarx 一起工作。

WebAssembly 和.NET

  • 由于 dotnet WASI SDK ,WebAssembly 对 .NET 的支持很好。
  • dotnet WASI SDK 是一个实验性包,可以将.NET Core 项目(包括整个ASP.NET Core 应用程序)构建为独立的WASI 兼容.wasm 文件。

WebAssembly 和Java

  • WebAssembly 对 Java 的支持很好,这要归功于 TeaVM 的友好分叉 ,经过修改以支持 WASI 和 WebAssembly 组件模型提案。

WebAssembly 和Zig

  • WebAssembly 对 Zig 的支持非常好。
  • Zig 使用LLVM,因此它提供了wasm32 目标架构。

WebAssembly 和 Ruby

  • 由于 ruby.wasm ,WebAssembly 对 Ruby 的支持很好。
  • ruby.wasm 是CRuby 的WebAssembly 端口的集合。 它支持在 WASI 兼容的 WebAssembly 运行时上运行 Ruby 应用程序。
  • 它使用 wasi-vfs 为 WASI 创建一个虚拟文件系统层。
  • 目前还不支持套接字和线程。

WebAssembly 和 Swift

  • 得益于 SwiftWasm ,WebAssembly 对 Swift 的支持很好。
  • SwiftWasm 将Swift 代码编译为WebAssembly。

WebAssembly 和 AssemblyScript

  • AssemblyScript 是为WebAssembly 设计的,其语法类似于TypeScript。
  • 鉴于 AssemblyScript 团队批评了 WASI 标准化流程,是否支持 WASI 尚不确定。

WebAssembly 和Grain

  • Grain 是一种为WebAssembly 设计的函数式编程语言。

Enarx 项目使用 wasmtime 作为运行时,原则上,如果一个应用程序在 wasmtime 上运行,那么它在 Enarx 上应该同样运行良好。

对给定语言的 WebAssembly/WASI 的良好支持解锁了整个生态系统,并允许大型开发人员社区使用 WebAssembly(和 Enarx)。 虽然服务器端的 WebAssembly 仍处于早期阶段,但我们观察到来自 Go/TinyGo、JavaScript、Java、Python 和 C# 等语言的社区投资于为 WebAssembly/WASI 提供更好的支持。

WASI(WebAssembly 系统接口)开放标准的开发和实施由字节码联盟牵头,字节码联盟是一个非营利组织,由 Mozilla、Fastly、英特尔和红帽于 2019 年成立,其 W3C(万维网联盟)的认可 。 CNCF(云原生计算基金会) 也发挥着重要作用,因为它托管了 WebAssembly 运行时,如 WasmEdge 和 WasmCloud 。

目前有几个 WASI 提案 正在制定中。 WebAssembly 现状调查全面概述了现有的 WASI 提案以及社区最感兴趣的提案,如下图所示。 人们对 I/O、套接字、文件系统和线程很感兴趣:

WebAssembly 语言支持_WebAssembly_05

尤其是 Enarx 项目正在投资推进 Rust 语言对 WASI 的支持,我们已经为上游的套接字、线程和加密做出了贡献。

我们通过实现 sock_accept() 以及使用 Rust mio 和 tokio 框架的 Wasm 服务器为上游做出了贡献。 Enarx 项目的联合创始人纳撒尼尔·麦卡勒姆 (Nathaniel McCallum) 在 2022 年欧洲 Wasm 日上发表了关于这项贡献的演讲。

我们还在 wasmtime 中实现了 WASI 线程,它提供了一种生成线程的机制,目前我们正在用 Rust 开发一些示例。 这些更改应该合并并出现在即将发布的 wasmtime 版本中,但是对于严格的线程/共享内存支持,必须对内部结构做很多工作,以确保它是线程安全的。

至于加密,我们已经为 wasi-crypto 箱做出了贡献,我们正在推动它以 WIT 作为规范格式。 我们还在 Rust 中创建了一个签名服务器,它使用 wasi-crypto 对任意二进制 blob 进行签名。

我们还在不断创建示例和演示并将它们发布到 Codex 。 这些示例和演示通过 Try Enarx 提供,用户可以通过点击按钮直接从浏览器直接在 TEE(可信执行环境)中轻松启动这些 WebAssembly 应用程序。


标签:WebAssembly,JavaScript,语言,Enarx,wasmtime,支持,WASI
From: https://blog.51cto.com/u_1213352/5996667

相关文章

  • 2023 年 WebAssembly 前景预测
    关于WebAssembly(通常简称为Wasm)及其在云计算领域的未来。对于那些只了解Wasm最初形式(浏览器技术)或第二个主要用例(游戏技术)的人来说,这可能会让他们感到惊讶。这两种用......
  • 初学者难点:如何在C语言中打印小数???
       首先对于我自己而言,刚刚学习C语言的时候一直弄不清楚如何打印小数,尤其是打印两位或者三位小数,当时只会打印整数,也就导致后来一直被蒙在鼓里。下面是我在弄清楚如何......
  • enum C语言
    1.定义一种新的数据类型-枚举型以下代码定义了这种新的数据类型-枚举型enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN};(1)枚举型是一个集合,集合中的元......
  • C语言:身份证号校验位计算
    #include<stdio.h>/*身份证号码是由18位数字组成的,他们分别表示:1、前1、2位数字表示:所在省份的代码。2、前3、4位数字表示:所在城市的代码。3、前5、6位......
  • Airtest自定义启动器支持批量运行脚本,并兼容在AirtestIDE中使用
    小站注:上期详细讲了Airtest启动器的原理,以及在最后给出了2个实现方案。本次是第2个方案的另一个实现案例,供大家学习参考。Pythonv3.7.0/Airtest:1.1.1/PocoUI:......
  • Go语言学习day2
    1.go的结构体没有构造函数,但是可以自己实现一个。由于值拷贝的开销比较大,所以返回的是结构体指针类型packagemainimport"fmt"typepersonstruct{ name,citystr......
  • 痞子衡嵌入式:MCUBootUtility v4.0发布,开始支持MCX啦
    --痞子衡维护的NXP-MCUBootUtility工具距离上一个大版本(v3.5.0)发布过去9个月了,这一次痞子衡为大家带来了版本升级v4.0.0,这个版本主要有两个重要更新需要跟大家......
  • 适合编程初学者的开源项目:小游戏2048(Go语言版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。2048游戏规则一共16个单元格,初始时由2或者4构成。1、手指向一个方向滑动,所有格子会向那个方向运动。2......
  • R语言中axis 中调整标签与轴线的距离
     使用padj参数调整垂直距离;使用hadj参数调整水平距离;  001、padj参数par(mfrow=c(2,1))plot(1:10,cex=2,pch=17,xaxt="n",xlab="",main="0.5")......
  • C语言:初识指针
    1.内存认识指针,首先要认识内存内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的,所以为了有效的使用内存,就把内存分成一个个小的内存单元,每个内存单元的大......