为什么浏览器需要webassembly才能运行从非javascript语言编译的程序?具体来说,为什么不能使用 x86 程序集?
我用谷歌搜索了一下,但找不到任何关于这个的好信息。
也许它与JavaScript的互操作性有关,包括HTML5和浏览器API?WASM调用和被JavaScript调用的能力是否使其在浏览器中有用?
TL;DR:
WebAssembly是快速,安全,可移植的,并且是开放Web平台的一部分。
利用强类型语言的优势,如Go,Rust,...(编译器可以在编译时检测到许多错误(
用于编译高级语言的可移植目标 可在包括移动和
物联网在内的各种平台上使用(不仅仅是 x86(高效
且快速(接近本机性能,预编译:相对于 JavaScript(
大小高效和加载时间高效的二进制格式
内存安全
沙盒执行环境
非 Web 嵌入
可从 JavaScript 访问,与现有 Web 平台很好地集成
与 Web 生态系统集成
利用网络应用程序接口
支持 Web 的安全模型
保持 Web 的可移植性
为进化开发提供设计空间
高效快捷
Wasm堆栈计算机设计为以大小和加载时间高效的二进制格式进行编码。WebAssembly旨在通过利用各种平台上可用的通用硬件功能,以本机速度执行。
安全
WebAssembly 描述了一个内存安全的沙盒执行环境,甚至可以在现有的 JavaScript 虚拟机中实现。当嵌入到 Web 中时,WebAssembly 将强制执行浏览器的同源和权限安全策略。
开放且可调试
WebAssembly被设计为以文本格式精美打印,用于调试,测试,实验,优化,学习,教学和手动编写程序。在网络上查看 Wasm 模块的源代码时将使用文本格式。
开放网络平台的一部分
WebAssembly 旨在维护 Web 的无版本、功能测试和向后兼容的性质。WebAssembly 模块将能够调用进出 JavaScript 上下文,并通过可从 JavaScript 访问的相同 Web API 访问浏览器功能。WebAssembly 还支持非 Web 嵌入。
参考文献:
设计原理
WebAssembly 高级目标
https://webassembly.org/
WASI: WebAssembly 系统接口
在 MVP 之后添加的功能