最流行的 WebAssembly 语言,会是 JavaScript 吗?

对于网络平台而言,WebAssembly 的出现无疑是意义重大的,它能让各种语言编写的代码以接近原生的速度在 Web 中运行——那么在各种语言中,JAVA 会是其中最流行的吗?
原文链接:https://thenewstack.io/will-java-become-the-most-popular-webassembly-language/
作者 | Mary Branscombe
译者 | 弯月 责编 | 郑丽媛
出品 | CSDN(ID:CSDNnews)
WebAssembly 是从浏览器中发展而来的,因此很多人认为 Java 很适合 WebAssembly 。然而,最初 WebAssembly 的目标是编译其他语言,以便开发人员可以在浏览器中通过 Java 与这些语言交互(生成在浏览器中运行的 Wasm 编译器会创建 Wasm 模块,以及允许 Wasm 模块访问浏览器 API 的 Java 填充程序) 。
如今,有几款在服务器端运行的 WebAssembly 非浏览器运行时(包括 Docker 的 Wasm 支持),在这类运行时中,Wasm 模块实际上是在 Java 运行时(如 V8)中运行的,因此即使 WebAssembly 运行时日渐普及,与 Java 保持一致仍然很重要 。
Wasm 是支持多种语言的,永远都是,例如最近 Wasm 的发展重点是支持 Rust、Python/ target=_blank class=infotextkey>Python、Ruby 和 .NET 等许多语言 。但 Java 也是世界上最流行的编程语言之一,很多重要提升都是为了使用 J ava 作为编写可编译为 WebAssembly 模块的语言,还有很多人在尝试将提高 Java 性能的经验应用到 Wasm 。

最流行的 WebAssembly 语言,会是 JavaScript 吗?

文章插图
开发者的需求
Fermyon 在发布用于为 Spin 框架构建组件的 SDK 时,首先使用了 .NET,然后使用了 Java 和 Type 。首席执行官 Matt Butcher 进行客户调研,希望找出他们喜欢使用的语言:“你对什么语言感兴趣?你用什么语言编写程序?你喜欢用什么语言写程序?基本上,Java 和 Type 都排在前三名 。”(开发人员选择的第三种语言是 Rust,可能是因为 Wasm 的 Rust 工具普遍比较成熟;另外 .NET、Python 和 Java 也很受欢迎 。)
Butcher 表示,Suborbital 在推出用于构建服务器端扩展的 Java 支持时,也看到了类似反应,Java 很快就成为了构建服务器端扩展时最受欢迎的开发语言 。
目前,在 Fermyon 的客户中,31% 的人希望支持 Java,20% 希望支持 Type 。虽然不清楚支持这两种语言的开发人员是同一伙人,还是各代表一半的开发人员,但很明显 Java 大幅领先 。 对此,我们感到很惊讶——我们原以为 Java 社区会反对 WebAssembly 支持 Java,但结果完全相反 。
Butcher 曾认为,编写 WebAssembly 的语言之间会出现更激烈的竞争,但这些反应改变了他的想法:“这些语言之间不会形成竞争 。WebAssembly 将变成每个了解 Java 的开发人员都可以编写和运行的一个场所 。说到底,人们还是想要 Java 。”
Butcher 的观点符合阿特伍德定律(任何可以用 Java 来写的应用,最终都将用 Java 来写),同时字节码联盟技术指导委员会主任 Bailey Hayes 也提到了 Gary Bernhardt 著名的 Java 的诞生和死亡(他预言了WebAssembly这类运行时的诞生,而且还将Java比作可以在世界末日中幸存下来的蟑螂):
“Rust 很难学,虽然它很受欢迎,但学习曲线十分陡峭 。如果是刚开始学的新手,我希望他们从已掌握的知识入手 让开发人员使用他们熟悉的工具探索 WebAssembly 这样的新领域,可以提高他们的效率,并打造更好的软件生态系统”,“很明显,我们都看好 Java,因为它是世界上最受欢迎的语言,我们希望让尽可能多的人使用 WebAssembly!”
开发人员想用 Java 做什么
Butcher 将 WebAssembly 的使用分为四大类:浏览器应用程序、云应用程序、物联网应用程序和插件应用程序——而 Java 涉及以上所有领域 。
“我们看到开发人员用 Java 和 WebAssembly 为大量面向 Java 的前端编写后端,为前端的 React 应用提供数据,然后使用 Java 后端来实现数据存储或处理 。”
Hayes 指出,服务器端 Wasm 有明显的优势:“使用服务器端 Java 的人可直接上手编写服务器端 Wasm,从而通过更少的代码构建更快的程序,他们可以享受各种好处,且不会遇到任何阻力 。”
Butcher 认为还有一些在 WebAssembly 中使用 Java 的建议非常有创意,“关于为什么希望 WebAssembly 支持 Java,有人阐述了一个非常有趣的原因:你可以创建一个更安全的 Java 沙盒,然后在 WebAssembly 内部执行任意不受信任的代码,并使用浏览器版本的 Java 接口来防止不受信任的 Java 干扰其他受信任的代码 。”
能够在 Wasm 沙盒中隔离不受信任的代码片段是嵌入式 WebAssembly 的常见用例,SingleStore、Scylla、Postgres、TiDB 和 CockroachDB 一直在尝试使用 Wasm 存储过程 。


推荐阅读