GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

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

2015 年 6 月 24 日

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 年 6 月 24 日 04:4914966
用户头像

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

关注

评论

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

如何在 20 分钟内给你的 K8s PaaS 上线一个新功能?

阿里巴巴云原生

阿里云 容器 运维 云原生

判空使用isEmpty()方法真的可行吗?

田维常

Java

LeetCode题解:42. 接雨水,暴力法,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

任务发布系统软件开发|任务发布APP开发

开發I852946OIIO

系统开发

引领云原生发展浪潮 阿里云开启云原生大规模落地元年

阿里巴巴云原生

云计算 阿里巴巴 阿里云 最佳实践 云原生

架构师训练营第 1 期 - 第 11 周 - 命题作业

wgl

极客大学架构师训练营

大神带你一睹为快!阿里技术官亲自码了“2000页的Spring全家桶笔记”真牛逼!

比伯

Java 编程 程序员 架构 计算机

波场智能合约系统开发技术方案丨智能合约DAPP系统开发源码

系统开发咨询:I76-883I-5I52 邓森

揭开阿里巴巴复杂任务资源混合调度技术面纱

阿里巴巴云原生

云计算 阿里云 性能优化 云原生 资源调度

现代JavaScript:ES6+ 中的 Imports,Exports,Let,Const 和 Promise

Geek_Willie

Java ES6

Android uni-app实现音视频通话

anyRTC开发者

uni-app android 音视频 WebRTC 跨平台

你不好奇 Linux 网络发包过程吗?

小林coding

Linux 操作系统 网络

如何阅读别人的源码

熊斌

学习 Code Review 源码阅读 七日更

执法监督信息化建设,公安情报指挥一体化合成作战系统开发

t13823115967

智慧公安

Serverless 是一种思想状态

Serverless Devs

Java Serverless 运维 云原生 后端开发

最有技术含量的面试

escray

面经 面试经历 101次面试 七日更 十日谈

MySQL字符集修改实战教程

Simon

MySQL 字符集 七日更

社区一体化综合平台搭建,智慧平安小区建设解决方案

t13823115967

智慧城市 智慧平安社区平台建设

灵魂一问:数据库连接池到底该怎么配?

Gopher指北

golang MySQL

30G 上亿数据的超大文件,如何快速导入生产环境?

楼下小黑哥

Java MySQL 并发编程 线程池

Go中的Channel背后的设计哲学

soolaugust

go Go Concurrency Patterns 七日更 CSP

XRP瑞波币系统软件开发|XRP瑞波币APP开发

开發I852946OIIO

系统开发

打开数“智”化之门,一字之差带来的思考

京东科技开发者

DevOps IoT 新基建 智能

深度探索Hadoop分布式文件系统(HDFS)数据读取流程

读字节

hadoop hdfs 大数据技术 大数据架构 分布式文件系统

从根上理解高性能、高并发:深入计算机底层,理解线程与线程池

程序员小毕

Java cpu 多线程 高并发 线程池

如何破解AI数据困境?京东智联云联邦学习平台有良方

京东科技开发者

人工智能 大数据 学习

智慧旅游安全管理综合指挥平台建设解决方案

WX13823153201

传统数仓如何转型大数据

数据社

大数据 数据仓库 七日更

编写令人愉悦的API接口(二)

陈云轩

Java APi设计 接口规范

都 2021 年了,Serverless 能取代微服务吗?

Serverless Devs

Serverless 微服务 运维 云原生 后端开发

高性能MySQL

田维常

MySQL

Leader修炼指“北”:管理路上的大小Boss

Leader修炼指“北”:管理路上的大小Boss

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