1 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 18:23:46.74 ID:t8yALPnl.net] LuaやSquirrelやAngelScriptなどアプリケーションへの組み込み用途で 使われるプログラミング言語についてのスレッドです Luaに限定してるわけではないのでレスする場合は言語を明記してください まとめwiki(なにか質問する前に必ずみること!) wikiwiki.jp/lua/ その他の参考URLは>2から ■前スレ 【Lua】組み込み系言語総合 その6【Squirrel】 echo.2ch.net/test/read.cgi/tech/1362895832/ ■過去スレ その5 toro.2ch.net/test/read.cgi/tech/1321063450/ その4 hibari.2ch.net/test/read.cgi/tech/1301414458/ その3 hibari.2ch.net/test/read.cgi/tech/1272643397/ その2 pc12.2ch.net/test/read.cgi/tech/1243210301/ その1 pc12.2ch.net/test/read.cgi/tech/1205208141/ プログラミング言語 Lua その3 pc11.2ch.net/test/read.cgi/tech/1160799232/
11 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 00:35:49.15 ID:yOlfPxWj.net] タスクの定義がなんだかよーわからへんけど、1つのスレッドで読み込み要求を発行した後、 そのままそのスレッドで円周率ん万桁とか計算したりした後、 読み込みが終わったかどうかを確認した上で読み込んだ内容をほげほげしたい、と仮定しよう Win32だったら::ReadFile(::ReadFileEx)はプログラマがマルチスレッドを意識する事なく非同期読み書きが可能 キーワードはReadFile、GetOverlappedResult、 あとCancelIo(一度に沢山読み込むのを例外とかでキャンセルしたりする時に重要、 キャンセルしたら即全部止まる訳じゃないからGetOverlappedResultで待ち合わせないとダメよ) Linuxの類ならスレッドなりプロセスのフォークなりして最初に読み込んで 単純にLuaスクリプトが追いついたらWait何とかみたいな関数バインドして待たせたらどうだろうか で、どうしてもLuaが主導で要求を発行した上で自前の他のスレッドでやりたいってんなら Luaにクリティカルセクションか非同期読み込みに使ったイベントへのアクセス手段を ホスト(Luaスクリプトを使う側から見た内部)で存続から何から何まで管理して ロック待ち、ロック開放、イベントシグナル変更、シグナル待ち まで提供しとけば手っ取り早くできなくはない ただしマルチスレッドプログラミングの注意点をLuaでも守らなきゃならなくなる 最後は>>9 の手段についてだけど、これが無難と言えば無難だけど、 通知を待つ手段をコルーチンの類にすると、ちょいと突っ込んだ事を始めるとすぐに限界にぶちあたる筈 どうせ読み込みを開始して必要な処理が終わったらコルーチンか終了フラグをポーリングするんだろうから いっその事ブロッキングしちゃった方がいいんじゃないかと思わなくもない この時の注意点はホストからの終了要求も取りこぼさない様に2つ(複数)のハンドルをウェイトする事
12 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 06:29:58.49 ID:Nip8sf3s.net] Luaに足りない機能が欲しいときはJavaScriptを参考にするといい この2つはスクリプトエンジン部分が非常によく似ている 非同期処理が欲しいなら、Promiseのように処理完了でコールバックする形式が良い 実装は、非同期I/Oなりスレッドプールなりでご自由に また、Lua自体を並列実行したい場合は Web Worker が参考になる 新しいStateで独立したグローバル環境を用意し、引数/返値のみマーシャリングする ホスト側のマルチスレッドを公開する >>11 の方法は間違いで、GCが破綻する
13 名前:デフォルトの名無しさん [2016/09/28(水) 06:47:31.69 ID:hiAJ49Og.net] マルチスレッドを公開する方法はluaのスタックが壊れるよな
14 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 11:28:17.80 ID:yOlfPxWj.net] もちろんlua_newstate lua_newthreadは必須
15 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 11:31:47.14 ID:RDlboUCA.net] luaもes6みたいにクラス構文追加すればいいのに typescriptを改造してtypelua作れないだろうか
16 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 11:33:06.02 ID:yOlfPxWj.net] てかggればQiita辺りがすぐ引っかかる筈 それと外部からの正常な中断(中断ボタンとか)はデバッグ命令かなんかで1000命令に 1回フラグ見てフラグが立ってたらスレッドの終了シーケンスに移行みたいな乱暴な事をしてる フラグ立ててイベントをシグナル化、Luaのスクリプトから何かをウェイトする時は そのイベントとその資源の両方をWaitForMultipleObjectsで待ってシグナル化原因を必ず判定
17 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 11:36:10.73 ID:RDlboUCA.net] typescriptというよりbabelか 型があると組み込みとかで面倒な事になりそうだし
18 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 12:35:10.14 ID:yOlfPxWj.net] メシ前で言葉足らずだったすまぬ 何から何まで直接APIを生で渡してそのままstate切り替えずにマルチスレッドでGoって話じゃない lua内の変数の直接の共有はもちろんできないからグローバルでホストのユーザデータ持たせて そこに固定で配列の排他領域持つなりstd::deque<適当>でメッセージポンプなりしなきゃダメ で、何故WaitForMultipleObjectsかってーと、極端な話最初に実行し始めたluaのスレッドが 別スレッド用のスクリプトを起動してスレッドが動的に生成されて全部無限ループに陥ったりしたのを 止められるように〜とWin32でスレッドをabortしたりすると、実は無限ループじゃなかった時に 使ってたり待ってたりした資源次第でレアなLastErrorや例外になったりして異常なのか正常なのかわからない luaは俺の知る限り外部からのスレッドセーフな強制中断のメソッドは持ち合わせてないし google v8なんかも2〜3年位前?のI/Fががらりと変わった時に追加された中断メソッドで ようやく対応ってくらいだからluaにそれを求めるのは酷かも知れない だから自分で強制中断の手段をlua_sethookでも何でも使って準備しておくのが吉(異論は認める)
19 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 13:08:14.98 ID:Nip8sf3s.net] >>15 https://github.com/andremm/typedlua LuaJITのffi宣言は型があるけどLuaへは伝搬しないんだっけか >>18 もう少し空気を読めるようになろうね
20 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 13:27:05.51 ID:yOlfPxWj.net] CAsyncFile::~CAsyncFile( void ) { m_bCancel = true; if( ( !( m_ctxlist.empty() ) ) || ( 0 < m_uPendingCount ) ) { m_file.AsyncCancelIo(); } bool bEnd = false; while( ( !bEnd ) && ( !( m_ctxlist.empty() ) ) ) { _SAsyncFileHeapContext & ctx = m_ctxlist.front(); if( !( ctx.heap.bPending ) ) { m_pfilelist->_SubUsingSize( ctx.heap.uHeapSize ); m_ctxlist.pop_front(); } else { bEnd = true; } } } 身バレしそうだからデストラクタしか晒さないけど丁度こういうの作ってたからさ FILE_FLAG_OVERLAPPEDはマルチスレッドの正常終了シーケンス辿れるくらいじゃないと使いこなせない その辺管理できないと要求発行したままスクリプト終了やどっかでエラーが起きた時に 更に追い討ちでアクセス違反の類のエラー起こす
21 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 21:14:26.38 ID:E/gCU/1d.net] 「スレッドではありません。コルーチンです」とか 「オブジェクトではありません。連想配列です」とかはっきり言うべきなんよ そうしないと「スレッドのくせにこんなこともできないのか」 「オブジェクトのくせに以下同文」ってなる
22 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 23:59:19.59 ID:v1ba5adm.net] >>21 コルーチンはあくまで言語の遷移の構造を指す用語(サブルーチンと対になる用語)だから、実行の主体を示すのは「スレッド」で正しいぞ
23 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 06:26:28.32 ID:wi991s1d.net] >>22 それはつまり正しい用語を使った作者は正しくて誤読した読者が悪いってことか でも正しい奴も悪い奴も全員にメリットのある方法ってないのかな
24 名前:デフォルトの名無しさん [2016/09/29(木) 06:40:04.23 ID:EoqEFEeY.net] そもそも誤読するやついるのか?
25 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 06:46:03.64 ID:y8+pYy20.net] 「オブジェクト」については流石に見解が一致しないだろうから 違う用語 or 意図の説明が欲しいな
26 名前:デフォルトの名無しさん [2016/09/29(木) 06:59:50.06 ID:EoqEFEeY.net] ん?Javascriptのオブジェクトも許せない人?
27 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 07:51:10.72 ID:a430Zm1B.net] この流れは俺が悪いのかな? 目的はある意味投機実行ならぬ投機読み込みだよね? でもって読み込みが終わったらコルーチン遷移だろうと完了待ちブロッキングの関数バインドだろうと 他のWin32のスレッドか完全な別ステート(コンテキスト)のLuaスクリプトでReadFileだろうと ReadFileExのコールバックルーチンを使おうと必ず全く別のWin32スレッドが必要になる筈なんだけど いやむしろコルーチンで全部済む方法があったら是非教えてくだちい(皮肉じゃないよ、結構必死) ちな俺が作ってたのはシナリオインタープリタに例えると、今実行中のステートとは 完全に独立した複数のステートで選択肢の1つ先の全選択肢を入出力ダミーにして投機実行して 全部DISCARDABLEなグローバルヒープに持っとく為に複数ファイルをグローバルなユーザデータの m_ctxlistに放り込んでFILE_FLAG_OVERLAPPEDで勝手に全部読み込みにいくって感じの代物 デストラクタでGetOverlappedResultできないのは選択肢決定が早かった時にそこで待っちゃうと 本来の読み込み要求(これも排他を待たなきゃいけない)と重なって更に待たされる可能性があるから でもってどんなエラーが起きてもおいそれとOVERLAPPED構造体は破棄しちゃいけない 最悪メモリリークを選んで他のヒープの開放にいかなきゃいけない だって、開放したらしたでアクセス違反で他の後始末する前に即ぶっ飛ぶのが目に見えてんだから 単純な決め打ちの非同期入出力なら何とか簡単にできるかも知れんけど、 突っ込んだ事しようとすると頭うにる
28 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 08:07:35.79 ID:y8+pYy20.net] >>26 いや、連想配列とオブジェクトは何が異なるのか?という意味 おそらくオブジェクトは連想配列+αなんだろうけど 説明しろと言われたら、自分はハッキリ説明できる自信が無い
29 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 10:10:01.10 ID:AXFlgWC+.net] OSレベルのスレッド 言語レベルのスレッド 区別してもらえると助かります
30 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 14:17:18.55 ID:a430Zm1B.net] >>27 はWin32スレッド以外は”コルーチン””別ステートのLuaスクリプト”としか言ってないんだけど これでわからないなら非同期は諦めた方がいいかも知れない ReadFileExのイベントハンドラでやれば良さそうとか考えそうだけど、 スレッドID取得するとシステムの別スレッドだからそこからLuaの何かいじりにいくとスタックぶっ壊すよ
31 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 08:27:54.40 ID:aDhSErqk.net] >>27 管理主体はシステム側がもって、 他からは読み込んだものをメモリー経由でのみアクセスするようにして、 luaからは弱参照する仕組み作って参照する形で全く問題無いような Luaで扱えるレベルのシステムを必要以上に難しく作る意味は無い
32 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 11:13:49.15 ID:j0K6lQ2j.net] JSなら、メインスレッド以外はサーバーにあってメモリーすらアクセスできない事も多い スタックが壊れるとかいうならスタックにアクセスしなければいいだけなんだよな
33 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 11:40:47.98 ID:LMNz6D7V.net] >>32 GC中だと何も触れないからLuaスタック以外へのアクセスでも怖いよ lua_lock / lua_unlock までカスタマイズする気なら、その限りではないが
34 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 13:28:37.87 ID:j0K6lQ2j.net] Luaスタック以外って C++の変数かな まあそうだねC++は怖いね
35 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 16:24:15.30 ID:aFh0nkO3.net] >>31 そうだよ、結局はシステム側が管理しなきゃならないと思う、それで全部解決する OVERLAPPEDなReadFileとGetOverlappedResultの発行をバインドするだけという 最も単純で最も無駄な方法であってもそれが必要になるという話 リモートのファイルにReadFile発行した後LANケーブル引っこ抜いて スクリプト中断なりエラーなり発生させるとわかる
36 名前:デフォルトの名無しさん mailto:sage [2016/09/30(金) 18:18:42.06 ID:j0K6lQ2j.net] バインドという単語は公式なマニュアルでは見たことがないので意味が曖昧だが LuaがC++を呼び出すことしか想定していない気がする 逆にC++がLuaを呼び出す必要がある場合に色々破綻する気がする
37 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 05:36:10.17 ID:PtIPW4Qc.net] 無難に済ますなら呼び出されたC++側のコード(ホストからluaのステートにバインドされた関数)で C++側から通知か何かがあるかどうかを調べたりするのかな どうしようもなければlua_sethookで登録したハンドラで一定行実行される度にフラグを見て 最低限の処理をして離脱した後、改めてlua側で何かをするとかしかない
38 名前:デフォルトの名無しさん [2016/10/01(土) 06:33:04.10 ID:cvsJ/xEf.net] メッセージキュー作ってlua側から呼んでコールバック実行すればいい
39 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 07:36:37.31 ID:PtIPW4Qc.net] 結局は原則としてlua側の方から結果が存在するかどうか調べにいかなきゃならないね
40 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 08:31:36.35 ID:M5ncT/Oi.net] >>39 それJavaScriptで同じこと言えるの?
41 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 08:55:44.45 ID:PtIPW4Qc.net] >>40 >>11 みたいに全ステート共通のユーザデータに排他管理されたデータ積んで イベント発生毎にスレッドプールからスレッド取ってきて独立したハンドラ専用のステートで そのイベント専用のスクリプトの実行まですればイベントドリブンは可能 そこまで作りこむとスレッドプールの空きに合わせて投機実行してシナリオデータが間接参照してる 他の細々としたファイルの先読みもそんなに大変なことでもなくなる どっちのレベルに合わせればいいのかわかんね
42 名前:デフォルトの名無しさん [2016/10/01(土) 10:40:59.92 ID:cvsJ/xEf.net] >>41 色々知識足りてないね。勉強したら?
43 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 11:29:58.38 ID:PtIPW4Qc.net] ttp://fast-uploader.com/file/7030844243482/ ChakraCoreのソースコードを参考にC++/CLIでJSRTを使用 バインドした関数の中でクロージャを確保しても消えない ある関数の中で作業用の変数をアロケートしてそこでGCしても変数消えない、 スコープ抜けた後のGCできっちり消える もちろんIEと同じJavaScriptだからMathとかもIEとかと全く同じ、バインドしてるのは・・・ 解析した時のテストコードだからちょっと待ってね(バインダは絶対晒さないよ) それとも何かバインドして同時に16スレッド動く様にしようか?
44 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 11:39:15.57 ID:PtIPW4Qc.net] 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
45 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 13:38:37.94 ID:KgMKfA8p.net] Mathてビルトインのクラスね。 Window DOM以外は一通り使えるんだな。 しかもIE入ってればいいのか・・・検索しても例は少ない。 これはバインダー欲しいぞ。
46 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 14:18:37.12 ID:PtIPW4Qc.net] だから絶対やらんて、3時間に設定したからもうすぐロダから消える 何故煽られるのか考えてみた lua_sethookでcountフックして終了フラグ見たらthrowみたいな強制的なWin32スレッドの終了ではなく メモリリークしないluaスクリプトの中断とかですらマイナーな手法なのかな? 俺は行と行の間で止まってる事が約束されてるんだから何かの要求があったらyieldの流れに 干渉するような変更とか平気でやってたんだけど、その辺の温度差なのかな?
47 名前:デフォルトの名無しさん [2016/10/01(土) 14:38:35.71 ID:3sVMm49u.net] 煽ってるやつはどうせ何も分かってないんだからスルー上等… なところだが奮起していろいろやってくれるのは面白いから応援しよう
48 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 15:09:40.69 ID:M5ncT/Oi.net] >>46 外の人がブレーキかけない限り停止しないスクリプトって面倒臭くない? なぜ自律的に停止しないのか
49 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 15:22:20.28 ID:PtIPW4Qc.net] >>47 ひでぇ; いや、俺が釣り針に食いついた自爆かな? いつもはあちこちROMだけど、非同期周りで頭がうにってるとこに同じネタが来てたからつい・・・ >>48 使うの自分だけならいいけど「無限ループ解除できないの?」の対応めんどくさい それにasもv8もJSRTも外部からの停止メソッド当然の様に積んでるし luaでも出来るってわかっちゃったら俺の中では当然実装しちゃう 置き土産、非同期でReadFileしてもキャッシュにあると即リザルト確定、そこそこ頭いいのかと思いきゃ ヘッドの位置とか取得できないらしくて単純な判定しかしてない、ようするに自分でスレッド作って そっちでブロッキングReadFileしてるのと殆ど変わらない、だから>>11 みたいになる しかもReadFileはハイブリッドカーネル内部ではなくkernel32.dllがユーザ空間にWin32スレッドを生成、 だから時間が掛かるでかい読み込みが終わる前にプロセス(デバッグ含む)毎終了すると何食わぬ顔で終了 しかしReadFile直後にLANケーブル引っこ抜いてCancelIoしたりしてもReadFileはウェイトのまま ここでCancelIoしてもGetOverlappedResultしなきゃとかスクリプト終了で全ての待ち合わせが終わる前に 「今のエラーどこだっけ?」とか即再実行したりすると稀に起きる再現性のない原因不明のメモリ破壊 原因わかって「もうこれ全部自分で管理した方がトラブル少なそう」で今に至る、もう手の内は出さない
50 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 15:45:33.24 ID:M5ncT/Oi.net] 無限ループしたから解除したい バグったからデバッグしたい これは非同期でもマルチタスクでもなくデバッグの話だよね
51 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 15:53:18.05 ID:PtIPW4Qc.net] >>50 一番簡単な例として挙げただけでcountフックで止まってる間は再開までに辻褄があってれば 変数の変更から状態遷移の誘発まで色々できるよ
52 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 16:02:15.47 ID:M5ncT/Oi.net] >>51 「面倒臭くない?」に対して「色々できるよ」は答えになってない
53 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 16:13:21.80 ID:PtIPW4Qc.net] たしかにボタン1発で終了は意味ないっちゃー意味ないね、忘れてくれていいよ とりあえず、フックのハンドラに突入したら離脱するまでの間にスタックがluaスクリプトの実行で 動くことはないからAPI全部呼び出し放題だから知らなかった人は遊んでみると面白いかも
54 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 16:40:57.34 ID:PtIPW4Qc.net] 連投すまん、なんかわかった、俺じゃなくてスクリプト作成者が、なのね 俺は中身知ってるからスクリプトで苦労なんて殆どしないし 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ならぬ割り込み起動みたいな直接的な真似は流石にやめといた方がいいと思う
55 名前:デフォルトの名無しさん [2016/10/01(土) 17:35:44.97 ID:cvsJ/xEf.net] デバッグ用機能を普通に使ってる時点で…
56 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 17:51:13.00 ID:KgMKfA8p.net] だが面白いことは面白いw これも実用例も少なくて同人マが少し案として呟いてるだけか。良く見つけるなw Chakraをあれだけ動かす位だからlua程度なら隅々まで把握しててもおかしくないか。
57 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 18:57:18.74 ID:PtIPW4Qc.net] なきゃないで自分で追加してたとこだけどね 読んで参考にしたのはChakraCoreだけどあれが使ってたのは最初から窓に入ってるjsrt.dll あのexeがめっちゃ小さかったのはexeにエンジンくっつける必要がないから JSRTをv8猿と比べた感想は使い手にとっては微妙、作り手(ChakraCoreの読み手?)にとっては わかるまでが大変、わかるとめっちゃ使いやすいけど無駄に感じるとこが多すぎ そりゃv8に勝てずにオプソにしてブン投げてエッジモードJSRT開発にいくわぁなぁ 思想がわかって作りやすいから個人的には好きだけど
58 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 21:55:14.80 ID:nMhs26pq.net] >>46 yeild でメインループの呼び出し元に安全に戻ってきてるんだから、そこで全部必要な他スレッド処理した上で後始末もして、 必要ならそれぞれ駆動させてるluaスレッドにluaの例外返して、それをスクリプト側で自発的に処理するだけじゃん? lua側にスレッドではまるコードを入れる必要性が全く無いのにそれを考えるのはナンセンス
59 名前:デフォルトの名無しさん [2016/10/02(日) 02:15:08.35 ID:4LOtpf4Z.net] >>58 それな。 間違った方法と気付かず突き進む無能な働き者臭がプンプンする。
60 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 09:35:31.71 ID:ToCp8nQC.net] スクリプターがみんな優秀とは限らない UWSCもスクリプトが固まったらいちいちCtrl+Alt+DELだったらくっそめんどくさいと思うよ
61 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 11:06:09.66 ID:2GKgFmK4.net] コマンドラインだったらアプリが固まってもターミナルは固まらないから楽 でも見た目が文字ばっかりだからダメという面倒臭い価値観を許容できない者は絶滅した
62 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 11:16:06.69 ID:ToCp8nQC.net] ゲームかどうか問わずマクロもシナリオインタープリタも 行政の廃棄物処理のサイトの裏のパラーメータ決定もコマンドラインとか無理
63 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 11:30:58.46 ID:ToCp8nQC.net] 2行目ですらちょっとマズかったかも知れない・・・あいつらの知識レベルは想像絶するからね 話聞いたらいじってたのは研究の支援受けた大学の学生とか公的もブラックかよと JSやasだと行末にはとにかく「;」と思い込んでスコープ生成する様な組み込み構文にも付けて 長時間ハマって問い合わせてくるからね!それじゃif文全く機能しないから!→lua(ry C++/CLI使ってたのはそゆ事 インタープリタに限らず使えそうな物はASP.NETからも使える様に一通りラッピングしてある
64 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 16:16:10.81 ID:aWO2DXf2.net] 重箱の隅突ついてる面々もどうでもいいとこけなしてないで具体的にどうすればいいか物を出さんとな ↑のは仮想PCのロールバックと共に即消え去ったがまぁ普通に作れる物ではなかった
65 名前:デフォルトの名無しさん [2016/10/02(日) 17:05:21.48 ID:4LOtpf4Z.net] Boost.AsioのようなAPIにすればいいだけ
66 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 18:01:25.22 ID:aWO2DXf2.net] だけ で済むなら晒してやりゃいいのに まー単純に1ファイル非同期読み出しできてもメモリいっぱい読む時間なんてたかが知れる 煩雑さのわりに効果なくてすぐ棄てそうだが
67 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 18:23:39.86 ID:ToCp8nQC.net] それ以前にFILE_FLAG_SEQUENTIAL_SCAN立てて開いてればいきなりReadFileでえっらい容量を 読もうとしない限り大抵先読みされる筈だから意味ないとおも
68 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 18:25:45.79 ID:2GKgFmK4.net] コマンドラインをけなして進化したものもあるんじゃないかな けなすのを止めろと言われて馬鹿正直に止まった者は進化しなかった
69 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 18:28:10.94 ID:ToCp8nQC.net] >>67 恐らく読み書きでファイルポインタ動かないのはそゆ事 1ファイルを頭から単純に読み込みに行く事は想定してない シナリオデータがパックされたでかいファイルでジャンプとか複数のファイルとかじゃないと効果薄いとおも
70 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 18:35:41.27 ID:ToCp8nQC.net] ミスった、>>66 >>68 コマンドラインをけなしてる訳じゃないんだ むしろFreeBSD11.0(フライング)で盆栽ならぬ現実逃避しながら土方グラマしてるくらい慣れてるし否定はしない ただ、現実問題ゲームのツールにしても少なくとも俺の知る限りGUIでないと通用しないしサポートも大変 けなしてると思われたなら謝罪する、申し訳なかった
71 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 21:34:29.07 ID:Q2kOE1Eq.net] これまでにない最も適切な回答が出た希ガス そして当然の発想を発想するとは思わない理由もわかった希ガス
72 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 22:57:41.88 ID:ToCp8nQC.net] もしかして、1つのファイルを頭から非同期で良かったん…? 1つのファイルを頭から順の先読みなんてのをユーザが実装する意味ないです、 どう実装するとかインターフェース云々構造云々言うまでもなくフラグ立てれば キャッシュを見れる位偉い人が下で勝手にやってくれます; CreateFile直後のReadFileとかよっぽど早い読み込みとかでもなければ ERROR_IO_PENDING返ってきません、スレ汚し失礼しました;
73 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 23:23:52.57 ID:XhpVhTHi.net] >>66 PCだと誤差の範囲ですむけど、VITAとかだとひっかかるのがわかるので、非同期&先行読みこみ重要だったり
74 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 23:34:04.22 ID:aWO2DXf2.net] ググったがMSがフラグ使えって書いてたのはワラタw勉強になった それを学習した上で簡単な先読みならそういうのはiostreamみたいなので吸収した方が良さそう スクリプト内にまで持ち込む利点がおもいうかばない
75 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 00:06:05.41 ID:P8G6wOCj.net] ホストの変更が困難でネイティブなスレッドも非同期の機能も提供してないのかね? もしそうならコルーチンで少し読んで主処理に戻ってを繰り返すしかないんじゃないかな スレッドか非同期が使えるならそれに従えばいいしホスト変更できるなら>>74 に一票
76 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 23:17:21.33 ID:qdTfrzU1.net] LuaにもGUIツールキットってあるみたいだけど実用になるのかな? 非同期処理が出来ないとファイルやネットワークへアクセスするたびに GUIの描画が止まっちゃうと思うんだけど
77 名前:デフォルトの名無しさん [2016/10/07(金) 00:35:46.30 ID:SRvWi+CW.net] 非同期IOをネイティブコードで実装すりゃいいだろと何度言ったら…
78 名前:デフォルトの名無しさん mailto:sage [2016/10/07(金) 01:39:42.67 ID:aWd3vjbT.net] 整理してみようか ・ネットワークアクセスというからにはWindowsで非同期読み込み? > yes:>>67 ・何を非同期で処理させたい? > ファイルやディスク類:>>75 ・WindowsでGUIを非同期で処理させたい? > GdiFlushを参照(元々非同期) Vitaだとしたら・・・ちょっと検索したけどVitaのLuaってどこかわかりやすい解説サイトない? ないならVitaでLuaしてない人は軒並みお手上げ ホストがどんな機能をどんな形でどれだけ提供するかで大分フローは様変わりする
79 名前:デフォルトの名無しさん [2016/10/07(金) 03:09:07.32 ID:SRvWi+CW.net] 整理といいつつ明後日の方向に持って行こうとする奴…
80 名前:デフォルトの名無しさん mailto:sage [2016/10/07(金) 03:33:01.51 ID:b8KIq0Ir.net] なんかネイティブコードをコンパイルできない環境を正当化してるみたいで嫌な感じだ
81 名前:デフォルトの名無しさん mailto:sage [2016/10/07(金) 06:16:16.38 ID:ZvM+u4Of.net] ほんとそれ Luaは汎用言語ではなく組込用なんだから ホスト次第でやりたいことは何でもできるし、そういうホストを作るだけだろ
82 名前:デフォルトの名無しさん mailto:sage [2016/10/07(金) 08:03:48.60 ID:zaoGKf4F.net] 組み込み以外のLua使用は認めんといわんばかりの流れだな
83 名前:デフォルトの名無しさん [2016/10/07(金) 08:31:12.00 ID:SRvWi+CW.net] デフォルトでCやC++で書いたライブラリロード出来るけど?
84 名前:デフォルトの名無しさん mailto:sage [2016/10/07(金) 14:48:04.63 ID:38WzhEHE.net] Lua言語のみでやるんだ!という朝鮮は無意味ということだろ
85 名前:デフォルトの名無しさん mailto:sage [2016/10/07(金) 17:53:12.95 ID:aWd3vjbT.net] 非同期君がプラットフォームをはっきりさせれば大部分は解決する気がする 又は解決できないことがはっきりする
86 名前:デフォルトの名無しさん mailto:sage [2016/10/07(金) 18:10:59.27 ID:7KQTkYQu.net] 組み込みじゃなかったらLua使うメリットなくない? Pythonとかでいい
87 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 01:59:56.06 ID:fW81e7KH.net] >>86 JITによるJava顔負けの圧倒的な実行速度。しかもJavaより起動が速い Pythonなんて雑魚
88 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 05:53:19.72 ID:y1l14uzD.net] 環境晒さずにサンプル出させようって魂胆かね ホストどころか動作環境も晒さないようなら以降非同期は無視でいっかね?
89 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 06:51:14.10 ID:7NFzJV+G.net] 非同期処理ができないと困るという認識は正しいよ でもLuaの自助努力とか自己責任でやる必要は全くない JavaScriptの真似をしたりC++に丸投げしたりすればいい
90 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 07:22:36.43 ID:2uwi8nYQ.net] >>87 よくJITで比べるひとがいるけど、ホントにLuaJITを使ってる? 本家への追従も遅くて、開発体制が不安なんだけど
91 名前:デフォルトの名無しさん [2016/10/08(土) 08:10:17.72 ID:0b+9II7o.net] 動作環境て非同期で実行する処理書くだけならCでもC++でも標準で書けるじゃん あとは通信したいならソケットでも使えばいい
92 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 10:59:59.33 ID:p4blcc/t.net] >>90 低機能でも良いから速度が欲しい場合に使ってみている
93 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 11:54:59.08 ID:y1l14uzD.net] Pythonのインデントも一長一短なんだよな PHPもRubyも変数に一癖も二癖もあるし 言葉は悪いが単純な挙動の変更だけを許して余計なことさせたくない時はLuaは不自由だからうってつけ
94 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 14:03:50.51 ID:7NFzJV+G.net] Perlはソースの長さを減らした方が自由という考え方でLuaもそれに近い でも言語を一個二個と数えたら言語が増えてるじゃないか一個にしろという勢力もある
95 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 14:18:59.47 ID:2uwi8nYQ.net] Luaは別にソースは短くならないぞ。function も self も省略できないし Perlも最近主流の書き方なら、他と比べても短くはない
96 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 15:01:44.89 ID:7NFzJV+G.net] C++にたとえるとtemplate <typename T> classを省略できなくてもいいんだよ 新しいclassを作らず既存のtemplateを実体化することで短くするから
97 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 15:55:37.09 ID:vTm37qb7.net] JSとLuaって似てるからTypeScriptのコンパイラ弄ってLuaスクリプトにコンパイルとか出来ないだろうか
98 名前:デフォルトの名無しさん [2016/10/08(土) 23:24:45.57 ID:etzwi2NN.net] >>93 selfは省略できるでしょ:
99 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 00:02:57.29 ID:438jyFxV.net] 多分それは運が良かっただけで実力じゃないんだがそれがいい
100 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 01:37:00.71 ID:1kkxdGM8.net] >>97 Haxe(ヘックス)はOSSで、JSに型チェックを付けたような言語で(altJS)、 JS(ES5), Flash, PHP, C++, Java, C#, Python に書き出せる。 大規模開発に強く、Windows8.1対応。IDEは、FlashDevelop このサイトで、ブラウザでプログラミングして、実行できる Try Haxe ! try.haxe.org/ Haxeプログラミング入門、尾野政樹、2015 Lua 向けも、ひょっとして誰かが作っているかも知れない
101 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 02:31:30.06 ID:Ug+5WYAJ.net] > lua: added lua target https://haxe.org/download/version/3.3.0-rc.1/
102 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 02:31:55.27 ID:MEz+Ye2w.net] コード効率の良さならRubyが頭いくつか抜きん出ているような
103 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 02:46:40.48 ID:vqX9HXbg.net] 規模の小さなファームには向かないけど複数の高級なプラットフォーム向けならそうなりそうね が、Windows限定で速度をある程度犠牲にして汎用性を求めると ttp://www.atmarkit.co.jp/fdotnet/dotnettips/101compileinvoke/compileinvoke.html ttp://www.84kure.com/blog/2014/07/17/c-c%E3%81%8B%E3%82%89c%E3%81%AEdll%E3%82%92%E5%91%BC%E3%81%B6%E6%96%B9%E6%B3%95/ もはや.NETが最初から入ってるのが当たり前だしこっち行っちゃう気がするな これを起点に何でもできちまうから企業なんかは無料版に乗せると 自力で機能拡張するのが出てきて有料版を食われる可能性があったりするが
104 名前:デフォルトの名無しさん mailto:sage [2016/10/14(金) 23:18:31.17 ID:m7wFj9IA.net] for i=1,10 do local result=() if #result >=1then break else() end usleep() end 作りたいものは10回認識したあとそれでも条件が一致しなかった場合にelseを起動するという文なのですがどうしたらよろしいでしょうか。↑の文だと1回しか認識してくれずその後すぐにelseが起動してしまいます
105 名前:デフォルトの名無しさん mailto:sage [2016/10/15(土) 07:22:22.29 ID:ZbexwM8p.net] >>104 アルゴリズムの問題でLuaに直接の関係はないと思うが… if (function() for i=1,10 do if 条件(i) then return true end usleep() end return false end)() then 成功() else 失敗() end ※条件 = function() return #result >= 1 end
106 名前:デフォルトの名無しさん mailto:sage [2016/10/15(土) 11:39:37.03 ID:4d5CGaAG.net] 理系にとって最強のアルゴリズムは微分だから booleanを返す関数とか興味なさそうだよな
107 名前:デフォルトの名無しさん mailto:sage [2016/10/20(木) 22:50:26.41 ID:yOW97v2T.net] 30分たったら別の動作をするというマクロを組みたいのですがどうしたらいいでしょうか?
108 名前:デフォルトの名無しさん mailto:sage [2016/10/20(木) 23:17:53.03 ID:qfvHlq80.net] プラットホームとなるハードとOSと、 その”マクロ”を実現する為に使うインタープリタのライブラリと、 ホスト及びスクリプトの変更の可否と作成/変更するのは誰なのかをはっきりさせよう
109 名前:デフォルトの名無しさん [2016/10/20(木) 23:35:02.03 ID:CADipw6U.net] >>107 cron
110 名前:デフォルトの名無しさん mailto:sage [2016/10/21(金) 08:41:00.29 ID:ZLbHPX6c.net] iPhoneのautotouchです 例えば ::repeat:: touchDown(11, 728.44, 1325.47); usleep(66621.17); touchMove(11, 714.09, 1318.31); usleep(8072.75); goto repeat ↑を30分繰り返し実行させたあと 別の動作 という感じのマクロを組みたくて、できますか?
111 名前:デフォルトの名無しさん [2016/10/21(金) 09:06:48.82 ID:spSptSrt.net] >>110 30分たったら繰り返し抜ける条件入れて”別の動作”するだけじゃん?