【问题标题】:Will web assembly (wasm) have its own syntax?Web 程序集 (wasm) 会有自己的语法吗?
【发布时间】:2015-12-16 10:45:27
【问题描述】:

听说 W3 正在研究 web 的字节码, web assembly (wasm) 会有自己的语法,比如 nasm 和 masm 吗? 例如输入类似的东西,

 global _main
extern _MessageBoxA@16
extern _ExitProcess@4

section code use32 class=code
_main:
    push    dword 0      ; UINT uType = MB_OK
    push    dword title  ; LPCSTR lpCaption
    push    dword banner ; LPCSTR lpText
    push    dword 0      ; HWND hWnd = NULL
    call    _MessageBoxA@16

    push    dword 0      ; UINT uExitCode
    call    _ExitProcess@4

section data use32 class=data
    banner: db 'Hello, world!', 0
    title:  db 'Hello', 0

在 Windows 的 nasm 中

还是只能通过 C/C++ 和其他语言编译创建?

【问题讨论】:

  • 这不是真正的汇编,它是一个序列化的 AST。不会看起来像那样。

标签: c++ assembly webassembly


【解决方案1】:

WebAssembly 的当前工作原型already has a syntax 也由the LLVM backend 发出(这些测试的CHECK: 部分),由the WAVM backend 使用。另见ilwasmWABT

这是官方的最终文本语法吗?不,但它可能会在稍后正式发布(2017 年 3 月更新:这可能是 happen soon)。

当前的 WebAssembly 二进制格式是 stack machine,与 WebAssembly 采用的原始 AST 方法相比,这是一个重大变化。 s 表达式本身并不是更适合表示堆栈机器,但它们足够好、简单,并且可以避免无休止的自行车棚。


原答案:

它具有 WebAssembly 的重要属性,即被表示为 s 表达式,它固有地具有 表达式树,这是 the AST's design 的关键部分。它还具有结构化控制流(AST),而不是大多数编译器 IR 所具有的(CFG)。

还有其他的原型语法吗?是的! The wassemblerV8 prototype 紧密合作,语法完全不同。

为什么是 s-expression 之外的另一种语法?大多数开发人员更熟悉类 C 语法!它不像二进制格式所包含的那样接近,但它仍然非常接近并且使用起来更好。

为什么这么复杂?阅读text format 描述有助于理解。工作仍在进行中,最终 WebAssembly 的重要部分是二进制格式:它是所有工具将交换的内容,也是浏览器将使用的内容。那为什么还要使用文本格式呢?我们是工程师,我们更容易使用文本。稍后我们可以尝试一下,文本格式的主要目标是人类理解,我们需要更多的人来确定我们创建的文本是否可以理解。

【讨论】:

    【解决方案2】:

    WebAssembly (WASM) 的文本表示形式类似于asm.js。官方 GitHub FAQ 涵盖了您的问题:

    事实上,通过放弃 asm.js 验证所需的所有强制,WebAssembly 文本格式应该比 asm.js 更自然地读写。在浏览器之外,在文本和二进制之间转换的命令行和在线工具也将一应俱全。

    [...]

    随着 WebAssembly 的发展,它将支持比 C/C++ 更多的语言,和 我们希望其他编译器也能支持它,即使是 C/C++ 语言,例如 GCC。

    【讨论】:

    • 我们还没有真正讨论过类似于 asm.js 的语法。可能是这样,但文本语法的目标是人类消费,而 asm.js 将静态类型添加到 JavaScript 的可爱技巧并不是特别人性化!具有显式类型的可读语法要好得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 2014-10-15
    相关资源
    最近更新 更多