WebAssembly 技术专题简介

简介

WebAssembly编程范型结构化堆栈机器当前版本2.0 (2022年6月1日) 类型系统静态系统平台跨平台许可证Apache许可证文件扩展名.wat (纯文字格式,人类可读).wasm(二进制文件)网站webassembly.org 启发语言Asm.js、PNaClWebAssembly或称wasm是一个低级编程语言。WebAssembly是便携式的抽象语法树,被设计来提供比JavaScript更快速的编译及执行。WebAssembly将让开发者能运用自己熟悉的编程语言(最初以C/C++作为实现目标)编译,再藉虚拟机引擎在浏览器内执行。WebAssembly的开发团队分别来自Mozilla、Google、Microsoft、Apple,代表着四大网络浏览器Firefox、Chrome、Microsoft Edge、Safari。2017年11月,以上四个浏览器都开始实验性的支持WebAssembly。在 2019 年 12 月 5 日,W3C制定《WebAssembly 核心规范 (页面存档备份,存于互联网档案馆)》,WebAssembly 正式被认证为 Web 的标准之一。。

设计

最高指导目标

在官方的一个github页面与帮助文档中,阐述了WebAssembly的设计与实现原则,包含:

定义一个可移植,具有大小与加载高效率的二进制格式,作为编译标的。这个编译标的必须可以被编译至常见的平台,包含移动端与物联网,并且可以善用硬件资源、有原生执行码的执行速度。

规格与实现:

最初的MVP(Minimum Viable Product)与Asm.js有大略相等的功能,并以C/C++语言为优先;

其他额外的特性最初集中在线程,零消耗的异常,和SIMD。这些额外的特性先以反馈和实验为主,包含C/C++以外其他语言的支持。

设计可以执行在现有的网络平台之内以及与之集成:

保持无版本问题、特色测试、向后兼容的网络平台

在与Javascript相同的环境中执行

允许从Javascript中同步调用

强化同源(Same-origin)和安全性权限政策

允许浏览器访问相同功能的Javascript API

定义一个可人工读取,能和二进制格式互换的纯文字格式,以支持查看源代码

设计也可以用于非浏览器的嵌入式系统

制作大平台

为WebAssembly建置新的LLVM后端与伴随的Clang接口

推动其他WebAssembly的编译器与工具

激活更多有用的工具

下一阶段要实现的特色

在2017年推出第一个版本后,同时也列出了下一阶段将实现的特色

制定规格

线程

固定长度的SIMD

异常处理

垃圾回收

存储器区块操作

网页内容安全性政策

ECMAScript 模块集成

尾端调用

Non-trapping浮点数-整数转换

多值函数

Host bindings

官方的宣传

Ending定律

Ending定律也称为终结者定律,它是Ending在2016年Emscripten技术交流会上给出的断言:

.mw-parser-output .templatequote{margin-top:0;overflow:hidden}.mw-parser-output .templatequote .templatequotecite{line-height:1em;text-align:left;padding-left:2em;margin-top:0}.mw-parser-output .templatequote .templatequotecite cite{font-size:small}

所有可以用WebAssembly实现的终将会用WebAssembly实现。

现在这个定律除了 WebAssembly 的支持者用做宣传之外看不到任何实现的迹象。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平