在 WebAssembly 中同时使用 32 位和 64 位数字的理由是什么?

Tam*_*lyn 5 32bit-64bit webassembly

WebAssembly 只有四种值类型:

\n\n
    \n
  • i32\xe2\x80\x93 32 位整数
  • \n
  • f32\xe2\x80\x93 32 位浮点数
  • \n
  • i64\xe2\x80\x93 64 位整数
  • \n
  • f64\xe2\x80\x93 64 位浮点数
  • \n
\n\n

每个都有自己的一组表示算术运算的操作码,例如i32.add、和。还有一些操作码用于将较窄的整数包装为较宽的类型,例如,i64.addf32.addf64.addint32.store_8int64.load32_u。WebAssembly v1 定义了约 170 个操作码,其中约 70 个专门用于 32 位数字,约 75 个用于 64 位数字。

\n\n

在我看来,放弃对 32 位数字的支持几乎可以将操作码的数量减半,而不会损失任何功能。这让我想知道:两者兼有有什么好处?

\n\n

GitHub 上有一些关于此问题的 讨论,但它们对我来说有点太技术性了。

\n

Col*_*inE 5

它们存在的原因与许多编程语言支持不同精度的数字的原因大致相同 - 较低精度的数字需要较少的存储空间,并且应用于这些数字的操作可能比较高精度的数字更快。

\n\n

此外,按照建议减少 WebAssembly 中的操作码数量不会产生任何切实的好处。他们总是使用单个字节来存储。

\n