首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebAssembly如何跨平台,而装配不是?

WebAssembly如何跨平台,而装配不是?
EN

Stack Overflow用户
提问于 2022-09-20 17:59:00
回答 2查看 170关注 0票数 2

我的理解

除了运行cross-platform

  • it的
  • 运行独立的
  • 之外,
    • WebAssembly类似于程序集,它在browsers

上运行。

但是WASM是如何快速和跨平台的呢? WASMs

  • 是否为多个CPU供应商打包了多个预编译的二进制可执行文件,比如苹果的通用二进制程序?

  • ,但是一旦宣布了一种新型的CPU,他们就不能运行现有的

  • 了。

  • WebAssembly's运行时环境(RE)是低级的虚拟堆栈机器(类似于JVM或Flash ),
  • 似乎更接近于中间的Java,而不是真正的低级程序集。但是,为什么会更快呢? format

  • JS解释器可以跳过它可以在一个更紧凑的文件中装载的解析

现在我的问题。

问题

WASM只是从现有的C/C++/Rust代码中创建中间字节码,就像Java一样,不编译成裸金属? Assembly?

  • Does

  • 之间的关系是什么呢? WebAssembly与WebAssembly之间的关系借用了组装的任何思想、技术或哲学?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-20 19:14:43

作为一种近似,您可以将WebAssembly看作是用自己的指令定义自己的CPU。它有自己的二进制编码,因此"0x6A“意味着”从堆栈顶部弹出两个I32,并将它们添加,将结果推到堆栈的顶部“。您可以阅读完整的规范:https://webassembly.github.io/spec/core/bikeshed/

“为什么它更快”是一个复杂的问题,简而言之,它是由对当代编译器技术和CPU设计有深刻理解的人“设计得很好”。当浏览器接收到WebAssembly时,它可以一次解释一条指令,但是WAsm的设计使得您可以快速地将其编译成本机代码,并获得相当快的本地CPU代码。

是否仅从现有的C/C++/Rust代码中创建中间字节码,就像Java那样,而不是编译成裸金属?

它不包含任何特定的实际CPU的预编译二进制文件。

WebAssembly和程序集之间的关系是什么?

CPU只知道如何用自己的汇编语言“指令集体系结构”运行指令。因此,所有其他软件必须首先转换为此(或通过解释器运行,解释器本身是首先转换为CPU指令的程序)。WebAssembly的设计是为了使在x86、ARM和RISC等实际机器上向本机组装的转换变得简单。

关系是WAsm必须转换为CPU程序集,或者在解释器中运行。而且,WebAssembly就像一个真正的CPU,编译器已经可以为不同的CPU发出代码,可以扩展到为WAsm发出代码。这就是为什么我们可以将C和Rust编译成WebAssembly。可以合理地预期,任何可以为实际CPU编译的新编程语言也可以为WAsm编译。

是否从组装中借用了任何想法、技术或哲学?

好的。程序集是一种命令式编程语言(指令一个接一个地运行),WAsm也是如此。许多实际的CPU定义了堆栈的概念,您可以推送/pop,WAsm使用堆栈。大多数CPU都有“添加两个32位整数”这样的指令,WAsm也是如此。大多数CPU都有“分支”指令,"WAsm“也是如此。大多数CPU都有在给定字节地址上读写内存的指令,WAsm也是如此。

票数 5
EN

Stack Overflow用户

发布于 2022-09-20 19:24:15

WASM是一种特定用途的装配。

这也是一种不受市场法律驱动的集体努力。

如果WASM真的要占上风,浏览器的受欢迎程度将取决于它,那么一定会有一些浏览器会给它添加供应商扩展,就像JS和CSS一样。使WASM不那么跨平台。

这不是技术问题,而是人的问题。我们可以轻松地设计兼容的CPU,但我们更喜欢设计快速CPU,每个人对于如何设计快速CPU都有自己的想法。

WASM由浏览器解释,很可能是JITted。它不需要任何外部库,它不是一个通用的程序集。它是用来在浏览器中运行的。

它更快,因为它已经编译成简单的指令,只需看一下WASM和ECMAScript ( JS )的规范,就可以很容易地看到解析、编译和执行JSw.r.t还有多少工作要做。更简单的低级指令。

这就是为什么它被称为WASM,因为它是一组与JS相比的低级指令。

但是除了低级之外,它与传统的汇编语言没有什么共同之处(只有一些概念,比如SIMD)。与实际汇编语言相比,WASM的级别太高了。

您可以通过查看任何程序集和WASM规范来说服自己。在传统的汇编语言中,您将找不到结构化的指令或模块的概念或无法到达的代码。

它显然是用一台特定的抽象机器设计的,在硬件上实现起来成本很高。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73790881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档