Design: 初期データとエンディアン

作成日 2016年09月03日  ·  6コメント  ·  ソース: WebAssembly/design

仕様では、 i32.load使用するバイト順序については何も述べていません。 実際のプログラムには、仮想テーブルや静的データなどを提供するデータセクションが含まれています。これらのものには通常、さまざまな値型が必要です。 ただし、WebAssemblyはdataセクションのバイトシーケンスに制限されています。 バイトでは、エンディアンについて何も知らないため、int32をエミュレートできません。

WebAssebmlyに構造に似たものとLLVMに似た構造初期化子があればいいのにと思います。 静的データのエンディアンの問題を解決するだけでなく、データセクションの整数はLEB128表現で消費するバイト数が少なくなる可能性がありますが、データセクションでエンコードすると常に4バイトを消費するため、バイナリデータを減らす機会があります。

現在の回避策は次のとおりです。

  • データセクションを使用せず、代わりに大きな初期化関数を使用してください
  • 独自のフォーマットを考案し、デコーダーをWebAssemblyバイナリに組み込み、 start関数から実行します

最も参考になるコメント

エコシステム全体で複数のエンディアンを処理する必要がないことには大きな利点があり、近い将来、リトルエンディアンアクセスを効率的にサポートしないCPUアーキテクチャが普及する可能性は非常に低いと考えられています。

全てのコメント6件

WebAssemblyはリトルエンディアンです。 AstSemantics.mdはこれについて言及していないようです。 これを修正するために、 https://github.com/WebAssembly/design/pull/787を提出しました。

ここここで言及さここでテストされています

データセクションにLEB128でエンコードされたデータを含めるというアイデアは興味深いものです。 これは、新しい種類のデータ初期化子を使用するか、レイヤー1圧縮を使用して、さまざまな方法で実行できます。 レイヤ2圧縮は、一般に大きなデータセグメントにも役立つ場合があります。

なるほど、ありがとうございます。 あまりにも強い要件ではありませんか? 私が知っているビッグエンディアンを使用するCPUはありませんが、何らかの理由でビッグエンディアンが表示されて広く使用されるようになると、WebAssemblyはこのCPU上でオーバーヘッドを使用して実行されます。

エコシステム全体で複数のエンディアンを処理する必要がないことには大きな利点があり、近い将来、リトルエンディアンアクセスを効率的にサポートしないCPUアーキテクチャが普及する可能性は非常に低いと考えられています。

16:07時土、2016年9月3日には、アレクセイ・アンドレーエフ[email protected]
書きました:

なるほど、ありがとうございます。 あまりにも強い要件ではありませんか? CPUはありませんI
ビッグエンディアンを使用していることを知っていますが、何らかの理由で表示されて
広く使用されているWebAssemblyは、このCPU上である程度のオーバーヘッドを伴って実行されます。

MIPSおよびSPARCCPUはビッグエンディアンですが、SPARCにはリトルエンディアンがあります
かなり長い間ロード/ストアされており、MIPSにはリトルエンドのバリアントがあります。

明示的なエンディアンスワッピングを介して、V8にビッグエンディアンサポートを実装しました
コードを記述しますが、オーバーヘッドをまだ注意深く測定していません。


このスレッドにサブスクライブしているため、これを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/WebAssembly/design/issues/786#issuecomment -244548450、
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ALnq1EEkfh88rAXYByuL9uNcjbsjVnFbks5qmX8agaJpZM4J0Snh

WebAssebmlyに構造に似たものとLLVMに似た構造初期化子があればいいのにと思います。

これは、CおよびC ++で行われるのとまったく同じ方法でWebAssemblyですでに実行可能です。つまり、main()が呼び出される前に、_start関数は.init_array関数を呼び出すことができます。 ここでは何もすることがないと思います。

エンディアンについて@ sunfishcode / @ titzerに同意しました

これは解決したと思います。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

beriberikix picture beriberikix  ·  7コメント

JimmyVV picture JimmyVV  ·  4コメント

nikhedonia picture nikhedonia  ·  7コメント

cretz picture cretz  ·  5コメント

jfbastien picture jfbastien  ·  6コメント