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 的重要部分是二进制格式:它是所有工具将交换的内容,也是浏览器将使用的内容。那为什么还要使用文本格式呢?我们是工程师,我们更容易消费文本。我们可以稍后再尝试,文本格式的主要目标是为了人类的理解,我们需要更多的人来弄清楚我们创建的文本是否可以理解。
听说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 的重要部分是二进制格式:它是所有工具将交换的内容,也是浏览器将使用的内容。那为什么还要使用文本格式呢?我们是工程师,我们更容易消费文本。我们可以稍后再尝试,文本格式的主要目标是为了人类的理解,我们需要更多的人来弄清楚我们创建的文本是否可以理解。