タイトル通り。
・canvas への描画が可能なことを確認。
・emscripten_sleep() でその場で停止できることを確認。
・付属の emrun や mongoose などで Local Server を作れば、local だけで
wasm の起動が出来ることを確認。
・mongoose からは、cgi も起動でき、XmlHttpRequest()でローカルファイルを
JSから読み込め、cgi も自由に起動できることを確認。
・ローカル・ファイルアクセス、clipboard の読み書きの他、Local OS の
全ての機能を自由にできる可能性有り。
・これを使えば、Java の JVM に変わる新たなローカル仮想環境ができる。
探検
【wasm】ブラウザでC++。Emscriptenを語ろう
■ このスレッドは過去ログ倉庫に格納されています
1L
2019/01/15(火) 19:50:48.94ID:cXSiB+ud2019/01/19(土) 11:38:40.03ID:P/iwNPAz
【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 するコードに置き換わる。
・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 するコードに置き換わる。
2019/01/19(土) 12:31:16.19ID:P/iwNPAz
【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 に変換できる。
・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 に変換できる。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 一律現金給付も消費減税もなし 高市内閣の経済対策に割れる世論 [蚤の市★]
- 日銀「歴史的」利上げ迫る 35年ぶりの年間上げ幅、0.5%の壁を突破 [蚤の市★] [蚤の市★]
- 国分太一、地上波復帰は困難でもキャンプ趣味を活かしYouTubeで復帰するシナリオも「参戦すればキャンプYouTuberの人気の構図が一変」 [Ailuropoda melanoleuca★]
- 津波警報の発表中にグーグル検索、AIが「すべて解除」と誤情報 [蚤の市★]
- 「そんなに米国が言う通りにやりたいのか」小泉氏、防衛費増額で立民・後藤祐一氏に反論 [少考さん★]
- 【テレビ】家入レオ 高校時代は親友なし 唯一の仲間が現在は超人気女優 「ずっとお互いに本を読んで」 [湛然★]
- 鈴木農水大臣「事実上の減反政策という指摘は全く当たらない」「生産者らが自らの経営判断により需要に応じた生産を推進してきた」 [256556981]
- お前ら「プロテインは肝臓に悪いぞ」
- タモリ、高市早苗のモノマネを披露 [603416639]
- 【高市悲報】日本人のTikTokアカウントが続々収益化剥奪中!!乞食どもざまああああああああwwwwwww [394917828]
- トランプ大統領、レーダー照射問題で沈黙貫く。高市政権は米側に「早く中国を叩く声明を出して!」と泣きつくも無視される [271912485]
- 高市総理「農水大臣大好きお米券」 [237216734]
