私はuint32とi32の違いを理解していません。下記のような定義は、以下:webassemblyデータ型のuint32とi32の違いは何ですか?
また、唯一のインストラクターはオペコードを持つ必要があり、ここで「タイプコンストラクタ」の意味は何ですか?
私はuint32とi32の違いを理解していません。下記のような定義は、以下:webassemblyデータ型のuint32とi32の違いは何ですか?
また、唯一のインストラクターはオペコードを持つ必要があり、ここで「タイプコンストラクタ」の意味は何ですか?
uintN
,varuintN
およびvarintN
はWebAssemblyのbinary formatを除く概念です。純粋にWebAssemblyをコンパクトで機械可読な形式でエンコードしています。
i32
友人はlanguage typesです。 semantics of WebAssemblyには、これらのタイプとその相互作用の仕組みがより詳しく説明されています。基本的に、それらは言語レベルで存在し、WebAssemblyプログラムで使用可能な基本データ型を形成します。
2つのレベルが全く異なります。これは、Cソースコードに使用されるASCIIエンコードとC int
のようなものです。 1つは純粋に言語レベルで、もう1つはその言語を安定した形式(C:ソース.c
ファイル、WebAssembly:バイナリ.wasm
ファイル)で表すときに純粋に使用されます。
"型コンストラクタ"は、バイナリ形式の特定のバイナリ値に対応する型です。各型をエンコードするバイナリ値が必要です。私のCソースの例に戻って、ソース文字の大文字Bは、ASCIIで0x42
とエンコードされます。ここでWebAssembly i32
タイプはバイト0x7f
としてエンコードされています。
wasmバイナリファイルでバイト '0x7f'が見つかった場合、この場所の周りにある種の整数値が必要であることを意味しますか? – YHSPY
ありがとう!私はこれを理解していると思う。 :) – YHSPY
いいえ、あなたが '0x7f'を見つけたら、WebAssemblyフォーマットが可変長エンコーディングなので、多くのことを意味する可能性があります。 '0x7f'はコンテキストに応じて異なることを意味します。これは、x86と同じです。ここで、各バイトは、デコードされる命令に応じて異なるものを意味することができます。 –