Web Assembly (wasm) 会有自己的语法吗?

Will web assembly (wasm) have its own syntax?

听说W3在搞网页字节码, 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

在 nasm 中 windows

还是仅由 C/C++ 和其他语言编译而成?

WebAsse的文字表示mbly (WASM) 看起来类似于 asm.js。官方GitHUBFAQ涵盖你的问题:

In fact, by dropping all the coercions required by asm.js validation, the WebAssembly text format should be much more natural to read and write than asm.js. Outside the browser, command-line and online tools that convert between text and binary will also be made readily available.

[...]

As WebAssembly evolves it will support more languages than C/C++, and we hope that other compilers will support it as well, even for the C/C++ language, for example GCC.

WebAssembly 的当前工作原型 already has a syntax which is also emitted by the LLVM backend (the CHECK: parts of these tests), used by the WAVM backend. Also see ilwasm and WABT

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

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


原回答:

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

还有其他原型语法吗?是的! The wassembler which works closely with the V8 prototype 具有完全不同的语法。

为什么要使用不同于 s 表达式的其他语法?大多数开发人员更熟悉类似 C 的语法!它与二进制格式所包含的内容并不接近,但它仍然非常接近并且更易于使用。

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