web assembly(wasm)会有自己的语法吗?

时间:2015-09-19 09:04:46

标签: c++ assembly webassembly

我听说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 for windows中

或者它只能从C / C ++和其他语言编译而创建吗?

2 个答案:

答案 0 :(得分:13)

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 wassembler密切配合的V8 prototype语法完全不同。

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

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

答案 1 :(得分:0)

W eb A s s e m bly(WASM)的文字表示将类似于asm.js.官方GitHUB FAQ涵盖了您的问题:

  

事实上,通过删除asm.js验证所需的所有强制, WebAssembly文本格式应该比asm.js 更自然地读写。在浏览器之外,还可以随时使用在文本和二进制文件之间进行转换的命令行和在线工具。

     

[...]

     

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