HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

关注

评论

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

架构实战营 模块四 作业

脉醉

#架构实战营

千万级学生管理系统的考试试卷存储方案

feitian

架构实战营 - 模块 4- 设计千万级学生管理系统的考试试卷存储方案

蔸蔸

百万量级的架构设计

俞嘉彬

架构实战营

设计千万级学生管理系统的考试试卷存储方案

君子意如何

「架构师训练营第 1 期」

7月日更总结

耳东@Erdong

个人成长 个人总结 8月日更

架构实战营 模块四作业

三叔叔_拖延症晚期

前端通讯协议:WebSocket和长轮询

devpoint

ajax websocket 8月日更

模块4作业G20210698020270

哆啦A萌

架构实战营 毕业设计

TH

架构实战营

架构实战总结

华仔架构训练营

架构训练营第 1 期 模块四作业

高远

模块四作业

河马先生

架构实战营

模块四作业

绝影

架构训练营

架构实战营 毕业总结

TH

架构实战营

架构实战营-毕业设计

大可

《Financial Management 101》读书笔记

箭上有毒

8月日更

使用 make 还是 new

Rayjun

Go 语言

惊!Go里面居然有这样精妙的小函数!

Gopher指北

Go 语言

前端之数据结构(五)二叉树

Augus

数据结构 8月日更

架构训练营毕业设计—电商秒杀系统

Neil43

架构训练营

【设计模式】装饰器模式

Andy阿辉

C# 后端 设计模式 8月日更

【架构训练营】模块四作业

zclau

毕设:设计电商秒杀系统

ifc177

最后的作业-秒杀设计

大肚皮狒狒

【架构实战营】模块四作业

Abner S.

架构实战营 #架构实战营

架构实战营作业 M04

Shawn Liu

电商秒杀系统

唐江

架构实战营

Linux之route命令

入门小站

Linux

二维码批量生成下载工具

入门小站

工具

毕业设计

CR

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