写点什么

WebAssembly:面向 Web 的通用二进制和文本格式

  • 2015-06-24
  • 本文字数:1305 字

    阅读完需:约 4 分钟

Mozilla、谷歌、微软和苹果已经决定开发一种面向 Web 的二进制格式。该格式名为 WebAssembly,可以作为任何编程语言的编译目标,使应用程序可以运行在浏览器或其它代理中。

几年前,我们在 InfoQ 上讨论过面向 Web 的通用字节码的优点(见《讨论:我们是否需要一种通用的Web 字节码?》),概括了创建这样一种格式的困难。其中提及的一个主要问题是主要的浏览器制造商无法达成一致:Mozilla 在推asm.js,谷歌支持PNaCI,苹果在开发 FLTJIT ,而微软没有对其中的任何一种表示出兴趣。但现在,情况已经发生了变化。所有四个主要的浏览器供应商一致同意创建一种面向 Web 的二进制格式 WebAssembly 或 WASM/wasm。有人将其称为字节码,但wasm 不是传统意义上的字节码, Brendan Eich 指出:“WebAssembly 实际上是一个经过压缩的 AST 编码,而不是一堆字节码。小声点,不要告诉任何人。如果愿意,你还是可以称它为字节码。”

迄今为止,这个项目一直是秘密进行的,但现在,它已经在 GitHub 上和 W3C 社区组里公开。WebAssembly 的初衷是,让使用 JavaScript 之外的语言编写的程序可以运行在服务器、移动或 IoT 设备上的浏览器和其它 JS 代理中。这种格式最终将取代 asm.js 和 PNaCI。根据项目设计文档(尚未最终确定),WASM 使用二进制是因为它“可以提供更高的效率:它减少了下载文件大小,并加快了解码速度,因此,即使很大的代码库也可以快速启动。”WASM 有一个相对应的文本格式,可以供调试器或其它面向开发者的工具使用。这些工具应该能够从一种格式转换成另外一种格式,而且不会丢失信息。

WebAssembly 实现工作已经迈出了一个临时的第一步:将该格式转换成相应的 asm.js 代码,那样,它就可以运行在支持 asm.js 的浏览器上:Firefox、Edge、Chrome。已经有一个以此为目的构建的 polyfill 原型,初步结果显示,压缩后的二进制格式比 asm.js 压缩后要小 20-30%,wasm 解码速度比解析相应的 asm.js 源代码要快大约 23 倍。WASM 稍后将获得浏览器 VM 的原生支持。

WebAssembly 将首先把 C/C++ 程序带给 Web,但稍后会通过增强实现对其它任何语言的支持。一个 LLVM 后端和 clang 移植已经在计划上。WASM 将运行在“和 JavaScript 相同的语义空间”,支持从 / 到 JavaScript 的异步调用,访问所有的浏览器 API,并且遵循 JavaScript 程序所遵循的安全策略。客户端应用程序可以完全用 WASM 编写,也可以用 WASM 实现业务逻辑,而用 HTML/CSS/JavaScript 实现 UI。

紧跟着 JavaScript 的第二十个生日宣布,并且是在 Ecma 宣布 ES6 规范获最终批准的当天,WebAssembly 对 JavaScript 而言可不是一个好消息。WASM 将使得使用任何能够编译成 WASM 的语言编写 Web 代码成为可能,
JavaScript 将直接与其它语言竞争。我们是否可以期待 Java 或 C#编译成 WASM 呢?

WebAssembly 将从开发 asm.js 和 PNaCI 的经验教训中获益,因为创建它的团队中包含了来自 Mozilla 和谷歌的团队。而微软和苹果的支持使它成为了一个非常有前途的项目。剩下的唯一问题是时间:通常,由多个大型公司共同开发的项目需要花费大量的时间。在这种情况下,标准化过程非常缓慢。

查看英文原文: WebAssembly: A Universal Binary and Text Format for the Web

2015-06-24 04:4915938
用户头像

发布了 1008 篇内容, 共 397.5 次阅读, 收获喜欢 345 次。

关注

评论

发布
暂无评论
发现更多内容

WiFi 7: Redefining the Game of Industrial Connectivity

wallyslilly

WiFi7 ipq9574

用二维码展示信息,有哪些常见应用场景

草料二维码

10分钟写一个tidb-ai机器人帮你解答tidb问题

TiDB 社区干货传送门

新版本/特性解读

TiDB 集群组件间开启 TLS(双向认证

TiDB 社区干货传送门

7.x 实践

知乎 PB 级数据:超大规模TiDB集群管控实践

TiDB 社区干货传送门

实践案例 集群管理 数据库架构设计 HTAP 场景实践

Merge-region 原理及常见问题

TiDB 社区干货传送门

故障排查/诊断

Java如何实现企业微信审批流程

威哥爱编程

Java 微信 企业微信开发

CST如何进行局部网格剖分

思茂信息

cst cst使用教程 电磁仿真

探讨Java深搜算法的学习笔记

威哥爱编程

Java 算法 DFS

TiDB数据库出现性能问题,如何利用数据库性能诊断工具DBdoctor一分钟诊断!

TiDB 社区干货传送门

性能调优 实践案例 管理与运维 安装 & 部署 应用适配

1024程序员节 | 华为与开发者共筑智能应用新生态

Geek_2d6073

盘点国内3家主流的巡逻巡更系统

软件大师兄

Elasticsearch开源仓库404 7万多star一夜清零

吴脑的键客

数据库 搜索引擎

软件测试学习笔记丨Flask框架-集成Swagger文档

测试人

软件测试

Emeritus硅谷AI深度研学之旅圆满落幕,探索AI前沿投资洞察!

科技汇

突破 RAG 局限,KAG 专业领域知识服务框架正式开源!

可信AI进展

TiDB br日志备份PermissionDenied

TiDB 社区干货传送门

实践案例 备份 & 恢复

管理者应该具备的几点认知

老张

团队管理 技术管理 职场晋升

Llama 3.2 Vision & Molmo:多模态开源生态系统基础

Baihai IDP

程序员 AI Baihai IDP Llama 3.2 Vision Molmo

人工智能如何从神话走向科学的?

天津汇柏科技有限公司

人工智能 AI 人工智能

TiDB Vector 本地部署体验

TiDB 社区干货传送门

8.x 实践 TiDB Cloud TiDB Vector

Rust 在 Android 的编程实践——技术驱动的车云一体化解决方案探索

Greptime 格睿科技

android rust 时序数据库 车云

冲一下深信服,好像有点简单?

王中阳Go

Go 面试

智慧停车系统(源码+文档+部署+讲解)

深圳亥时科技

鸿蒙网络编程系列42-仓颉版域名解析示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

ChatGPT Search 上线 允许用户像使用搜索引擎一样完成即时搜索

吴脑的键客

ChatGPT Azure OpenAI

TiKV Raft Store 内存管理的原理与实现丨TiKV 源码解读(二十三)

TiDB 社区干货传送门

有哪些值得尝试的8款TODO清单工具?

爱吃小舅的鱼

TODO todo软件

HyperWorks二维网格划分及拓扑改进

智造软件

Hypermesh 网格划分 有限元

【论文速读】| APILOT:通过避开过时API陷阱,引导大语言模型生成安全代码

云起无垠

观测云:简化复杂的云账单,让企业轻松掌控云成本

观测云

云账单

WebAssembly:面向Web的通用二进制和文本格式_JavaScript_Abel Avram_InfoQ精选文章