主要观点:
- WebAssembly 在网页上的成功有限,如 Photoshop 等有一定成功,而 3D 游戏等实验性项目未持续,目前处于失望低谷期。
- WebAssembly 在 DOM 密集型应用和非 C/Rust 语言方面未成功,原因是编程模型差异大等,但即将支持引用类型和垃圾回收,会开启新周期。
- 网页 WebAssembly 将在编译器创建紧凑代码时获胜,如 JavaScript 世界有 esbuild 管理体积,而对于运行时较厚的语言,最大程度的树摇不是重点。
- 不同语言的 WebAssembly 实现有不同特点和限制,如 Go 和 Pyodide 原生编译较大,而 TinyGo 可较小,工具链需适应目标平台。
- 以 Hoot Scheme 编译器为例,通过多种优化如部分求值、固定 letrec 等实现树摇,但仍面临挑战,如 prelude 中的求值模型、记录类型的 vtable 等,且 Python 的树摇更复杂,是一个流分析问题。
关键信息:
- 多种使用 WebAssembly 的案例及现状,如 Photoshop、Figma、Blazor 等。
- WebAssembly 对不同类型应用的成功与失败情况及原因。
- 树摇的概念及在不同语言中的应用和挑战。
- Hoot Scheme 编译器的树摇优化及面临的问题。
重要细节:
- 提到 Photoshop 等成功案例及 Unreal 5 不支持 WebAssembly 等情况。
- 阐述 WebAssembly 编程模型与 JavaScript 的差异及对 DOM 操作的影响。
- 说明不同语言 WebAssembly 实现的大小差异及原因,如 Go 和 TinyGo。
- 详细介绍 Hoot Scheme 编译器的树摇优化步骤及遇到的具体问题,如 prelude 的求值模型、记录类型的 vtable 等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。