用于浏览器内执行的工具通常质量参差不齐。WebAssembly 旨在通过公开low-level capabilities而不是规定应该构建哪些工具来支持真正强大的工具。这使得:
- 将现有的和熟悉的工具移植到 WebAssembly;
- 构建特别适合 WebAssembly 的新工具。
WebAssembly 开发应该是自我托管的,不仅仅是一个可爱的黑客,而是一个令人愉快的平台,开发人员积极寻找他们想要和需要只是工作的工具。开发人员有很高的期望,满足这些对工具的期望意味着 WebAssembly 具有为非开发人员构建丰富应用程序所需的功能。
我们希望支持的工具包括:
- 编辑:
- 像 Vim 和 Emacs 这样的编辑器应该只是工作。
- 编译器和语言虚拟机:
- 针对 WebAssembly(C/C++,Rust,Go,C#)的语言编译器应该能够在 WebAssembly 本身中运行,发出一个 WebAssembly 模块,然后可以执行。
- Bash、Python、Ruby 等语言的虚拟机应该可以工作。
- 使用即时编译器(JavaScript VMS、LuaJit、PyPy)的虚拟机应该能够支持 WebAssembly 的新即时后端。
- 调试器:
- 基本的浏览器集成可以通过源映射支持来完成。
- 像 C++ 这样的语言的完全集成需要在调试信息格式以及中断程序、检查其状态、修改其状态的权限方面进行更多的标准化工作。
- 调试信息最好按需交付,而不是内置到 WebAssembly 模块中。
- 针对非内存安全语言的杀毒软件:Asan,Tsan,Msan,Ubsan.消毒剂的有效支持可能需要改进:
- 诱捕支架;
- 阴影堆栈技术(通常通过
mmap
SMAP_FIXED
实现)。
- 针对开发人员自己的代码的选择加入security增强:针对 WebAssembly 的开发人员可能希望他们自己的代码比 WebAssembly 实现所需的代码进一步沙箱化,以保护用户。
- 探查器:
- 基于样本;
- 基于仪器。
- 进程转储:局部变量,调用栈,堆,全局变量,线程列表。
- JavaScript+WebAssembly 大小优化工具:庞大的 WebAssembly+JavaScript 混合应用程序,WebAssembly 调用与 Web 平台的其余部分通信的 JavaScript 库,需要工具来跨 API 边界执行死代码剥离和全局优化。
在许多情况下,该工具将是纯粹的 WebAssembly,没有来自 WebAssembly 的任何特定于工具的支持。这对于调试来说是不可能的,但对于消毒剂来说应该是完全可能的。