NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:4915715
用户头像

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

关注

评论

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

设计模式之责任链模式

乌龟哥哥

5月月更

Linux环境编译单个C程序文件

Loken

音视频 5月月更

M-DAO开辟区块链全新战场,或成DAO赛道龙头

BlockChain先知

零基础学Java第三节(基本输入输出)

编程攻略

java开发学习

代码之外:写作是倒逼成长的最佳方式

宇宙之一粟

写作 5月月更

druid源码阅读(十)Druid keepAlive参数

爱晒太阳的大白

5月月更

数据库连接池 -Druid 源码学习(九)

wjchenge

Druid 数据库连接池

LSM-Tree - LevelDb Skiplist跳表

懒时小窝

LSM树 leveldb LSM-Tree

一站式Dao打造工具M-DAO:门槛低、效率高

股市老人

linux之sed使用技巧

入门小站

Linux

在线HTML转Excel工具

入门小站

工具

css 学习笔记【三】浮动,不脱离文档流,继承和层叠

恒山其若陋兮

5月月更

拆分电商系统为微服务

小虾米

「架构实战营」

六、云原生可观测性

穿过生命散发芬芳

可观测性 5月月更

[Day45]-[BFS]-滑动谜题

方勇(gopher)

LeetCode BFS 数据结构算法

抖音打击炫富违规视频:自媒体行业的底线在哪

石头IT视角

初始C语言

芒果酱

C语言 5月月更

ES6 之set详解

达摩

js

Docker下Java文件上传服务三部曲之二:服务端开发

程序员欣宸

Java Docker 5月月更

干货| 四种渲染到底是啥?终于有人讲明白了!(下)

Orillusion

开源 WebGL 元宇宙 Metaverse webgpu

Redis「8」实现分布式限流与延时队列

Samson

redis 学习笔记 5月月更

千亿级高并发MongoDB集群在某头部金融系统中的应用及性能优化实践(上)

杨亚洲(专注MongoDB及高性能中间件)

数据库 mongodb 分布式 高性能 分布式数据库mongodb

字节跳动 CloudWeGo 官方微信公众号官宣了!

baiyutang

Go 开源 微服务 5月月更

Druid连接池源码阅读09

石小天

druid源码学习九

Nick

Druid Apache Druid

在线文本代码对比工具

入门小站

工具

Notification发送消息

空城机

WebApi 5月月更

druid 源码阅读 9—— init 中的JMX是干啥的

张大彪

Kubernetes 安全权限管理深度剖析

liuzhen007

k8s 5月月更

JS Iterable object (可迭代对象)

达摩

js

使用 Provider 改造屎山代码,代码量降低了2/3!

岛上码农

flutter ios 安卓开发 跨平台开发 5月月更

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