@
gzf6 我也没太明白你的问题的核心在哪,还是回归标题,Rust 跨平台是因为它可以将代码交叉编译成支持不同平台的代码,对应的就是 rustc 时的 target 参数,这里有 target 的列表和解释,
https://doc.rust-lang.org/nightly/rustc/platform-support.html 看 target 的名称就可以知道,比如 Mac 上的 target 是 x86_64-apple-darwin,最重要的是两部分,首先是对应的是芯片 CPU 的架构(也就对应了二进制机器码指令集),这里是使用的 Intel 的 x86 架构,如果是 ARM 版本的 Mac,对应的 target 就是 aarch64-apple-darwin,使用 ARM64 位架构的指令集;另外就是操作系统名,这里是 darwin,对应也就是 macOs,有了这两部分,就能确定你的程序最终编译的二进制机器码该是怎样的。而 Wasm 跨平台是因为它提供了一套虚拟指令集,说是虚拟指令集是因为它并非像 Intel 的 x86 架构和 ARM 的 arm64 位架构那样,是提供用来制造真正的芯片的,Wasm 的真正执行还是通过对应的宿主环境实现的,然后比如在 mac 里最终的代码执行还是以 x86 或者 arm64 的机器指令来执行的。所以 Wasm 的跨平台是因为它处在比它的宿主环境浏览器或操作系统等更高的层面上,不管是什么平台架构,Wasm 代码都是用它自己的一套指令集编码出来的同一套代码,真正不同的是执行它的宿主环境能将 Wasm 的二进制机器码转译成对应平台架构里的真正机器码指令来执行,可以大致的理解为宿主环境运行了一个虚拟机,可以用来解释运行 wasm 代码,类比到 @
hronro 说的那样,这个虚拟机就是 JVM,而 wasm 二进制代码就是 java 字节码~