WebAssembly如何在任何机器上运行?

WebAssembly如何在任何机器上运行?,assembly,browser,webassembly,Assembly,Browser,Webassembly,我最近看过几次WebAssembly Wasm演示。我知道Wasm是一个编译目标,像C/C++这样的静态类型语言可以编译到它。然后浏览器可以运行Wasm代码,并以某种方式将其转换为相应机器的机器代码。像这样: 问题: 浏览器如何将Wasm转换为适当的机器代码?浏览器同时具有JavaScript的解释器和JIT编译器。这些操作通常非常复杂,浏览器必须做大量的“工作”来创建优化的JIT代码,以便机器执行 对于webassembly,它实际上没有什么不同。浏览器仍然需要JIT代码。然而,这里的工作要简

我最近看过几次WebAssembly Wasm演示。我知道Wasm是一个编译目标,像C/C++这样的静态类型语言可以编译到它。然后浏览器可以运行Wasm代码,并以某种方式将其转换为相应机器的机器代码。像这样:

问题:
浏览器如何将Wasm转换为适当的机器代码?

浏览器同时具有JavaScript的解释器和JIT编译器。这些操作通常非常复杂,浏览器必须做大量的“工作”来创建优化的JIT代码,以便机器执行

对于webassembly,它实际上没有什么不同。浏览器仍然需要JIT代码。然而,这里的工作要简单得多。选择WebAssembly指令集是为了使此任务相对简单。尽管如此,浏览器仍然有针对WebAssembly模块的“分层”编译


如果您想了解详细信息,最好查看浏览器的源代码

使用JIT编译器。我不太熟悉webassembly的细节,但我认为它类似于LLVM-IR。一个快速的google出现了,它有一些合理的图表和描述LLVM-IR的代码片段。我认为所有这些都同样适用于webassembly。这是一种回答,但它完全是基于假设,所以只发表评论。确切地说,这是一种过于宽泛的回答。考虑到编译器可以将C/C++代码转换为机器代码,这可能有助于解释为什么您要问这个问题。是的,删除了确切的部分,不过需要一个概述。浏览器有一个用于此目的的JIT编译器?希望支持wasm的浏览器需要一个JIT编译器,是的。或者是一个不太有用的解释器,但这可能会破坏性能目标,而不是仅仅使用一个高效的JS JIT引擎,如v8 for plain JS code.webassembly不能在任何机器上运行。仅当支持webassembly的web浏览器可用时。在这方面,WebBaseLead与任何其他解释的编程语言一样,虽然它的形式是二进制的,所以它不是编程语言,更像中间对象文件,它由一些其他编程语言的编译器(如C++或JS)生成,但是从浏览器的角度来看,这完全是不相关的。它只是有一些东西可以用JIT进行解释或编译并执行,所以它会这样做i、 e.提供编译器的重担由浏览器供应商承担。