6

W3 が Web のバイト コードに取り組んでいると聞きましたが、Web アセンブリ(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++ やその他の言語からコンパイルされてのみ作成されますか?

4

2 に答える 2

14

WebAssembly の現在の作業プロトタイプには、LLVM バックエンド(これらのテストの一部) によって発行される構文が既にあり、WAVM バックエンドによって使用されます。ilwasmWABTも参照してください。CHECK:

これは公式の最終的なテキスト構文ですか? いいえ。ただし、後で正式になる可能性があります ( 2017 年 3 月の更新:これは間もなく発生する可能性があります)。

現在の WebAssembly バイナリ形式は、WebAssembly が採用した元の AST アプローチからの大幅な変更であるスタック マシンです。s 式は本質的にスタック マシンを表すのに適しているわけではありませんが、十分に機能し、シンプルであり、際限のない自転車置き場を回避します。


元の答え:

WebAssembly では、本質的に式ツリーを持つ s 式として表されるという重要な特性があり、これはAST の設計の重要な部分です。また、ほとんどのコンパイラ IR にあるもの (CFG) ではなく、構造化された制御フロー (AST) もあります。

他のプロトタイプ構文はありますか? はい!V8 プロトタイプと密接に連携するwassemblyrは、まったく異なる構文を持っています。

なぜ s 式以外の構文なのですか? C に似た構文は、ほとんどの開発者にとってより馴染み深いものです。バイナリ形式に含まれる内容に近いわけではありませんが、それでも非常に近く、使いやすいです。

なぜこれはとても複雑なのですか?テキスト形式の説明を読んで理解すると便利です。作業はまだ進行中です。最終的に、WebAssembly の重要な部分はバイナリ形式です。これは、すべてのツールが交換するものであり、ブラウザが使用するものです。では、なぜテキスト形式で作業するのでしょうか? 私たちはエンジニアであり、テキストを消費する方が簡単です。テキスト形式の主な目的は人間が理解できるようにすることであり、作成したテキストが理解できるかどうかを判断するには、さらに多くの人間が必要です。

于 2015-09-19T15:59:12.450 に答える