WebAssembly Summit 回顾与WebAssembly的发展历程
在2020年2月10日于硅谷举行的WebAssembly Summit上,WebAssembly社区组主席Ben Smith回顾了WebAssembly的起源,并讨论了其范围和能力的扩展与精炼。
WebAssembly的起源
Smith首先回顾了WebAssembly的发展历程,指出五年前(2015年),WebAssembly甚至还不存在。2013年,Google的NaCL技术已经允许将C/C++程序编译并在Chrome浏览器中以沙盒方式运行。Alon Zakai于2010年创立了emscripten,并与他人共同创建了WebAssembly和asm.js,证明了C和C++程序可以通过emscripten和asm.js移植到任何Web浏览器中。
WebAssembly的初步目标
2015年4月,几位开发者提出了WebAssembly的可执行二进制和文本格式。当时,WebAssembly的高层次目标包括:
- 定义一个便携、大小和加载时间高效的二进制格式,作为Web编译目标。
- 定义一个可编辑的文本格式,与二进制格式同构并可相互转换。
- 设计v.1版本,允许通过客户端编译到asm.js实现高效的加载时间和性能。
- 设计v.1版本作为最小可行产品,基本与asm.js功能相当。
- 设计以与现有Web平台良好集成。
- 设计以保持Web的无版本、功能测试和向后兼容的演进故事。
- 设计以允许在非浏览器环境中执行。
WebAssembly的扩展与精炼
从这些初始目标出发,WebAssembly不断扩展和精炼其范围和规范。Smith将这些演变比喻为一个“PIE”(APIE框架),分别代表:
- Abilities(Wasm能做什么?)
- Producer(谁可以制作Wasm?)
- Interoperability(Wasm能与谁交互?)
- Embedder(什么可以使用Wasm?)
具体发展里程碑
- 2017年11月:WebAssembly增加了垃圾回收(Abilities和Producer类别)和主机绑定(Interoperability类别)。
- 2018年:Wasm C API被添加到Embedder类别。
- 2019年8月:类型化函数引用加入Abilities类别,而类型导入、WebAssembly系统接口(WASI)和接口类型加入Interoperability类别。
这些新提案基于之前的工作,如垃圾回收和主机绑定,以及将高级语言编译到WebAssembly的经验。主机绑定提案已被接口类型提案所取代。如今,WASI和接口类型已经有了自己的小组或子小组。其他倡议,如SOIL(单一开放中间语言),也因WebAssembly的发展而兴起。
总结
WebAssembly Summit是一个为期一天的单轨会议,专注于WebAssembly的所有相关内容。Smith的完整演讲《WebAssembly: Expanding the PIE》可以在Summit的网站上观看,其中包含了更多的技术细节、历史视角和插图。
通过这次演讲,Smith展示了WebAssembly从无到有,逐步扩展其能力和应用范围的过程,强调了其在Web平台和非浏览器环境中的潜力和重要性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。