- 9 名前:デフォルトの名無しさん mailto:sage [2019/01/24(木) 22:53:00.98 ID:/05KE7l4.net]
- >>3 >>4
どうやら、STACKTOP、HEAP32[] を使うのは、asm.js 流で、 wasm の stack はまた別系統になっているらしい。 前者は、global 領域に確保された HEAP32 配列を使うので、通常の CPUアーキテクチャでのスタックの実装法に近い。そのため、CPUで 出来ることは何でも出来るといっても過言ではない。 一方、wasm の stack には、今のところ stack pointer が存在していない らしい。だから、stack の値を検査したり、独自にコピーして保存して 何らかの効果を得たりすることも出来ないと思われる。 一方で、wasmでの標準的な作法なので、auto 変数もこのやり方 を使うことになっているため、ブラウザでJITなどは、CPUレジスタに 割り付けることによる速度向上が見られるかもしれない。 ここでジレンマが生じる。実は、wasm では、sleep() 機能を使う際には、 -s ASYNCIFY=1 を指定しなくてはならない。すると、前者の実装方に なるだろう。すると、wasm での標準的な方法ではなくなるために、 CPUレジスタへの割付が行われない可能性がある。 なお、話が複雑になるが、ASYNCIFY=1 の指定は、現在の JS の WebAPI の仕様 と絡むと、emscripten_sleep() だけの問題ではなく、非常に重要と言っても過言ではない。 結論を言ってしまえば、OpenFileDialog() のようなもので、ユーザーがファイル名を 選択するのをその場で「待つ」事や、getch() や bat ファイルの pause 文のように キー入力を待つことのような、便利な機能がはっきり言って実装不可能になってしまう。 これは長くて深い話なので、ちゃんと説明するのは難しい。
|

|