X



【wasm】ブラウザでC++。Emscriptenを語ろう
0001L
垢版 |
2019/01/15(火) 19:50:48.94ID:cXSiB+ud
タイトル通り。

・canvas への描画が可能なことを確認。
・emscripten_sleep() でその場で停止できることを確認。
・付属の emrun や mongoose などで Local Server を作れば、local だけで
 wasm の起動が出来ることを確認。
・mongoose からは、cgi も起動でき、XmlHttpRequest()でローカルファイルを
JSから読み込め、cgi も自由に起動できることを確認。
・ローカル・ファイルアクセス、clipboard の読み書きの他、Local OS の
 全ての機能を自由にできる可能性有り。
・これを使えば、Java の JVM に変わる新たなローカル仮想環境ができる。
0002デフォルトの名無しさん
垢版 |
2019/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 するコードに置き換わる。
0003デフォルトの名無しさん
垢版 |
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 に変換できる。
0004デフォルトの名無しさん
垢版 |
2019/01/19(土) 13:02:28.07ID:P/iwNPAz
誤: auto local な変数は、HEAP32[STACKTOP + ofs] の形式で参照されることが多い。
正: auto local な変数は、HEAP32[(STACKTOP<<2) + ofs] の形式で参照されることが多い。
0005デフォルトの名無しさん
垢版 |
2019/01/19(土) 15:43:48.91ID:P/iwNPAz
【VM (Virtual Machine) としての wasm】

・結論から言うと、wasm は、VM としては、JVM や、flash VMより劣っていると思う。
 例としては、「同期オブジェクト(Win32 のWaitForSingleObject()相当)」や、
 sleep() もほぼ、wasm でちゃんと実装できそうなのは、Chrome と、FireFoxに限られる事。

・ところが、Platform 会社の「思惑(Mac上の開発環境の使用の強制)」や
 「訴訟問題(GoogleとOracleの裁判)」により、上記の二つのVMは除外されて行く
 傾向にあり、スマフォでも使えるVMとして残っていくのは、wasm と .NET だけ
 になっていきそうな気がする。

・だから、言語のFRONT END開発者としては、スマフォでも使えるVMとしての選択肢は
 wasm が有力ではあるが、機能面で(かなりの)問題があるというジレンマが生じる。

・これは、GAFA プラットフォーム支配の問題点の一つ。

------------------
[WHY APPLE WON'T ALLOW ADOBE FLASH ON IPHONE]
https://www.wired.com/2008/11/adobe-flash-on/
0007L
垢版 |
2019/01/22(火) 15:48:18.25ID:6S+2YJAI
XmlHttpRequest() は、同期モードにすれば、CGI の動作が完了するまで
待てる気がする。もし、その CGI が、内部で Sleep( 1000 ) 相当の待機を
行えば、JS を、その場で 1秒間 待機させることが出来るかもしれない。
0008デフォルトの名無しさん
垢版 |
2019/01/22(火) 17:47:28.65ID:6S+2YJAI
Android の主要言語はJavaだが、VMは、JVM ではなく、Google 製の
ART (旧Dalvik) の VM を使っている。

だから、このVMは残っていくんだ・・・。
Google は、もっぱら wasm 路線だと思っていたんだが・・・。
0009デフォルトの名無しさん
垢版 |
2019/01/24(木) 22:53:00.98ID:/05KE7l4
>>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 文のように
キー入力を待つことのような、便利な機能がはっきり言って実装不可能になってしまう。

これは長くて深い話なので、ちゃんと説明するのは難しい。
0010デフォルトの名無しさん
垢版 |
2019/01/24(木) 23:11:44.56ID:/05KE7l4
>>9
正しくは、「WebAPI」ではなく、ブラウザ上の JS で使える EventLoop などの
仕様のこと。

1. JS では、Win32 の GetMessage() や PeekMessage() のような、
 Event Queue の現在の中身を直接を調べるような関数が存在しないらしい事。
2. WebWorker で WorkerThread を作っても、結局、DOMには
 アクセスできない事。
3. さらに、WorkerThrad では、イベントを受け取ることも出来ない事。
4. Win32 の GetAsyncKeystate() のような、イベントによらないでキーの
  On/Off 状態を取得する方法が無いこと。
5. 以上の事は、OpenFileDialog() や getch()、pause() 文の模倣をそのままでは
 原理的に不可能にする可能性がとても高い。

[回避策]
a. C/C++ のステートメントの実行を一行実行するたびにイベントループに戻る
 ような「インタプリタ的な」実行法を採用する。これは、「Emterpreter」
 (「Emscripten」と似ているが違うので注意)なるやり方が相当。
b. 関数のコンパイルの仕方を大幅に変更する方法。これが、ASYNCIFY=1
 に相当すると思われる。具体的には、関数で「待つ」必要がある場合には、
 イベントループに戻る。このことは、結論的には、JSやwasmの色々な機能不足を
 一挙に解決できる。イベントループに戻ることで、キーやマウスのイベントを
 受け取ることも出来るようになるし、タイマーイベントが発生するまでCPUを
 hlt 状態にすることも出来るようになる。この事は実は似ているが、よく考えると
 別の事柄でもあったりするので、説明が難しいが、とにかく、一挙に色々な
 事を解決できるようになる。GetAsyncKeyState() 相当の関数が無いことと
 Atomics の wait(), wake(), notify() が、限られたブラウザでしか実装されて無い事
 の問題も解決する。誤解を招かずに説明するには話が長くなるのが・・・。
0011デフォルトの名無しさん
垢版 |
2019/01/24(木) 23:42:39.89ID:/05KE7l4
>>10
誤: 3. さらに、WorkerThrad では、イベントを受け取ることも出来ない事。
正: 3. さらに、WorkerThread では、(キーボードやマウスなどからの)
    「外部イベント」を受け取ることも出来ない事。

・WorkerThread でも、postMessage() によるソフトウェア的なイベントは受け取ることが
 できる。

・ EventTarget の dispatchEvent() を使えば、強制的にイベント・ハンドラを呼び出すことが
 できる。この時、ハンドラの実行が開始され、実行が完了するまで呼び出し元には帰って
 こないらしい。そのため、この呼び出し方は「同期的呼び出し(Synchronously invoke)」
 とされる。


色々考えてみたが、今ある全ての JS の関数、wasm の機能をどんな組み合わせで使っても、
C/C++ の関数を独特な特殊な形式までコンパイルしてやら無いと、getch(), pause(),
OpenFileDialog() のような機能は実現できないと思われる。

それが、「-s ASYNCIFY=1」だと思う。sleep() に関してだけは、Atomics の wait(),
wake() や、>>7 に書いた方法で実装できると思われる。

なお、JS の、async, await, yield などは、使える可能性はあるが、しかし、C/C++ を
wasm に直すことを考えたとき、使うのが難しいか、または、使えても効率はあまりよくない、
または、問題が生じてしまう、と考えている。例えば、wasm に直さずに、asm.js のように
js レベルまでのコンパイルでよいなら、async, await は、何とか利用できる気がする。
それでも、それらの仕様がどうも貧弱なので、それが問題。というのは、2段階以上の
深い関数では、await はエラーになってしまうらしいから、使いたい全ての関数に
async 修飾をしなくてはならない事になりそう。

また、説明するのが難しいが、結局、ASYNCIFY=1 でやっていることと余り変わらないという
か、>>9 のSTACKTOP, HEAP32[] を使うのと、async, await, yield は結局は本質的に同じような気がする。
0012デフォルトの名無しさん
垢版 |
2019/01/25(金) 00:01:31.69ID:58XK3b4v
>>9
>一方、wasm の stack には、今のところ stack pointer が存在していない
>らしい。

ここは、興味深い話として、

1. LLVM には、C の longjmp(), setjmp() の他、 C++ の throw, catch も、
 直接的なサポートがある。

2. LLVM には、仮想レジスタは有っても「CPUレジスタ」的なものは(ある意味では)
 「存在しない」が「スタックポインタ」は、一応、存在している。

3. LLVM には、(EIP のような)「命令ポインタ」的なものは存在していない(ハズ)。
 関数内には、ラベルを書くことが出来て、br 命令で比較的自由に飛ぶことも出来る。
 ところが、全く別の関数への大域的な、jmp 命令のようなものは多分無い。

4. 一番言いたいことは、上記の「2.」のこと。LLVM にはスタックポインタを直接
  触ることが出来る。それなのに、wasm では出来ない(らしい)。この事は、
  結構理不尽な感じがする。

5. 実CPUでは簡単かつ効率よく出来てしまう事が、wasmではできない。
6. Win32 では簡単に出来てしまうことが JS では出来ない。メッセージ・キューの読み出し。
 独自イベントループの記述。while ( GetMessage(&msg ) ) { DispathMessage( &msg); } みたいな。
7. 結果、BASIC でも、35年前の昔から簡単に出来ていた input "a="; a 見たいな事が、JS では出来ない。
0013デフォルトの名無しさん
垢版 |
2019/01/27(日) 02:20:20.81ID:UeSsBKpf
>>9
>どうやら、STACKTOP、HEAP32[] を使うのは、asm.js 流で、
>wasm の stack はまた別系統になっているらしい。

C/C++ の文字列のポインタを JS の関数に渡して、JSで
文字列として扱いたい場合、Emscripten が用意している
Pointer_stringify() という JS の関数を使うことになる。

この関数のソースを見てみたところ、例えば、
writeArrayToMemory: function(array, buffer) {
for (var i = 0; i < array.length; i++) {
HEAP8[ buffer++ ] = array[i];
}
}
のような関数を使っており、HEAP8[] 配列が使われている。
これは、asm.js 流の stack を恐らく「必ず」使っている事を
意味するのだと思う。言いたいことは、wasm の 「nativeな」
stack の仕組みを使わずに、JS の global 変数的に TypedArray
として HEAP8[] を確保して、それを「必ず」使っている、ということ。
そうでなければ、Pointer_stringify() 関数が使えなくなってしまうはずだから。

その結果、wasm の native stack を使って無いので、ブラウザの JIT が働いても、
CPUレジスタが効率よく使われる可能性は低くなる。

ただ、C/C++ と JS 間の文字列の受け渡しは大切で、上記のような実装以外は
現状、多分できそうにない。なら、結論的には、Emscripten がどんなに
改良されても、wasm 側に何らかの改良が施されない限り、wasm の native stack
を使用した wasm コードは根本的に生成できないと思われる。
0014デフォルトの名無しさん
垢版 |
2019/01/27(日) 02:29:37.09ID:UeSsBKpf
>>13
確認が必要ではあるが、ある意味では「良い」こととして
-s ASYNCIFY=1 を指定しても、指定しなかったときに比べた
速度低下は、native stack を使うかどうかに起因する事は
ない可能性がある。だから、-s ASYNCIFY=1 は、そんなに
気兼ねすることなく使ってもいい可能性が出てくる。

というか、-s ASYNCIFY=1 は、Emscriptenの作者の気持ちは
離れていっているかもしれないが、実際にはこれなしでは、
Windows を模倣したような汎用的な ToolKit は作れない
と思うが・・・。
0015デフォルトの名無しさん
垢版 |
2019/01/27(日) 02:56:58.37ID:UeSsBKpf
>>14
>というか、-s ASYNCIFY=1 は、Emscriptenの作者の気持ちは
>離れていっているかもしれないが、

実は、さらに効率が悪いと思われる「Emterpreter」という、C/C++
のソースをバイトコードにコンパイルして、インタプリタ的に実行して
しまう方式の方に、Emscripten の作者の心は向いているのかも知れない。
-s ASYNCIFY=1 は、「推奨しない」が、新しい方式として、「Emterpreter」
を挙げているようにも思える書き方がされているようなので。
0016L
垢版 |
2019/01/27(日) 14:04:20.14ID:UeSsBKpf
LLVM の alloca を wasm の native スタックに対応させずに、
グローバル変数的な、HEAP32[STACKTOP + ofs] の方に対応させた上で工夫すれば、
ASYNCIFY=1 的なものや、yield, async, await, function generator 的なものも
LLVM の LL コード以後の backend 層を修正する事無く実現可能ではないかと思っていた。

でも、LLVM の仮想レジスタ(%10 みたいな) の方も同様に HEAP32[] の方に
移さないと、多分、駄目だろう・・・。一時的に使うものは除いて。
一時的に使っているだけかどうかを最適化層で判定して、一時的ではないもの
だけを HEAP32[] の方に移さないと、アプリの実行速度は下がる。
本当は、LL コードは仮想レジスタに対しては最適化が強く利くはずなので、
なるべく仮想レジスタだけで済むならそれに越したことは無い。
グローバル変数の最適化はかなり難しいのd。
0017デフォルトの名無しさん
垢版 |
2019/01/27(日) 16:09:38.70ID:UeSsBKpf
Emscriptenの emcc で、ASYNCIFY=1 を指定した場合、1つのイベント・ハンドラ
の処理が完了する前に別のイベント・ハンドラが起動してしまうことがあるらしい。
例えば、Windows でいうところの OnMouseMove() ハンドラの中で少し
時間のかかる処理をしていたとする。例として、ハンドラの中で printf()
を使い、端末のスクロールに時間がかかってしまうとか。その場合、
そのイベント・ハンドラの処理が完了する前に、新しい OnMouseMove()
イベントが生じてしまう事があるらしい。

普通、Windows でも、JS でも、マウス・イベントなどは、イベント・キューの中
に蓄えられ、待ち行列を形成し、今実行中のイベント・ハンドラの処理が
完了するまでは次のイベント・ハンドラが実行されることは無い
(Win32では、ハンドラの中で SendMessage() を行えば話は違ってくるが。)。

ところが、ASYNCIFY=1 を指定した場合、printf() 関数の中で、新しい
マウス・イベントに対しての OnMouseMove() が、また呼び出されることが
あるようだ。これも確定事項ではない。しかし、いくつかの実験が不可解な
挙動をしていたのを、今から考えればでそう思えて来た。

そのときは、ASYNCIFY=1 を指定すると、printf() が「バグる」と思って
いたのだが。そういうカラクリだったのか・・・。
0018L
垢版 |
2019/01/29(火) 10:27:43.11ID:8rAEnTT8
Emscriptenを使わずに、clang で wasm を出力してみたところ、
C の local auto 変数は、wasm の native stack(shadow stack) ではなく、
グローバル変数(wast において $global$0 という名前 ) を stack pointer
(asmjs における STACKTOP) として、memory なる HEAP8[] 相当の
JS 配列の中に確保されることが分かった。

つまり、asm.js を途中に介さないで直接 wasm を出力した場合でも、
local auto 変数は、wasm の native stack に確保されるわけではなく、
ちゃんと、HEAP8[SATCKTOP + ofs] のような意味でJS の グローバル変数の
HEAP8[] 配列のようなものの中に確保されていると言うこと。

だから、C の local auto 変数の(先頭)アドレスを取得することも出来るし、
C のglobal 変数のアドレスと、全く同じ扱いにすることが出来ている。
wasm において、Cのポインタの中に入っている「アドレス」は、
HEAP8[] 配列の index 番号である。だから、0 に近い小さな値となっている。
ポインタの値が、10 の場合、HEAP8[10] に対応している。

また、この memory は、現状、wasm 側で確保して、それを、JS 側に export
している。JS 側は、それを必要あらば、HEAP8[] 配列に「投影」することが出来る。
HEAP8 という名前は仮のもので、任意の名前をつけることが出来る。
また、同じ memory 領域を HEAP32、HEAP16、HEAP8 として、重ねるように
配列に投影することも出来る。
0019L
垢版 |
2019/01/30(水) 15:30:21.11ID:vB8508VG
・LLVM は、割と簡単にデバッグ用の行番号情報を入れることが出来る。
・emcc で、-g4 と --source-map-base オプションを使えば、
 それを、sourcemap なる JS のデバッグ情報ファイルに出力できる。
・FireFox Debveloper Edition では、普通に C のソースに break point
 を指定して、wasm のプログラムをブラウザ上でデバッグできることを
 確認した。
・ただし、Web に出ている情報は、少しずつ間違っているか、または、
 現状に合ってないので、実験しないと上手くいく方法は分からなかった。

[emcc を使わないで、wasm-ld.exe を使って debug 情報を入れる方法]

・wasm-ld.exe は、wasm 用のリンカであり、入力は elf 形式似た *.o 。
 出力は、*.wasm 形式。wast が見たい場合は、wasm-dis.exe で変換する。
・この *.o は、emcc の *.o とは別。emcc の *.o は、単に拡張子が
 変わっているだけで、中身は *.bc と同じ。
・この elf 的な方の *.o は、clang で、*.bc を入力して作ることが出来る。
・wasm-ld.exe は、実験してみると、多分。この elf 的な *.o しか入力として受け付けない。
・wasm-ld.exe は、今のところ、直接的には、sourcemap を出力できないらしい。
・しかし、*.wasm の中には、既に dwarf 形式でデバッグ情報が入っているかもしれない。
・なぜなら、wast に変換してみてみると、ファイルの最後の方に ; ・・・ のコメントとして、
 それらしき記述があるから。
・この wasm の中の dwarf 情報は、wasm-dwarf なるプログラムで、sourcemap に変換
 することが出来るらしい。ところが、このプログラムは、「Rust言語」を使って書かれている
 らしい。
・だから、emcc を使わなくても、デバッグ情報を最後まで出力できる道は一応は、存在している
 かも知れない。
・最大の問題は、wasm-dwarf が Rust 言語で書かれていること。exe に直す方法があれば
 便利になると思う。
0020デフォルトの名無しさん
垢版 |
2019/01/30(水) 15:49:47.96ID:vB8508VG
Rust は、コンパイル言語なので、rustc コマンドでコンパイルすれば良いだけ
だったかも。
0021デフォルトの名無しさん
垢版 |
2019/01/30(水) 22:10:26.01ID:GmcWmER+
・wasm-dwarf を試してみたて、ちゃんと、sourcemap 形式のものを出力
 することはできた。
・FireFox Dev Ed. でCソースの行番号レベルのソースレベル・デバッグっぽい
 ことが出来る寸前まではいけた。ブレイクポイントは設定できる。
 しかし、実際にそこで停止することは出来なかった。
・もしかすると、wasm-dwarf の出力する sourcemap ファイルの mapping 部分は
 正しくないかもしれない。

・llvm-dwarfdump なるコマンドがあり、exeバイナリも容易に入手できる。
 そのコマンドを -all オプションを指定して使うと、*.wasm の中のデバッグ情報を
 全部見ることができるらしい。
・LLVM 公式サイトには、LLVM の操作ライブラリもおいてあるが、llvm-dwarfdump.exe
 や、wasm-emscripten-finalize.exe などのツール類は、そのライブラリを使って
 作られている気がする。サイズがどのコマンドも大きいくなっているのはそのせいかもしれない。
 たくさんの機能を持った汎用のライブラリがそのまま exe の中に入っているためにそう
 なっている気がするから。
0023デフォルトの名無しさん
垢版 |
2019/01/30(水) 23:56:12.42ID:GmcWmER+
[エンタープライズ号、航海日誌 第5016日]

emcc を使わずに wasm をソースレベルデバッグしたい場合、
JSファイルではなくて、wasm そのものの中に、その事をマークしなければならない。

そしてそれは、「 custom section "sourceMappingURL"」なるものの中に、
JSファイルで、//# sourceMappingURL=xxxx と書く場合の xxxx の部分
の文字列を入れることで行えるらしい。

ただし今のところ、この section だけを上手く書き換える方法が良く分かってない。
wasm-emscripten-finalize.exe を使えば、書き換えることは可能ではあるが、
wasm 本体のコード部分のバイナリも変わってしまうらしいので、アドレス値が
ずれてしまうので、結局、sourcemap が狂ってしまう。

だから、何とかして、この section だけに文字列を追加する方法を見出さなくて
はならない。
0024デフォルトの名無しさん
垢版 |
2019/01/31(木) 00:30:00.40ID:OGxiQZdZ
結論的に言えば、
・custom section は、id=0 の section で、割と簡単に作ることが出来る。
known section は、id >=1 になっているので、区別が付く。
custom section は、文字列で、好きな名前をつけることが出来る。
・wasm ファイル自体が、section を chunk 方式のように羅列している
 だけなので、意外と簡単に section の追加が出来るかもしれない。
 section は、入れ子になることはなく、単に global level で1次元配列のように
 直線的に羅列されているだけらしい。ただし、それぞれのsectionのサイズは
 可変長なので、配列ではなく、「chunk」である。
・ただし、text format の wast では、custom section を定義する方法が
 用意されていないようなので、binary 形式の wasm を直接修正する
 必要があると思う。
0025デフォルトの名無しさん
垢版 |
2019/01/31(木) 09:53:09.92ID:OGxiQZdZ
Emscripten を使わなくても、ブラウザ上の wasm で、Cソース上の break point
で停止させることに成功した。

なお、海外のサイトを検索しても、その報告例は見つからなかった。
0026デフォルトの名無しさん
垢版 |
2019/02/01(金) 17:28:19.91ID:WOdIBupf
wasm は、JS の WebAssembly.instantiate() 系の関数を上手く使うと、既に、
WebWorker スレッドのコンテキストにおいても実行する事が出来るらしい。

また、実験的な確認は取れてないが、JS の WebAssembly 関連の関数の仕様と
先日から調査した HEAP8[] などによる memoy の扱い方やグローバル変数や
スタック変数の確保の仕方、ポインタ変数の中身の意味などから総合的に判断すると、
別ファイルの*.wasm を複数 instance 化できてもおかしくない仕様になっている
と思う。

ちなみに、C の関数ポインタは、wasm でも使用できることを実験して確認した。
そして、wasm においては、「関数アドレス」ではなく、「関数番号」となる。
番号に対応した関数の「関数名(関数オブジェクト)」は、table なる wasm
内の section に配列的に並べられている。
そして、JSコードからも、そのテーブルの読み書き、追加が可能。

だから、動的に関数を追加して、動的リンクなども出来てもおかしくない仕様に
なっている。
0027デフォルトの名無しさん
垢版 |
2019/02/01(金) 17:38:50.44ID:WOdIBupf
wasm, wast において:

・call_indirect の引数は、関数アドレスではなく、関数番号となる。
 この番号は、table section のエントリへの index 番号となっている。

・store アドレス, 値
・load アドレス

の「アドレス」部分は、memory section の先頭からの offset 値に
なっている。memory section は、JS コードからも参照する事が出来て、
8, 16, 32 BIT の配列としてアクセスする事が出来る。名前は任意に
ついけられるが、HEAP8[], HEAP16[], HEA32[] という配列に「投影」
してアクセスする事が出来る。型が決まった配列に投影するやり方は、
TypedArray への投影として行う。一方、32BIT値などを、アラインを
気にせずに中途半端なアドレスを指定してアクセスするには、
DataView が便利である。なお、TypedArray へ投影する場合でも、
アラインがずれている変なアドレスを先頭アドレスにして 32BIT 値の
配列にすることも可能らしい。

なお、普通のJSでは、数値は、全て 64BIT double 型の不動小数点型である。
TypedArray では、ちゃんとBIT 数を指定した整数型としての配列を作る
ことが出来る。ただし、上の例では配列を作っているのではなく、配列へ
「投影」している。
0028デフォルトの名無しさん
垢版 |
2019/02/01(金) 22:39:58.03ID:q39qofSl
[用語解説]
エントリ = アセンブリレベルのデータにおいて時々使われる言葉。
      同じサイズのデータが並んでいるような場合に、各データが
      入っている「箱」、のような意味。
      C言語の配列における各要素が入っている小さな箱のようなイメージ。
     「room」「folder」などの言葉も大体同じ意味かもしれない。
0029L
垢版 |
2019/02/01(金) 22:54:21.57ID:q39qofSl
[独断と偏見の見解]

辞書に置いては、英語版でも日本語版でも、「エントリ」や「インデックス」
の意味がはっきり言って「間違っている」。自分が読んできたコンピュータ系の
技術文書に置いては、

インデックス = 「index number」のように使われて、配列の「要素番号」
        配列の添え字の意味であり、それ以外の意味で使われることは
        まずない。BYTE  a[256]; に対して、a[idx] の idx がそれ。
        変数名としては、大体 idx か index。一方、id は、identifier の
        場合が多くて、識別子。意味も少し似ていて混同してもそんなに
        問題ないかも知れないが。英語圏に置いて、配列の添え字は、大体
        index number という言葉が使われる。subscript も使われる
        こともたまにある気もするが、そっちは「下付き文字」の意味で、
        ニュアンスが結構違うと思う。

エントリ = ネットの辞書にあるような、「データ入力」や「エントリ・モデル」の
      意味ではほぼ絶対に使われない。配列や行列やテーブルの要素の
      入っている箱のような意味。「データ入力」は、多分、「data input」
      ということが多いと思う、なんとなくだが。
0030デフォルトの名無しさん
垢版 |
2019/02/03(日) 18:21:17.31ID:gzQofkZX
Emscripten や、その付属ライブラリなしで malloc(), free() ( <--- dlmalloc ) を
使うことに成功した。dlmalloc と 自分のアプリで wasm 分けずに、 リンクして
単一のwasm で行ける。 wasm の起動処理も必要なビルトイン的なJS関数の準備も、
全部自前で書いた JS で行っている。
0031 ◆QZaw55cn4c
垢版 |
2019/02/03(日) 19:50:39.97ID:t4xt++Qj
>>29
>それ以外の意味で使われることはまずない
「まずない」というのはちょっと極端ですね…
今思いついたところでは、インデックスレジスター絡みのアドレッシングとか命令とか、はありうると思いますね
あと index には「指標」という意味がありますから、OS 等の動きや効率を計算して振る舞いを変えるための状況指示関数みたいなものを index と呼ぶ可能性もあります
0032L
垢版 |
2019/02/04(月) 11:11:39.60ID:fEV2g5eo
>>31
結論から先に言っておくと、とても言いにくいことだけど、あなたの意見はおいらの見解とは合わない。

>今思いついたところでは、インデックスレジスター絡みのアドレッシングとか命令とか、
>はありうると思いますね

Intel CPU の IA32 の「アドレッシングモード」は、Mod/RM で指定する。メモリから
データを読み書きする場合には「間接アドレッシングモード」を使い、元々の意図
としては次のようになっている。ただし、アセンブリ言語の使い方はとても自由で、
絶対この意味で使わなくてはいけないというわけではなく、元々、Intel も別の意味での
使い方も想定している。だから、言葉の意味とは違った使い方がされていることとがある。
そしてそれは悪いことではない。だから注意が必要:

[base + index * scale + offset]

base = ベースレジスタ(配列の先頭アドレスに当たる)。base は基盤。だから、先頭アドレスの意味になる。
index = インデックスレジスタ(配列の添え字に当たる)
scale = 1,2,4,8 ; スケールファクタ(配列の要素のバイト数にあたる)
offset = オフセットアドレス(ベースアドレスを少しずらす目的か、または、逆にこっちをベースアドレスにする使い方がある)

C 言語で、TYPE arr[N]; と宣言すると、TYPE 型を要素が N 個集まった配列が定義できる。
上記の間接アドレスで、scale は、sizeof(TYPE) とする事が想定されている。つまり、
arr[index] ---> [&arr + index * sizeof(TYPE)] のように置き換わり、
scale = sizeof(TYPE); の場合に相当する。だから、この場合も、index は紛れもなく配列の添え字である。

ただし、scale=1 に設定することで、index の部分にベースアドレスを指定することも出来るように
なるので、実際のアセンブリ言語では、index が添え字であるという元々の意味を超え、さまざまな使われ
方がされている。しかし、それは、index の言葉の意味が「添え字」である、という事を否定すること
にはならない。
0033L
垢版 |
2019/02/04(月) 11:25:05.10ID:fEV2g5eo
Z80 には、IX、IY という16BITレジスタがあり、
LD A,(IX + 4)
使い方が出来た。4 の部分は、8BIT の定数を指定する。
Z80のアドレス幅は16BITだったので、8BIT 値では、ベースアドレス
を指定することは出来ない。その意味では、IX は、配列の添え字ではなく、
先頭アドレスを指定するのがほぼ必須となっていた。

でもこれは、いまからずっと古い話で、どういう経緯かは分からないが、
index は、今では、99.9 % 位は、配列の添え字(文字の位置もここでは同義と
考える)という意味で使われるようになってきている。例えば、言語としては
C/C++ よりは新しい JS においても、indexOf() がある。これも文字の位置を
返す関数なので、配列の添え字と同一視する事が出来、index という言葉が、
やはり配列の添え字として使われていることが分かる。

最近では、配列とリンクリストの違いが分かってない人が増えているので、
index の意味を誤解する人が出てきているかもしれない。
0034L
垢版 |
2019/02/04(月) 11:34:20.94ID:fEV2g5eo
>>1
>あと index には「指標」という意味がありますから、OS 等の動きや効率を計算して
>振る舞いを変えるための状況指示関数みたいなものを index と呼ぶ可能性もあります

Intel Manual や、Microsoft (MSDN Libydary など), JavaScript, Java, Ruby, Perl
などではそのような使い方がされることはないといっても過言ではない。
0035L
垢版 |
2019/02/04(月) 11:36:44.96ID:fEV2g5eo
なお、誤解を与える前に書いておくと、これは、99%位、記憶に頼って書いている。
Mod/RM の部分は、100%脳内の記憶から書いた。
0036L
垢版 |
2019/02/05(火) 01:17:05.71ID:1Lt6uOg9
>>6
[Wasm & Windows 共通 GUI Toolkit, with NWSC used]

http://nowsmartsoft.atwebpages.com/

↑ 別の無料サーバー(海外のもの) に置き直してみた。

[事情]
>>6 で借りてる無料サーバーは、サーバー(Xrea)自体が
 BitDefender Traffinc Light の BlackList に入ってしまっていて、「黄色」ランプ
 になっていたので気になっていた。過去に この Xrea サーバーのバナー広告がトロイ
 の木馬に感染してしまっていたらしい(当然だが、オイラとは全く関係ない)。 

・新しいサーバーは、BitDefender Traffinc Light の BlackList に入ってないので
 緑色のランプになっている。
0037デフォルトの名無しさん
垢版 |
2019/02/05(火) 15:47:24.76ID:1Lt6uOg9
Emscripten を使わずに、>>36 のビルドに成功。
分割コンパイル時の最後のリンク時間が速くならずに困っていたのが、
激速になった。また、出力される wasm、ランタイムの js、html のサイズが
小さくなり、ランタイムがシンプルになって何をやってるのかとても分かり
易くなった。ライブラリも何をやってるのか分かり易くなったしサイズも
激減したので、配布も楽になりそう。処理系もほぼ全てバイナリになったので
Python や node.js、Java などの処理系の配布も不要になった。
0038L
垢版 |
2019/02/05(火) 18:27:56.95ID:1Lt6uOg9
>>37
ひきこもりのLが、早速、設置してみた。

[1]. Emscripten を使わず、nwsc と clang-toolset と nwstk と dlmalloc だけ(?)を使って作ったもの :

URL: http://nowsmartsoft.atwebpages.com/

index.html : 2KB
start.js  : 16KB (wasm の起動とJS側の関数類)
test.wasm : 67KB (wasm アプリ本体)

nwsc は、独自 C++ nex compiler で、llvm のフロントエンド。wasm 用の
独自拡張を持っており、Emscripten と同様の EM_ASM({・・・}, ・・・);
が使えるが、その場合、JS 関数を直接、JS ファイルに出力するので、
恐らく Emscripten より効率が良いと思う。

test.wasm は、wasm-opt.exe で最適化すれば、もっと小さく出来る。
start.js も minimize ツールを使えばもっと小さく出来る。
また、test.wasm は、今後、圧縮して配布することも可能だと思われる。

--------------------------------------------------------------------------------------
[2]. nwsc と Emscripten (emsdk, emcc, clang, binaryen, ライブラリなど) を使って作ったもの :

URL: http://nowsmartsoft.atwebpages.com/emcc

index.html  : 8KB
MainWnd.js  : 123KB (wasm の起動とJS側の関数類)
MainWnd.wasm : 104KB (wasm アプリ本体)

なお、Emscripten でも、もっと小さく作ることは可能かもしれない。また、今回は、-s ASYNCIFY=1 は使ってない。
0039デフォルトの名無しさん
垢版 |
2019/02/07(木) 00:00:12.17ID:FsbblVW+
age
0040デフォルトの名無しさん
垢版 |
2019/02/07(木) 17:57:22.68ID:fRacvqu0
https://i.redd.it/7vuxeeptx2f21.png

↑ Chrome 内で (試作品の) 独自 Windows System (?) を実行中のキャプチャ
画像。
0041L
垢版 |
2019/03/11(月) 12:54:38.07ID:HTmv6ctw
>>1
自作 C++ compiler nwsc で、bsync, bwait, bresume, bcall なるものを実装し、
bsync 修飾された関数にはコンパイラが変形した特殊なコードを出力する
事で、JSのイベントループの制限を突破することに成功した。次のことが出来る
ようになった/なる:

1. イベントハンドラ実行中に、独自のイベントループを作ってそこで任意のイベントの発生を
 待機/処理する。メニュー・イベントのハンドラの中でハンドラを終了する事無く、
 独自のファイル入力ダイアログを出し、OK/CANCELボタンが押されるまで待機し、
 続けて必要な処理を行うこと。

2. CPUパワーや電力を消費する事無く、その場で待機する事ができる Sleep() 関数の実装。

3. getch(), getche(), (ポケコン)BASIC の pause, wait, input 相当のものの実装。

#なお、bsync などの語頭の「b」は、「async(非同期)」の a を b に変えたもの。
 JS の async, await より強力なので a の次を表す意味で b にした。
0042L
垢版 |
2019/03/29(金) 10:50:18.05ID:sD1xGsa7
>>1
自作 wasm demo を更新した。
・Ctrl+ +, Ctrl + - での拡大縮小、Ctrl+Shift+I での開発者モードへの遷移(Chrome)が可能に。
・コンソール出力(textarea)へのコピペに対応。
・サーバーに置いてある jpg ファイルを読み込んで独自 Window 内への描画に対応。
 回転表示可能。
・demo1 : 2枚の Windowにedit widget のテスト。メニューあり。ブラウザ内にある
 独自Window のドラッグ移動とサイズ変更が可能。
・demo2 :2枚の jpg 画像を読み込んで表示するテスト。
・同じソースからビルドした Windows native 版も手元にある。
・Window も Widget 類も全部自前で描画しているのでタイトルバーの色や枠の太さなどは
 自由に変えられる。原則的に native 版と wasm版で pixel 単位で全く同じ見た目。

http://nowsmartsoft.atwebpages.com
http://nowsmartsoft.atwebpages.com/demo1/index.html
http://nowsmartsoft.atwebpages.com/demo2/index.html
0043L
垢版 |
2019/03/31(日) 12:58:32.59ID:vDO0/VaM
>>1
wasmとcanvas 2Dを使った3D地形(?)のスクロールサンプルを作ってみた。

http://nowsmartsoft.atwebpages.com/demo_land/index.html

ご覧ください。思っていたよりはちょっと遅いかな。
WebGL使ったら速くなるかもしれない。
0044デフォルトの名無しさん
垢版 |
2019/04/01(月) 14:17:41.70ID:QUlyRw/u
どうせWebGL使うんだったらwasm使う意味なくね
0045L
垢版 |
2019/04/01(月) 14:30:39.86ID:YLhs0zdh
wasmがなぜ重要かは、まだ言わない。
0046デフォルトの名無しさん
垢版 |
2019/04/01(月) 14:40:56.11ID:bzrp4n7u
naclとは別物なの?
0048デフォルトの名無しさん
垢版 |
2019/04/01(月) 15:07:19.83ID:bzrp4n7u
PNaClを使ってたんやね
0049デフォルトの名無しさん
垢版 |
2019/04/01(月) 15:12:02.16ID:YLhs0zdh
Google Native Client は、WebAssemblyの普及に伴いそちらにリソースを
集中するため開発を終了し、2019年にChromeから削除されることが発表
された。
0051デフォルトの名無しさん
垢版 |
2019/04/01(月) 17:34:37.66ID:RkAplvWW
>>1
どうも世界には、Java でも C# でもない共通プラットフォームを作りたがってる人たちがいて、
その中には、FireFox, Google, Apple が含まれるらしい。

WASI = WebAssembly System Interface

なるものの標準化が進められており、例えば、native のファイルシステムに直接アクセスできるようになり、
それによって wasm がブラウザ内部に留まらず、Javaのようなプラットフォーム非依存の共通アプリケーション
が作れる存在になることを目指しているらしい。


# 2019/03/27 の記事:
https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/
# 2019/03/28 の記事:
https://www.infoworld.com/article/3384920/mozillas-wasi-takes-webassembly-beyond-the-browser.html



なぜかタイムリーに Java への批判が出てきた。
「Java は安全な言語ではない」:
# 2019/03/28 の記事:
https://lemire.me/blog/2019/03/28/java-is-not-a-safe-language/
0053デフォルトの名無しさん
垢版 |
2019/04/02(火) 02:11:54.11ID:N1DZco4a
何度もあらわれては消えていく"write once run anywhere"のコンセプト・・
はてさてどうなりますやら
0054デフォルトの名無しさん
垢版 |
2019/04/02(火) 11:07:57.88ID:5+C+zQyU
wasabiならもっと流行るはず
0056デフォルトの名無しさん
垢版 |
2019/04/03(水) 01:36:20.38ID:UEgi/Llh
「C# Run Anywhere」でGoogleって、海外のサイトを見ていたら、
C#は設計上は、仮想マシン上で動くことになってるけど、MS公式の
Runtimeで、大体動くのは、大体WindowsとMacだけで、実質、
Windows向けだと書いている人がいた(それが本当かどうかは分からないけど)。
少なくとも、以下のようなことは大体正しいのではないかと思う。
・MSにとって、C#がマルチプラットフォームになることはマイナスである。
・MSはC#をRun anywhere にすることには力を入れてないか、目指していない。
0057L
垢版 |
2019/04/03(水) 15:29:38.83ID:+15LYwzR
>>43
結論から言うと、ゲームに置いては、ブラウザ内アプリと native アプリのどちらで
組むかは、速度性能で選ぶ必要がなくなりそうだ。理由は以下の通り:

今回、試しに描画部分をWebGLに変えてみたら、劇的に高速になった。
詳しくは分からないが、恐らく native アプリで Direct3D を使った場合に匹敵するくらい
の速度が出てると思う。結果、多くのゲームに関してはブラウザ内アプリとnative アプリで
速度差がほとんど出ないと思われる。なぜなら、mainプログラムでは描画に関しては
全く何もやることが無いといっても過言ではないのに、大抵のゲームでは描画以外の
計算は物凄く軽いから。
人体の間接などを滑らかに描画するボーンの演算ですら、プログラマブルな Vertex Shader
により GPUで行えるし、パイプライン化されているので相当重い計算でも、描画速度には
ほとんど影響を与えない可能性が高い。
0058L
垢版 |
2019/04/03(水) 18:27:34.57ID:+15LYwzR
>>1
一応、作ってみたものを公開しておくので見てね。

地形データの WebGL によるワイヤーフレーム描画のデモ:
http://nowsmartsoft.atwebpages.com/demo_land_WebGL/index.html

地形データの WebGL によるポリゴン描画のデモ:
http://nowsmartsoft.atwebpages.com/demo_land_Polygon/index.html


まだそんなに高速化は施してないので、もっと高速になる余地がある。
例えば、頂点データはフレーム描画毎にコピーしてしまっている。
頂点カラーも 0〜255 の BYTE 形式から、0.0〜1.0 の float 形式に
wasm のコードで変換している。それらは本来は不要なものだけど、
今回は修正せずに見切り発車的にそのまま公開した。

それと、実際にやってみると、時々ガタガタと止まった感じがするけど、
それは、JavaScript の GC (Garbage Collection) が時々起動してしまって
いるからだと思う。

wasm を使っていても、グラフィック描画のためにはどうしてもJavaScript
は使わざるを得ないので、いつのまにかこうなってしまっていた。もう
ちょっと工夫すれば、GC の発生を抑えることが出来るんではないかと思っている。
今回、WebGL を始めて使ったので、その際、ネットにあったサンプルをそのまま
使ってみている部分があり、その結果、OnDraw() 関数の中で TypedArray 配列
を new したりしてしまっている。それが一番の原因ではないかと思われる。
0061L
垢版 |
2019/04/05(金) 16:28:39.72ID:xS705/9I
>>1
一応、スマホのタッチ入力によるWindowの移動やサイズ変更に対応してみたよ。
実機では一度も試してない(スマホ持ってない)ので動作報告あったらうれしいな:
http://nowsmartsoft.atwebpages.com/
0063L
垢版 |
2019/04/05(金) 19:50:46.66ID:xS705/9I
>>62
PCでテストしてたら広告が出てこなかったかが気づかなかったけど、
Chromeのスマホモードで見てみたら、非常に問題ある位置に広告が出て
来ることが分かって今、めちゃくちゃ対処に困ってるょ。
位置を変える方法が見つからない・・・。Ninja Analyzerのものなのか、
ZettaHosting (atwebpages) のものなのかも分からない。
0065デフォルトの名無しさん
垢版 |
2019/04/06(土) 02:53:07.58ID:/MkWaZI9
広告、最初の導入ページには残ってるけど、各demoページでは消えてるらしい。
0068L
垢版 |
2019/04/06(土) 12:55:17.11ID:c/dtyqqS
Windows に最初から入ってるブラウザの IE では残念ながら見られないので
FireFox か Chrome を入れてね。FireFox が速いみたい。
0071デフォルトの名無しさん
垢版 |
2019/04/06(土) 16:20:00.28ID:c/dtyqqS
言い忘れてたけど、これは新しい言語 C++ nex のコンパイラ nwsc と
新タイプの統合開発環境のデモ的なものなので、そっちを応援してくれる
人が増えそうならデモや TOOLKIT(NWSTK) のソースを公開しようかな
と思ってる。
0073デフォルトの名無しさん
垢版 |
2019/04/07(日) 16:35:02.31ID:e/tK/Nk6
>>1
海外の掲示板などでに出ていた Wasm が VM(Virtual Machine)として、
JVM (Java の VM) や Flash の VM より優れていると考えられている点の
内、今思い出せるものと書いておく:

1. JVM や FlashVM は、それぞれ一社のものだが、Wasm の VMは、
  FireFox, Chrome, Apple などの多数のベンダーの合議により
  決まった公開仕様である事。例えば、Googleが自分勝手に
 何かしようとしても、FireFox などがそれに逆らうことが出来る(?)
 ため、問題が生じにくい、と書いている人がいた。

2. 実際、第三者的な組織から、Lucet, wasmer, wasp, wasabi,
 binaryen(元々有ったが) など色々出てきているらしい。

3. そもそも、JVM は、設計が、ほぼ Java 専用になっていて、例えば、
  変数の型などのMeta情報が Java 専用だったり、GCを前提とした
  仮想コード、仮想マシンになっているらしい。その結果、
  FrontEnd に C/C++ などを含めた広く一般的な言語が対応
 するのは難しいらしい。つまり、一般的な言語の BackEnd
 としては無理があるらしい。

4. JVM は、セキュリティー上の問題がある、とされていた。
 なんでも、ブラウザと JVM の境界線上で問題が生じることが多いらしい。
 クラッカーは、ブラウザと JVM の間のセキュリティー上の約束事や
 (仕様上の)意思疎通の齟齬(?)を見つけて何かやってくるのか知れない。

5. JVM はブラウザの拡大率を変更しても追従しにくいが、wasm だと
 追従しやすいらしい。
0074デフォルトの名無しさん
垢版 |
2019/04/07(日) 16:59:47.19ID:e/tK/Nk6
>>73
6. JVMを使うには、使いたい人が自分で JRE をインストールする必要があったが、
 wasm だと、IE以外の新しいバージョンの主要なブラウザなら全て最初から
 対応している事。そのため、多くの人に届きやすいプラットフォームである。

7. Java(Applet)やFlashは既に、数年後にはChromeからは実行できなくなる予定で
 あるが、wasm は逆に、Flash(Adobe) までもが backend として対応すると
 宣言している。
0075デフォルトの名無しさん
垢版 |
2019/04/08(月) 18:03:38.12ID:pvsbwYPC
>>1
ウェブ・アプリをローカルで実行したい場合に参考になりそうなもの
・Google Gears
・PWA = Progressive Web Apps
・WASI = Wasm System Interface
・blob, fetch, XHR
0077L
垢版 |
2019/04/21(日) 17:21:20.81ID:1Wk1O9hC
http://nowsmartsoft.atwebpages.com/

↑ demo1 の EditWidget が、MobileのOn-Screen Keyboardに対応して、
PCでも日本語の入力が出来るようになったよ。

「今まで出来なかったの?」って? ブラウザのせいだよ〜!
0078デフォルトの名無しさん
垢版 |
2019/05/18(土) 16:05:19.62ID:dUyfgnsN
>>1
ブラウザ上だとタイトルバーとURLアドレス欄で画面に無駄が消費されてしまう問題は、
「WebView」のようにアプリの内部にブラウザを埋め込んでしまえばいい。
それを使えば、キャッシュされてしまう問題も回避できるかもしれない。
0080デフォルトの名無しさん
垢版 |
2019/05/18(土) 17:59:00.81ID:81A5W8ik
PWAの作り方は良く分からないけど、アプリの審査がいらないのは
子供達にも向いてるかもね。
0081デフォルトの名無しさん
垢版 |
2019/05/18(土) 18:07:19.99ID:dUyfgnsN
でも、https必須らしいので、年間維持費がかかりそう。
・登録料無料のhttpsを使うのには独自ドメインが必須らしい。
・サブドメン方式でhttps使う場合は探した限り無料で出来るレンタルサイトはない。
0084デフォルトの名無しさん
垢版 |
2019/05/19(日) 11:00:10.59ID:NVj9TkQF
ほんそれ
0089デフォルトの名無しさん
垢版 |
2019/05/19(日) 17:57:24.92ID:pfNk1t/q
twitter の #wasm タグ、今年に入ってから急激に活発になってる気がする。
去年は数週間に一回の書き込み、みたいな感じだったようだけど、今月なんかは
数十分に一回の書き込み位になってる。求人広告まで沢山出だして、wasm技術者
を探す第一回目の会議(?)みたいなものまで出てきたらしい。
0090デフォルトの名無しさん
垢版 |
2019/05/19(日) 18:01:09.59ID:pfNk1t/q
ITの世界では、良く分からないところで誰かが商売に結び付けて大儲けし出す
事が多かったから、先に動こうとしてるんだろうか。クラウドとかも本当に
メリットがあるかどうかおいておいて、ブームのようにして大金が動いている。
0091デフォルトの名無しさん
垢版 |
2019/05/19(日) 19:04:28.84ID:pfNk1t/q
The web always wins. # ウェブはいつも勝つ
と書いてる人がいた。
面白い見方だな。
0092デフォルトの名無しさん
垢版 |
2019/05/19(日) 19:11:38.67ID:pfNk1t/q
「Wasmで最も重要なのは、Secutrityの面である」
と書いている。WasmはSandBox内で動作しているので安全だと。

なるほど、「Webがいつも勝つ」一つの原因は、安全性が高いことなのか・・・。
そういえばブラウザ上で動いている限り、まずウイルス感染しないな・・・。
そうか、スマホが流行る原因も、マシンのトラブルが少ないからかもしれないな。
PCだとOSが不安定になって使えなくなることが多いのと対照的。
なるほどなぁ・・・。
0094デフォルトの名無しさん
垢版 |
2019/05/20(月) 14:01:02.69ID:pxNnSyNl
上手くいけば、AppStore登録の月額利用料金が開発者にかからないでiPhone/iPad
ようのアプリが作れるかも知れない。
iOSでも、去年の3月くらいにSafariもPWAに対応したらしいし、Chromeも使える。
となると、ウェブアプリをWasmで作っておいて、PWAを使えば普通のアプリの
ようにHome画面にアイコンを登録できるし、実行時にアドレスバーも出さなく
できる。Safariで駄目な場合は、iOS用のChromeもある。
0096デフォルトの名無しさん
垢版 |
2019/09/12(木) 22:35:47.25ID:Uy9QyXie
>>40
トンでもねぇ色彩センスwww
さすがに草不可避wwwww
0098デフォルトの名無しさん
垢版 |
2019/11/18(月) 16:14:21.51ID:Vzii0sJA
C++をソースとするwasmとPWA(Progressive Web Application)化できる
ことを実際に確認することが出来た。Chrome+Win7の組み合わせで
wasmアプリをローカルにインストールできてデスクトップにアイコン
を作成することができる。アイコンをクリックすると、ある種の
nativeアプリの様な雰囲気で起動できる。
0099デフォルトの名無しさん
垢版 |
2019/11/18(月) 16:14:54.06ID:Vzii0sJA
C++をソースとするwasmをPWA(Progressive Web Application)化できる
ことを実際に確認することが出来た。Chrome+Win7の組み合わせで
wasmアプリをローカルにインストールできてデスクトップにアイコン
を作成することができる。アイコンをクリックすると、ある種の
nativeアプリの様な雰囲気で起動できる。
0100デフォルトの名無しさん
垢版 |
2019/11/18(月) 16:15:25.78ID:Vzii0sJA
age
0101デフォルトの名無しさん
垢版 |
2019/11/18(月) 19:53:09.11ID:Vzii0sJA
https://yutakaaoki.github.io/pwa-wasm-demo1-B/

ここに wasmアプリが置いてあるが、Chromeで訪れると アドレスバーの右の方に
「インストール」という文字が現れ、しばらくすると、○で囲った + 記号に変わる。
そこをクリックすると、PWAとしてローカルPCにインストールできる。
または、右上の縦に3つの点があるボタンを押してみると、
『「PWA NWSTK」をインストール...』
というメニュー項目が出来ているので、そこをクリックしても同じ機能が働く。
0103デフォルトの名無しさん
垢版 |
2019/11/20(水) 12:43:45.81ID:vKT/00gf
>>101
https://yutakaaoki.github.io/
ここにおいてあるものは、全部PWAに対応してみた。
Windowsならインストールできると思う。
AndroidやiPhoneなどでも出来るか試して欲しい。
0105デフォルトの名無しさん
垢版 |
2019/11/20(水) 13:48:41.27ID:pcdm34G4
で、これで何ができるの?
0106デフォルトの名無しさん
垢版 |
2019/11/20(水) 14:49:34.93ID:vKT/00gf
>>105
・セキュリティーが凄く強いアプリ。信用できないようなサイトからインストール
 しても、レジストリには読み書きできないし、システムフォルダや他のアプリの
 フォルダには、人間がマウスやキーボードなどから実際に指示しない限りは書き込めないし、
 読み込むことも出来ない。変な場所にインストールされたり、スタートアップ起動などに
 勝手にされることも無い。
・アプリの体験版をインストールすることなく、普段のウェブ閲覧の延長線上に
 試せるのでユーザーは遊び半分で気軽に試すことが出来る。また、掲示板などから
 リンクを張った先がすぐにアプリとなっている。その後、デスクトップや
 ホーム画面にアイコンを追加し、単独アプリの用に振舞うことが出来る。
・なぜか全てがウェブに移行するようになっており、「いつもウェブが勝つ」。
・iPhoneやiPad用のアプリが無料で開発出来る可能性がある。今までは、
 それらをターゲットに開発するには、Mac実機がどうしても必要となり、
 かつ、AppStoreに登録しないと配布することも出来なかったが、AppStoreは
 年会費も必要で、生涯にわたってずっとコストが掛かかり続けていた。
・ブラウザが互換性を保つので、PCで試して動けば、AndroidやiPhoneでも
 近い動作になる可能性が高い。
・Chrome, FireFox, Safari, Edge, Opera なども wasm に対応している
 (ただし、ツールキット側がテストはしておく必要はある。)。
0108デフォルトの名無しさん
垢版 |
2019/11/20(水) 15:00:41.97ID:vKT/00gf
>>106
【追加】
・画面が、Ctrl+ +, Ctrl+ -で好きなように拡大縮小できるので、近視や老眼などで
 目が悪い人でも好きな文字の大きさで読むことが出来る。それがWebアプリでも、
 PWAアプリ化したものでも出来る。
・ツールキットも含めてサイズがとても小さい。ブラウザさえ使える状態であれば、
 DLLやランタイムのインストールが全く不要。demo1は、*.htmlや*.js, *.wasm全て
 合わせて 150KB、demo-Mountainは、153KB。JavaランタイムもQtランタイムも
 MFCのDLLも何も要らない。
0109デフォルトの名無しさん
垢版 |
2019/11/20(水) 15:11:39.18ID:vKT/00gf
>>107
・Java Appletは、訴訟トラブルのせいか、ChromeもFireFoxが対応しなくなって
 しまった。
・wasm は、C++ が使えるので、GC を使わないプログラムが出来、
 メモリが多く使うウェブアプリを作ろうとした場合に、体感速度が非常に
 違ってくる。Javaだと、GCが走ると一分間停止するようなことがあった。
 wasm と C++ の組み合わせだと、このようなことが起きないので、
 プログラムした通りの一定の速度が維持できる。
・Java は、逆コンパイルするとほぼ元ソースに戻せてしまう性質があった。
 それを防ぐには曖昧化などが必要であり、手間や(ツール購入の)コスト
 が掛かった。曖昧化するためにコンパイル時間が増大した。
・Javaが有料化したという話がある。これについては諸説あるのでよく分からない。
0111デフォルトの名無しさん
垢版 |
2019/11/20(水) 15:18:23.10ID:vKT/00gf
>>110
・wasm内部からは、EM_ASM()構文などで自由にJavaScriptが使えるので、
 XHRやfetch()などを自由に使ったAjax流儀のプログラムが行える。
・簡単に HTML 要素と共存できる。
・ブラウザの画面を拡大したような場合に、JavaAppletだと追従するのが
 難しく、できないことはないがタイムラグが生じ易かった。
 Ctrl+ + での拡大も、JavaApplet 部分だけは置いていかれるようなことに
 なったので、対応したければ独自に工夫する必要があった。
0112デフォルトの名無しさん
垢版 |
2019/11/20(水) 15:54:16.93ID:vKT/00gf
>>111
・iOSでは、もともとJavaが使えないと聞いている。
・Androidは、基本がJavaではあるが、実際には、Google独自実装となってしまって
 おり、 Sun/OracleのJavaで昔からの標準の Swingなどを使ったものは動か
 せない。これが訴訟問題になった最も大きな原因の一つらしい。
0113デフォルトの名無しさん
垢版 |
2019/11/20(水) 19:15:30.47ID:vKT/00gf
>>108
ツールキットに用意されて無い機能を追加したい場合、JavaScript として書けば
よいのであらゆるプラットフォームへ迅速に対応できる。
他のツールキットの場合は、iOS/Andorid/Win/Mac/Linux など用にそれぞれ
書く必要がある。
0115デフォルトの名無しさん
垢版 |
2019/11/21(木) 16:02:31.75ID:0fDEV4Sz
PWA化後のデスクトップのアイコンが、物凄くいろいろなことをやっても古いまま
全く更新できなく立った。
どうしよう。
0117デフォルトの名無しさん
垢版 |
2019/11/26(火) 01:08:23.77ID:t9NWfcZD
PWAだとストアの審査が要らない。通常、iPhoneのアプリは、iPhone流の
インターフェースを持って無いと審査に通らない(Appleに脅威をもたらすと
考えられるだけで審査に通らない可能性もある。YahooゲームやLINEゲームが
AppleにBANGされた歴史もある。)。PWAの場合はそんなことはなく自由
なので、PCやAndroid、iPhoneで完全に同じインターフェースにすることもできる。
そうすれば、開発も楽になる。
0118デフォルトの名無しさん
垢版 |
2019/11/26(火) 01:16:04.21ID:t9NWfcZD
PWAの場合、ブラウザとnative風アプリの操作感が統一できるのでユーザーは
安心して使える。WindowsとiPhoneで同じインターフェースのアプリになる。
今まではAppleの審査のためにそのようなことは出来なかった。Windowsに慣れて
いるが、iPhoneを使っている人にはWindows流インターフェースの方が好まれる
可能性があるにも関わらず。

AppleはiPhoneらしさを強要するが、逆にどのプラットフォームでも同じ操作感
であることには、開発者のみならずユーザーにもメリットがある。
0119デフォルトの名無しさん
垢版 |
2019/11/26(火) 01:22:29.32ID:t9NWfcZD
Appleは審査が厳しいが、自社がそのアプリが出てくると(競争に負けて)業績が
落ちそうだと判断するともっともらしい理由を付けて審査を通さなかったり、
長く時間をかけて手間をかけさせたりする可能性がある。PWAだとその心配が無い。
ただし、PWA専用のダウンロードサイトを作ろうとすると、そのサイト自体に
規制がかかったことがあるそうだ。Appleはまるで中国や北朝鮮のようだ。
0120デフォルトの名無しさん
垢版 |
2019/11/26(火) 01:24:58.56ID:t9NWfcZD
>>118
https://blogs.adobe.com/japan/web-the-death-of-the-standalone-app-and-what-comes-next/
1. より一貫したデザインを提供できます。3つの異なるデザインをiOS、Android、
 レスポンシブサイトとそれぞれ用意する代わりに、PWAの場合はすべての環境に
 対応する1つのアプリをデザインします。これはアプリ開発にかかる時間を短縮
 するだけでなく、デザインの一貫性にも繋がります。デザイナーは、1つのガイド
 ライン作成に集中でき、より有意義に時間を使うことができます。

2. 複数チャネルの組み合わせが容易です。ユーザーは、どんなデバイスから
 アクセスしても一貫性のある体験を求めています。あるデバイスで使い始め、
 他のデバイスに切り替えて再開することは自然な動作です。帰宅途中の通勤電車で
 ショッピングカートに目に付いた商品を入れたあと、自宅のPCからきちんと商品を
 確認して購入手続きを完了できるような機能はどうでしょうか?PWAであれば
 最小限の投資で実現できるでしょう。
0122デフォルトの名無しさん
垢版 |
2019/11/27(水) 01:59:18.80ID:T7KqQ5kC
>>121
今までなら独自GUIはAppleの審査に落ちる可能性があったが、PWAなら
自由になる。それでAppleの伝統を超えた使い勝手のGUIシステムを備えた
アプリを提供できれば他のアプリと差別化できる可能性が出てくる。
0123デフォルトの名無しさん
垢版 |
2019/12/06(金) 02:20:17.94ID:ZSKvcFXv
Webアプリの場合、URLのパラメータによって、プレイ中のゲーム画面
にいきなりリンクすることが出来るようになる。これで、ゲーム画面の「シェア」
が出来る。例えば、RPGで経験値、体力、魔力、所持アイテム、地図上の座標、
タワーの階層、的の位置などを全部URLのパラメータに直してしまえば、
そのシーンを他の人にシェアして、そこからプレイし始めてもらえる。これは、
native ゲームにはなかった特徴。blob や base64 による URL 化などを使えば
データをURL化することは難しくはない。URLが長くなりすぎる問題はある
かも知れないが。
0124デフォルトの名無しさん
垢版 |
2019/12/06(金) 02:24:38.19ID:ZSKvcFXv
>>123
RPGなどでセーブデータが大きすぎてURL化に適さない場合は、
サーバー上にシーンを圧縮セーブしておいて、その識別番号をシェアする手もある。
ユーザーが各自で無料ストレージサービスを借りて、そこにセーブしておいて、
それをシェアする手もある。
0125デフォルトの名無しさん
垢版 |
2019/12/06(金) 02:45:16.50ID:ZSKvcFXv
インストール型のゲームだと、URLを書くだけで一瞬で動いている場面を他人が
見ることはできない。しかし、ウェブゲームだとそれが出来る。ただし、
この場合、ゲームサイズを小さく作ることが重要になる。その意味で、
サイズがコンパクトになるwasmと、コンパクトなサイズのゲームライブラリが
重要となる。
0126デフォルトの名無しさん
垢版 |
2019/12/06(金) 02:50:45.17ID:ZSKvcFXv
ゲーム全体のデータが巨大だとしても、1つのシーンを見るために必要なデータは
ごく少ない。その意味で、プログラム部分(コード)部分のサイズさえ小さければ、
ポリゴンやテクスチャやマップのデータは巨大でも良い。大部分のデータは
サーバー上に置いて置けばいいのだから。これで、ゲームシーンを快適に
シェアできるようになる。これが、ブラウザゲームならではの新しい価値。
0127デフォルトの名無しさん
垢版 |
2019/12/06(金) 02:56:52.29ID:ZSKvcFXv
インストール型ゲームでも動いているゲーム画面をシェアすることも不可能ではないが、
それには、同じゲームをインストールすることが前提となる。
一方、ブラウザゲームでは、例えば、2ch/5ch にリンクアドレスのURLを
入れるだけで、一秒後には、そのシーンを見られて、プレイも出来る。
0130デフォルトの名無しさん
垢版 |
2019/12/10(火) 14:13:47.04ID:uv70k2ai
ブラウザの中でのwasmは、現状、ローカルファイルシステムには自由にはアクセス
できないが、その場合、mongoose.exe, Ruby, Python などでローカルサーバー
を起動すれば、ブラウザ内のwasmプログラムから cgi プログラムを起動できるので
ローカルOSのAPIは何でも利用できるようになるので、ローカルファイルシステムにも
自由に読み書きできるようになる。もし、このサーバープログラムが十分に高速なら、
DirectInput などを利用してフォースフィードバック付きのジョイスティックも
wasmゲームから使えるようになる。
0131デフォルトの名無しさん
垢版 |
2019/12/10(火) 14:26:39.38ID:48kVELqA
ローカルサーバーをnode.jsで書くの流行ったな
0132デフォルトの名無しさん
垢版 |
2019/12/10(火) 14:28:32.93ID:uv70k2ai
>>130
ちなみに、mongoose.exe は、BSD/MIT 系ライセンス。
サイズは100MBを超えてしまっているが、Luaを無効にしてソースから
ビルドし直すと、すると、サイズが1MBくらいになる。
0133デフォルトの名無しさん
垢版 |
2019/12/10(火) 14:36:55.20ID:uv70k2ai
mongoose.exe + CGIプログラム を配布すれば、ある種の Java仮想マシンJVMの
代替になる。JavaのSwingでGUIアプリを作る場合も JVM のインストールが必要に
なるが、それが、mongoose.exe + CGI プログラム。しかし、JVMよりサイズが
小さいのでインストールが容易。
0134デフォルトの名無しさん
垢版 |
2019/12/10(火) 16:23:17.02ID:uv70k2ai
>>129
それとは直接関係ないけど、海外のサイトで昨日、目にしたのは、Googleは、
MicrosoftからOSの制御力を奪おう(無くそう)としているという見方。
PWAを発案したのもGoogle。
IntelやMozilla、RedHat、Fastlyも、別方向でwasmを拡大しようとしているので、
恐らく一社がコントロールしようとしてもwasmの勢力拡大は止められない
思われる。PWAに関しては微妙で Appleは渋々対応している感じでは有るが、
対応しないとむしろ不利になると経営判断している可能性もある。
分からないが。
0135デフォルトの名無しさん
垢版 |
2019/12/12(木) 19:22:14.47ID:Z8SHCwDj
5chの広告に表示されている「ビビッドアーミー」などのG123なるものを
やってみたら、少なくともWebGLが、昔のPC-9801の最後期レベルよりも高速な
グラフィックをかけることがはっきり分かった。と言うか恐らく、初期のPlayStation
よりは緻密で速いと思う。

また、Fragment Shader は再帰的関数呼び出しでも何でも書けるようで、
レイトレーシングでも何でも出来ることがわかった。つまり、WebGLを
使ったブラウザゲームは、レイトレーシングやパストレーシングレベルの
3Dグラフィックを使ったものでも何でもできるようだ。

また、Chrome には、FileSystem API だけではなく、native file systema API なる
実験的拡張がある。これはデフォルトでは disable だが、enable にすれば、
本当に native のファイルシステムのディレクトリ内のファイル一覧を取得したり
自由に読み書きできるようになるらしい。

Wasmもある程度速いし、もはや、nativeアプリは要らないかも。
Webアプリは、Win/Mac/Linux/iOS/Android 全てに共通で、
「1バイナリ」で Write Once, Run Anywhere がほぼ実現しているので
ブラウザをOSとみなした場合、WindowsやiOS, Android のどれよりも
シェアが大きい。これは native アプリの時代が終焉するかもしれない。
0136デフォルトの名無しさん
垢版 |
2019/12/12(木) 19:26:35.52ID:Z8SHCwDj
>>135
訂正。
使ったGPUは、エントリーモデルの(ビジネス用の)劇安 Intel CPU に内臓の
Intel HD グラフィックのもの。それでさえ、初期 PlayStation レベルを
超えたグラフィックが描けているようだった。
0137デフォルトの名無しさん
垢版 |
2019/12/13(金) 00:07:05.15ID:wVkcEFxk
PWAは自社に不利になるはずなのに何故、Appleも採用したかについて。
PWAはGoogleが推進しているものだが、Googleは、検索エンジンを
iOSのデフォルト検索エンジンにしてもらうために、毎年Appleに
一兆円を払っている。ところが、このカネの流れのために、
AppleもGoogleの意向を無視できない状況になっているのではないか
と考えられる。
0138デフォルトの名無しさん
垢版 |
2019/12/13(金) 10:10:45.11ID:V90d9jYd
板違い
マ板池
0140デフォルトの名無しさん
垢版 |
2019/12/30(月) 12:16:48.85ID:WAqdspci
登録済でも放置されてるものは消えるのか
胸熱
0141デフォルトの名無しさん
垢版 |
2020/01/05(日) 08:50:18.44ID:FwkgyDD/
ブラウザでゲームのマップ作れて操作するのは見たことあるよ。
もう今ブラウザ主流?
ただいちいちサイトに繋いだりサーバーにアクセスするから普通のアプリよりは不安要素あるけど。セーブもしたりできるしな。
何でブラウザでやるのかがわからない。
0142デフォルトの名無しさん
垢版 |
2020/01/05(日) 16:24:57.29ID:UrHjpLCo
>>141
ある外国の学者が言ったそうだ。
「存在する技術はぎりぎりまで使われる」
と。

典型的な例は、HDDの容量が以前では考えられないほど増大しているのに、テレビ録画など新しい使い方が見出されていつまでたっても不足していること。

ユーザー目線で考えたときのブラウザでやるメリットは、
・インストール作業が要らないこと。もし起動が十分速ければ、次々とゲームを試すことも出来る。
・理論上は、URLに状態やセーブ番号などを含ませておけば、そのURLを掲示板などに張っておくだけでプレイ場面を世界中の人に見て貰えること。
・プログラムがブラウザのサンドボックス内から外に悪さが出来ないので、たとえ野良アプリであってもマシンにあく栄起用を与える可能性が低いこと。
・iOS/Android/Windows/Mac/Linux など全く違うOSでも全く同じ使用感でゲームが出来ること。
・Appleの独自規制に引っかかることもないので開発者の自由な発想のゲームで遊ぶことが出来る。
0143デフォルトの名無しさん
垢版 |
2020/01/05(日) 18:19:27.95ID:UrHjpLCo
https://www.businessinsider.jp/post-187542

*アップルは、国境を超えて表現を規制する力を持っている。

アップルのガイドラインでは、性的な表現について、次のような記載がある。

「Webster辞書で『美的または情緒的な感覚ではなく、性的興奮を引き起こすような、性器または性行為の明確な記述または表示』と定義される、あからさまに性的またはわいせつなコンテンツ」

欧米や日本、イスラム教徒の多い中東など、国、地域ごとに「わいせつ」の考え方には違いがある。

しかし、デベロッパーに対しては、アメリカのアップルが決めたガイドラインが一律に適用されるため、「ローカルルールは存在しない」と言われる。

6〜7年ほど前、ゲームの世界でも、ガラケーからスマホに一気に移行する波が訪れた。そのころには、アップルの基準に合わせるため、露出度の高い女性キャラクターの服装を描き直す作業に追われたという。

ゲーム会社の幹部のひとりは「アップルは、国境を超えて表現を規制する力まで持った。しかし本来は、国や企業がそれぞれの文化や戦略に合わせて考えるべきことなのでは。現状では、毒っけのあるコンテンツはつくれない」と話す。
0144デフォルトの名無しさん
垢版 |
2020/01/07(火) 18:36:15.80ID:f028J8AQ
昔の chip8 という CPU エミュレータが一瞬で起動しちゃう:

https://blog.scottlogic.com/2017/12/13/chip8-emulator-webassembly-rust.html
https://colineberhardt.github.io/wasm-rust-chip8/web/

二番目のリンク先で、start というボタンをマウスでクリック後、wキーを押すとブロック崩しの様なゲームが動き出す。
キーボードのqで左、eで右にラケットが動く。
0145デフォルトの名無しさん
垢版 |
2020/03/11(水) 16:21:40.05ID:QRZvOF73
https://yutakaaoki.github.io/demo1/index.html
MessageBox が出せるようになった。
C++のプログラム中で
nexMessageBox("タイトル文字列","メッセージ文字列", MB_OKCANCEL);
などとすると、ボタンが押されるまでその場で停止する。
JSやブラウザ、Wasmでは、本来、「その場で待機」することは出来ないので、
nwsc の bsync, bwait, bresume 機構を用いている。
0146デフォルトの名無しさん
垢版 |
2020/03/11(水) 16:24:14.20ID:QRZvOF73
>>145
なお、JSとC++の組み合わせる際に、ちょっとした問題があって、今のところ、トータル200個以上のWindowを生成すると異常を来たすので、決して、ダイアログを何度も生成しないでね・・・。
理論上は直せるけれど、まだ直せてない。
0147デフォルトの名無しさん
垢版 |
2020/03/11(水) 19:28:39.62ID:SBKaA+2H
STLが使いたい。
0148デフォルトの名無しさん
垢版 |
2020/03/11(水) 20:30:36.35ID:QRZvOF73
>>147
以下は他のコンパイラを使う場合は関係ない話だけど。
コンテナ類は、C++ nexでも本家C++以上に便利になるように独断と偏見で独自サポートしている。
STLは、templateをかなり深く使用していると思われるので、C++ nex側のそれに追いつけなければ、そのままではSTLのコンパイルは難しい。
なお、今のところtemplateを簡単に使えるようにしたtemplなるものを C++ nexでもサポートしているが、本家C++のtemplateも徐々にサポートしていく予定。
0149デフォルトの名無しさん
垢版 |
2020/03/27(金) 04:03:07.14ID:VaiYZBCN
Wasmアプリは次のようなことで需要がありそうだ:
・nativeアプリの場合、ストレージの容量制限でインストールできない事があるが、
 Wasmならブラウザ内で動くのでその心配は少ない。
・nativeアプリの場合、インストールするのに新しいVersionのOSを要求されること
 があるが、Wasmなら、余り関係ない。
0150デフォルトの名無しさん
垢版 |
2020/03/27(金) 04:06:39.29ID:VaiYZBCN
>>149
nativeアプリの場合、Win7で動いていたものがWin10で動かなかったり、逆に、Win10を要求されたり
する。
Androidアプリの場合も、バージョン○○以上が必要条件などとあったりする。

ところが、Wasmアプリの場合、余りそういうことは無い。
ブラウザのバージョンが有る一定以上のものでありさえすれば、OSの種類やバージョンに関係なく動く可能性が高い。
0151デフォルトの名無しさん
垢版 |
2020/03/27(金) 04:51:51.87ID:VaiYZBCN
アプリストアにはアプリが多すぎて、まみれてしまう。
ウェブアプリなら、検索エンジンからダイレクトに探せるのでアプリストアよりは、まみれる度合いがましになる。
0152デフォルトの名無しさん
垢版 |
2020/03/27(金) 05:08:06.41ID:VaiYZBCN
・WasmやPWAが、TwitterやLineなどでshareし易いことは、
 企業にとってはのどから手が出るくらい価値がある。
 nativeアプリだと気に入ったアプリを友達にシェアしにくいが、
 WasmアプリだとURLだけですぐにシェアできる。これはアプリの普及や
 宣伝にとって意義は大きい。
・PC/Mac/iPhone/Androidで見た目や使い勝手が同じであることは、
 アプリのブランド価値を高める。
 これは、コンビニが全国で同じレイアウトと品揃えであることで
 安心感と利便性を高めることで勝ち残ってきたことと通じるものがある。
0153デフォルトの名無しさん
垢版 |
2020/03/27(金) 05:14:54.39ID:VaiYZBCN
企業にとっては、プラットフォームごとにビルドし直さないでよいことだけでも
価値は大きい。
マルチプラットフォーム対応なのに最終プログラムが1種類だけで済むことは
メンテナンス性は劇的に向上する。
nativeアプリをマルチプラットフォームに対応させる場合、OSごとにビルドされた
最終プログラムのバックアップだけでも慎重を要し、生産性が下がる。
開発時にはいちいち、各プラットフォームごとにビルドする時間と手間、
テストが必要で、その時にトラブルも出易かった。例えば、
新しいバージョンのAndroidが出てきたら、新しいAndroidSDKをインストール
しなくてはならないが、それでツールキット側のバージョンが合わなくてトラブル
が発生し、その解決のために一週間以上も無駄になることもあっただろう。
Wasmなら、最終プログラムは一度ビルドするだけで済むのでそのようなトラブルが
生じないし、テスト工数も激減する。
0155◆QZaw55cn4c
垢版 |
2020/04/13(月) 21:47:32.08ID:fZC6wvDm
>>153
で、ブラウザごとにデバッグするわけですか…
0156デフォルトの名無しさん
垢版 |
2020/04/13(月) 23:46:07.73ID:iwZw4XGM
>>155
HTML5は他企業も含めた共通規格なので、一度決まった仕様は比較的安定して動作するため、ツールキット側が一度デバッグしてあれば、そので動くアプリは1つのブラウザで動作チェックしさえすれば、ツールキットがサポートしているどのブラウザでも動作し易い。
0157デフォルトの名無しさん
垢版 |
2020/04/14(火) 00:37:46.92ID:ESEtnroG
HTML5はGoogleの規格なので、Googleの都合でいかようにも変わると思います。
0158デフォルトの名無しさん
垢版 |
2020/04/14(火) 01:07:56.72ID:tGjJf6XN
>>157
確かにFireFoxのMozillaもGoogle傘下にあるようなものだし。
でも、SafariやEdgeもあるので、今まで動いていた古い仕様が動かなくなる可能性は割と低そうという希望的観測がある。
0159デフォルトの名無しさん
垢版 |
2020/04/14(火) 01:12:20.23ID:tGjJf6XN
でも、実行プログラムがindex.htmlとmain.wasmなどの1種類で、
プラットフォームごとにビルドし直さなくて良いというのは安心感はある。
0160◆QZaw55cn4c
垢版 |
2020/04/14(火) 19:22:31.95ID:42R+WK0w
>>156
write once, run anywhere といわれていた Java JVM も、蓋を開けてみれば write once, debug anywhere となってしまった現実をご存知ですか?
0161◆QZaw55cn4c
垢版 |
2020/04/14(火) 19:23:13.73ID:42R+WK0w
>>159
でもデバッグは各ブラウザ毎にしないといけませんね…
0162デフォルトの名無しさん
垢版 |
2020/04/15(水) 14:42:27.93ID:mfdeAm0A
>>161
やはり、「XX OS対応」と書くためには、XX OSでテストする必要はあるでしょう。
ただ、ビルド回数が少なくて済むことは時間の節約になりますし、
他の事で手一杯の忙しいときに、あるプラットフォーム向けのビルドだけ
(起きるはずも無い)エラーが起きてその対応に追われる心配も無いです。
0163デフォルトの名無しさん
垢版 |
2020/04/15(水) 14:46:20.72ID:mfdeAm0A
>>162
1. Win/Android/iOS/Mac/Linuxで最終テストは必要。
2. しかし、ソース修正後、ビルドは一度だけでよい。
3. 2.により、仕上げの段階で1箇所修正するだけで5つのプラットフォームごとに
 5回ビルドして5回テストする、という効率の悪い事態は起きない。
0164デフォルトの名無しさん
垢版 |
2020/05/25(月) 03:25:23.82ID:Q3BVyDlx
あがれ
0165デフォルトの名無しさん
垢版 |
2020/05/28(木) 17:15:51.05ID:1yt8qEqJ
懸念事項だったローカルファイルシステムへのファイル保存について、
今後の Edge Browser では何か進展が有るらしい。

Native file system access
Up until now websites were not allowed to save files in a specific location on the user device.
This meant that online photo editors required users to upload the photo they wanted to edit and then download it to their device, while a native one would have just given the option to replace the existing one.
Starting from Edge 86 (version 83 is the latest one at the time of writing) developers will be able to replace all files the user selects in a session, thus enabling productivity apps on the web to even more useful.
0166デフォルトの名無しさん
垢版 |
2020/05/28(木) 17:47:36.62ID:1yt8qEqJ
>>165
どうやら、PWAアプリを起動時に指定したファイル群に、ユーザーにファイルダイアログで毎回選択させること無くいつでもアプリがプログラム的に書きこめるようになるらしい。
0167デフォルトの名無しさん
垢版 |
2020/07/14(火) 00:20:51.75ID:cduOb3hQ
age
0168デフォルトの名無しさん
垢版 |
2021/03/11(木) 04:16:55.67ID:+SL5WZRG
wasmからGPU使うにはWebGL呼び出しになりますか?
0169デフォルトの名無しさん
垢版 |
2021/03/20(土) 23:25:10.94ID:j+8OkN/E
>>168
WebGPU は使ったことは無いが、WebGL 以外に WebGPU もある。
Wasmはそれ自体では副作用や入出力は行えないので、やりたいときはJSを
使うことになるので、GPUを使いたい場合は、JSでGPUを使う方法を調べる
ことになる。Wasmは、EM_ASM 文などの中に書いた JS コードを呼び出す
ことで副作用や入出力を行う。
0171デフォルトの名無しさん
垢版 |
2021/09/14(火) 18:18:01.42ID:Wng5bteL
age
0172デフォルトの名無しさん
垢版 |
2022/02/04(金) 02:46:38.22ID:tMDf8XuC
age
0173デフォルトの名無しさん
垢版 |
2022/06/21(火) 12:20:06.79ID:TERGIQkG
WebAssemblyを普及させたい

☆WebAssembly総合
・Wasmer - The Universal WebAssembly Runtime
https://wasmer.io/
-> WASI(WebAssembly System Interface)とEmscriptenに準拠したWASMを実行できるランタイム

・WAPM - WebAssembly Package Manager
https://wapm.io/
-> WebAssembly製ツール/ライブラリのパッケージマネージャー


☆C/C++
・wasi-sdk - WASI-enabled WebAssembly C/C++ toolchain
https://github.com/WebAssembly/wasi-sdk
-> WebAssemblyのLLVM、clangコンパイルサポート
Emscriptenとは異なりWASMバイナリのみ生成する


☆Rust
・wasm-pack - your favorite rust -> wasm workflow tool!
https://github.com/rustwasm/wasm-pack
-> WebAssemblyのrustcコンパイルサポート

Yew - Rust / Wasm framework for building client web apps
https://yew.rs/ja/
-> WebAssembly によってマルチスレッドな Web アプリのフロントエンドを作ることができる、モダンな Rust のフレームワーク
0177デフォルトの名無しさん
垢版 |
2022/06/23(木) 21:37:11.74ID:fwy13iz2
WebAssembly Powered Augmented Reality Sudoku

This project makes use of the WebAssembly build of OpenCV (a C++ computer vision library), Tensorflow (a machine learning library) and a solver written in Rust. It neatly demonstrates how WebAssembly allows you to write performance-critical web-based applications in a wide range of languages.

https://github.com/ColinEberhardt/wasm-sudoku-solver
Solverhttps://raw.githubusercontent.com/ColinEberhardt/wasm-sudoku-solver/master/sudoku-solver.gif
0180デフォルトの名無しさん
垢版 |
2022/07/03(日) 14:38:54.59ID:y5Z2gZOd
WASMのビルド作業はやたら面倒臭いが、何かビルド用ツールが出てるのかな
Linux環境じゃないとconfigureが生成できないから、プロジェクトのビルドなんてやってられないだろ
ところでWASMに64bitメモリが実装されれば可能性が大きく広がる予感
0181デフォルトの名無しさん
垢版 |
2022/07/03(日) 15:41:32.49ID:2unnqsUi
>>180
Linuxの話題は、あわしろを召喚しちまうから、やめとけ。
0182デフォルトの名無しさん
垢版 |
2022/07/03(日) 16:58:00.23ID:y5Z2gZOd
あわしろって誰?w
WASMのroadmapを見ると、Firefoxが一番進んでるみたいだ
何だかんだFirefoxは開発者向けとしては最先端を走り続けているんだな
0183デフォルトの名無しさん
垢版 |
2022/07/03(日) 17:11:46.18ID:6NN4RBvO
Linuxの掟とか唱えてる人じゃなかったっけ?
0184デフォルトの名無しさん
垢版 |
2022/07/03(日) 20:06:52.80ID:SwvkPEGK
age
0188デフォルトの名無しさん
垢版 |
2022/07/04(月) 02:35:19.54ID:hEC4WOUu
>>177
えぐ
0189デフォルトの名無しさん
垢版 |
2022/07/04(月) 07:02:36.02ID:E8MuawGm
>>173
>wasi-sdk
GLESやSDL2の対応はどうなんだろ
誰かちゃちゃっと準公式サイトを作ってくれないかなw
0190デフォルトの名無しさん
垢版 |
2022/07/05(火) 08:37:06.79ID:HXH2KDmV
WASMではまだ並列処理が弱いのが悲しい所だな
Web Worker使えるけど、window配下オブジェクトが共有できないからな
0192デフォルトの名無しさん
垢版 |
2022/08/27(土) 20:19:41.17ID:XRehdZ+z
wasm
0193デフォルトの名無しさん
垢版 |
2022/09/08(木) 11:41:23.34ID:KAp1CvD8
現在、Rubykaigi で、Ruby の Wasm 対応についての話しになっているらしい。
Ruby3.2から正式にブラウザでRubyが使えるようになる予定なので、
Rubyのインストールが難しい初心者にとっても楽になるとの事。
また、irb(インタラクティブRuby?)がブラウザでも動いて、対話的に計算
できるらしい。
Rubykaigiは、9/8から9/10の三日間の予定らしい。
0194デフォルトの名無しさん
垢版 |
2022/09/08(木) 14:13:55.50ID:2tFquaAS
Rubyは、おわこん
とKENYAも言っている
0195デフォルトの名無しさん
垢版 |
2022/09/08(木) 21:16:10.23ID:EF/qt7ve
Ruby on Rails 7 で、Rubyの検索数が増えているらしい。
新しい変更があると、検索数が増えるみたい

JavaScript(JS), Python の検索数が多いのは、素人が多く、難しいからかも。
逆に、Rubyの検索数が増えないのは、プロが多く、簡単だからかも

Rails 7では、Hotwire などの新機能が出たので、プロも検索したのかも

米国年収では、JSが6万ドル、Railsが9万ドルと、かなりの差がある。
素人とプロの開発者の違いかも

JSは素人や個人開発が多く、
Railsは小企業から大企業まで、プロが多いのかも
0196デフォルトの名無しさん
垢版 |
2022/09/09(金) 01:00:16.49ID:NUzzWOKg
rubyのwasmに需要があるかどうかは置いといて、新技術を積極的に取り入れる姿勢は評価できる
これでもっとwasmが普及するといいな
0197デフォルトの名無しさん
垢版 |
2022/09/09(金) 01:26:40.60ID:OjVwznsu
ブラウザ上でWasmを使うサービスやアプリならばRuby利用は遅くて重くて大きくて不利だね
だからどうしてもRubyをブラウザ上で動かしたい遊び目的だけかな
Wasm使ってプログラミングしたいならC++かRustのどちらか
0198デフォルトの名無しさん
垢版 |
2022/09/09(金) 02:28:27.53ID:n8dQNxep
Ruby は遅くても、可読性が高くバグらないから、高品質でプログラミングしやすい。
C++, Rust などは難しさが桁違い

ビジネスでは、Rubyよりもかなり遅れる。
他社に市場シェアを取られてしまう

例えば、SASS がそう。
Rubyで作られて、C++ で作られるまで数年以上遅れた。
次に、C++で保守出来なくなって、Dart へ移った

Rubyは可読性が高いから保守できるが、
他の言語は無理で、最終的に放置されるだけ
0199デフォルトの名無しさん
垢版 |
2022/09/14(水) 08:03:14.57ID:ZrnGb3cN
>>198
ところがRustはRubyに似ていて可読性が高いよ
RustはRubyとクロージャ引数の記述方法も |x| で同じだし
RustはRubyと同じようにイテレーターのメソッドチェーンを多用できるし
もちろん遅延評価されるし
Rubyよりも改善されてる点も多いからRustはRubyよりも可読性が高いよ
0201デフォルトの名無しさん
垢版 |
2022/09/26(月) 13:14:00.63ID:fgpUNuss
>>200
Rustは可読性の高さで気に入っている
ほとんどの言語と比べてイーブンか上

Wasm記述で現実的な言語の中だと更に
可読性の低いC++は論外だから
調査研究でもRustが最も使われている
0202デフォルトの名無しさん
垢版 |
2022/09/26(月) 14:28:49.61ID:TCGzsvbI
可読性という人によって解釈が異なる単語じゃなくてどういう要素が可読性を高めている/低めているか説明して欲しいな
0203デフォルトの名無しさん
垢版 |
2022/09/27(火) 16:07:51.55ID:vP3LfdbR
この板のRustのアンチスレにも、Rustの分かりにくさについてのサンプルコード
があがってる。
0206デフォルトの名無しさん
垢版 |
2022/09/28(水) 00:49:27.76ID:JQpGo85s
>>205
あなたにとってはあらゆるRustコードは綺麗には見えないということですね
好みの問題では?
0209デフォルトの名無しさん
垢版 |
2022/10/02(日) 18:22:14.52ID:fl0K/H95
Rustは抽象化されたプログラミングによって分かりやすく短く書けるね
タイプ数を少なく短く書けるという意味ではなく
0214デフォルトの名無しさん
垢版 |
2022/10/30(日) 16:23:33.75ID:tfYpbifo
age
0215デフォルトの名無しさん
垢版 |
2022/11/08(火) 18:21:56.35ID:Rs+gm7Tf
age
0216デフォルトの名無しさん
垢版 |
2023/01/06(金) 22:20:11.40ID:+u5r9Ozg
Rubyにおけるwasmランタイム実装のCRuby、バイナリサイズはstdlib込みだと25MB、brotli圧縮かけて5.0MBだってさ
微妙だけどキャッシュ込みなら5.0MBはギリ許せるのか、、?
https://logmi.jp/tech/articles/327679
0218デフォルトの名無しさん
垢版 |
2023/01/07(土) 16:34:06.31ID:St5PAkDm
>>217
だよねぇ、、うーん
0220デフォルトの名無しさん
垢版 |
2023/02/12(日) 13:09:16.81ID:HnI2C6C6
>>219
これが標準化仕様になるんかね
レスを投稿する


ニューススポーツなんでも実況