- 【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
37 :デフォルトの名無しさん[sage]:2016/10/01(土) 05:36:10.17 ID:PtIPW4Qc - 無難に済ますなら呼び出されたC++側のコード(ホストからluaのステートにバインドされた関数)で
C++側から通知か何かがあるかどうかを調べたりするのかな どうしようもなければlua_sethookで登録したハンドラで一定行実行される度にフラグを見て 最低限の処理をして離脱した後、改めてlua側で何かをするとかしかない
|
- 【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
39 :デフォルトの名無しさん[sage]:2016/10/01(土) 07:36:37.31 ID:PtIPW4Qc - 結局は原則としてlua側の方から結果が存在するかどうか調べにいかなきゃならないね
|
- 【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
41 :デフォルトの名無しさん[sage]:2016/10/01(土) 08:55:44.45 ID:PtIPW4Qc - >>40
>>11みたいに全ステート共通のユーザデータに排他管理されたデータ積んで イベント発生毎にスレッドプールからスレッド取ってきて独立したハンドラ専用のステートで そのイベント専用のスクリプトの実行まですればイベントドリブンは可能 そこまで作りこむとスレッドプールの空きに合わせて投機実行してシナリオデータが間接参照してる 他の細々としたファイルの先読みもそんなに大変なことでもなくなる どっちのレベルに合わせればいいのかわかんね
|
- 【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
43 :デフォルトの名無しさん[sage]:2016/10/01(土) 11:29:58.38 ID:PtIPW4Qc - ttp://fast-uploader.com/file/7030844243482/
ChakraCoreのソースコードを参考にC++/CLIでJSRTを使用 バインドした関数の中でクロージャを確保しても消えない ある関数の中で作業用の変数をアロケートしてそこでGCしても変数消えない、 スコープ抜けた後のGCできっちり消える もちろんIEと同じJavaScriptだからMathとかもIEとかと全く同じ、バインドしてるのは・・・ 解析した時のテストコードだからちょっと待ってね(バインダは絶対晒さないよ) それとも何かバインドして同時に16スレッド動く様にしようか?
|
- 【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
44 :デフォルトの名無しさん[sage]:2016/10/01(土) 11:39:15.57 ID:PtIPW4Qc - myValue += 2;
var a = new TestUnman( 10 ); a.Method( 10 ); var b = new TestUnman( 1 ); b.Method( 100 ); var result = a.Value + myValue; Msg( a.Value + "+" + myValue ); Msg( b.Value + "+" + myValue ); result; TestUmanのValueはただの変数のget/setしかない、Msg()でメッセージボックス google v8 と spidermonkey との速度差、循環参照でのGCの挙動の違いとかをテストしてた 使うDLL見れば怪しい事してないのはわかる筈、紛れも無くJSRT、珍しいでしょ、解析がんばった Mathとかで比較しても挙動は間違いなくIE
|
- 【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
46 :デフォルトの名無しさん[sage]:2016/10/01(土) 14:18:37.12 ID:PtIPW4Qc - だから絶対やらんて、3時間に設定したからもうすぐロダから消える
何故煽られるのか考えてみた lua_sethookでcountフックして終了フラグ見たらthrowみたいな強制的なWin32スレッドの終了ではなく メモリリークしないluaスクリプトの中断とかですらマイナーな手法なのかな? 俺は行と行の間で止まってる事が約束されてるんだから何かの要求があったらyieldの流れに 干渉するような変更とか平気でやってたんだけど、その辺の温度差なのかな?
|
- 【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
49 :デフォルトの名無しさん[sage]:2016/10/01(土) 15:22:20.28 ID:PtIPW4Qc - >>47ひでぇ; いや、俺が釣り針に食いついた自爆かな?
いつもはあちこちROMだけど、非同期周りで頭がうにってるとこに同じネタが来てたからつい・・・ >>48使うの自分だけならいいけど「無限ループ解除できないの?」の対応めんどくさい それにasもv8もJSRTも外部からの停止メソッド当然の様に積んでるし luaでも出来るってわかっちゃったら俺の中では当然実装しちゃう 置き土産、非同期でReadFileしてもキャッシュにあると即リザルト確定、そこそこ頭いいのかと思いきゃ ヘッドの位置とか取得できないらしくて単純な判定しかしてない、ようするに自分でスレッド作って そっちでブロッキングReadFileしてるのと殆ど変わらない、だから>>11みたいになる しかもReadFileはハイブリッドカーネル内部ではなくkernel32.dllがユーザ空間にWin32スレッドを生成、 だから時間が掛かるでかい読み込みが終わる前にプロセス(デバッグ含む)毎終了すると何食わぬ顔で終了 しかしReadFile直後にLANケーブル引っこ抜いてCancelIoしたりしてもReadFileはウェイトのまま ここでCancelIoしてもGetOverlappedResultしなきゃとかスクリプト終了で全ての待ち合わせが終わる前に 「今のエラーどこだっけ?」とか即再実行したりすると稀に起きる再現性のない原因不明のメモリ破壊 原因わかって「もうこれ全部自分で管理した方がトラブル少なそう」で今に至る、もう手の内は出さない
|
- 【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
51 :デフォルトの名無しさん[sage]:2016/10/01(土) 15:53:18.05 ID:PtIPW4Qc - >>50
一番簡単な例として挙げただけでcountフックで止まってる間は再開までに辻褄があってれば 変数の変更から状態遷移の誘発まで色々できるよ
|
- 【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
53 :デフォルトの名無しさん[sage]:2016/10/01(土) 16:13:21.80 ID:PtIPW4Qc - たしかにボタン1発で終了は意味ないっちゃー意味ないね、忘れてくれていいよ
とりあえず、フックのハンドラに突入したら離脱するまでの間にスタックがluaスクリプトの実行で 動くことはないからAPI全部呼び出し放題だから知らなかった人は遊んでみると面白いかも
|
- 【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
54 :デフォルトの名無しさん[sage]:2016/10/01(土) 16:40:57.34 ID:PtIPW4Qc - 連投すまん、なんかわかった、俺じゃなくてスクリプト作成者が、なのね
俺は中身知ってるからスクリプトで苦労なんて殆どしないし VSのデバッグで動かすから無限ループしようと暴れだそうとShift+F5だから何の事だろって思った 別に俺はめんどくさくない、スクリプト作成者が後で強制終了しまくってイラついて 俺んとこに来ようと知ったこっちゃあああああいや、ごめんなさい、来ないで下ちい 開始時に lua_sethook( pluastate, luahookCallback, LUA_MASKCOUNT, APP_LUA_SETHOOK_MASKCOUNT ); どっかに static void luahookCallback( lua_State * const pluastate, lua_Debug * const pluadebug ) { if( s_bRequestedTerminating ) { luaL_error( pluastate, CStringA( "ほげえええええええええええええ" ) ); } } UIのスレッドや他のスレッドが止まれー云うたらvolatileなs_bRequestedTerminatingいぢる、たったこれだけ で、面倒な事言われたり聞かれたりしそうだから言わなかったけど lua_call動いてもカウント継続するから値やホストやスクリプトや状況によってはスタック溢れる goto onならぬ割り込み起動みたいな直接的な真似は流石にやめといた方がいいと思う
|
- 【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
57 :デフォルトの名無しさん[sage]:2016/10/01(土) 18:57:18.74 ID:PtIPW4Qc - なきゃないで自分で追加してたとこだけどね
読んで参考にしたのはChakraCoreだけどあれが使ってたのは最初から窓に入ってるjsrt.dll あのexeがめっちゃ小さかったのはexeにエンジンくっつける必要がないから JSRTをv8猿と比べた感想は使い手にとっては微妙、作り手(ChakraCoreの読み手?)にとっては わかるまでが大変、わかるとめっちゃ使いやすいけど無駄に感じるとこが多すぎ そりゃv8に勝てずにオプソにしてブン投げてエッジモードJSRT開発にいくわぁなぁ 思想がわかって作りやすいから個人的には好きだけど
|