在 WebAssembly 中同时拥有 32 位和 64 位数字的基本原理是什么?

In WebAssembly what is the rationale for having both 32- and 64-bit numbers?

WebAssembly 只有四种值类型:

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

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

GitHub 上有 some discussions,但它们对我来说有点太技术化了。

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

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

WebAssembly 的目标之一是在广泛使用的现代处理器(包括嵌入式系统)上高效地 运行,这些处理器都支持 32 位操作。