【wasm】ブラウザでC++。Emscriptenを語ろうat TECH【wasm】ブラウザでC++。Emscriptenを語ろう - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト2:デフォルトの名無しさん 19/01/19 11:38:40.03 P/iwNPAz.net 【wasm を使う際に難しそうな事柄色々】 ・async, await ・yield [ function generator ] ・setjmp(), longjmp() ・sleep() ; emscripten_sleep() で実装されてはいるが、とても複雑な方法で実装。バグ有り。 ・Atomics, wait(), notify() 【ヒント】 1. wasm からは、JSの関数を呼び出せる。 2. JS からは、wasmの関数を呼び出せる。 3. JS からは、XmlHttpRequest() で WebServer 経由で外部ファイルを読み出せる。 4. XmlHttpRequest() の代わりに fetch() も使えるらしい。 5. JS では、eval(文字列); によって、文字列の中に書かれているJSコードを実行できる。 6. 1と5を使えば、wasmからJSの任意のコードを実行段階で変化する動的な引数を付けて 呼び出されるように出来る。 7. Emscripten では、EM_ASM(), EM_ASM_INT() 文は、*.ll コードでは、 それぞれに対応した関数を call するコードに置き換わる。 3:デフォルトの名無しさん 19/01/19 12:31:16.19 P/iwNPAz.net 【asm.js】 ・asm.js は、JS のサブセット。だから、JS を超えることは出来ないらしい。 ・Emscripten は、Em+Script+en という造語らしい。「Em+xxx+en」は「xxx化する」 の意味なので、Emscripten は、「Script 化する」の意味となる。 ・Emscripten は元々、C/C++ コードを wasm ではなく、JS コードのサブセットで あるところの asm.js に変換するシステムだったらしい。 ・だから今でも、いったん asm.js に直してから binaryen で wasm に 変換しているらしい(←推定)。 ・asm.js の仮想マシンの主記憶は JS の HEAP32[] 配列が対応するらしい。 ・仮想マシンのスタックポインタは JS の STACKTOP という名前の変数で、C/C++ の auto local な変数は、HEAP32[STACKTOP + ofs] の形式で参照されることが多い。 【wasm】 ・wasm は、バイナリ形式だがテキスト形式も存在し、wast、wat と呼ばれ、 LISP の S 式に近い人間が可読な形式になっている。 【LLVM】 ・LLVM は、*.bc がバイナリ形式。*.ll が人間が可読な形式。Emscriptenでは、 拡張子が bc の代わりに o とされている。 ・llvm-as で、*.ll を *.bc に変換できる。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch