X



【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net

0001デフォルトの名無しさん
垢版 |
2016/09/22(木) 18:23:46.74ID:t8yALPnl
LuaやSquirrelやAngelScriptなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです
Luaに限定してるわけではないのでレスする場合は言語を明記してください

まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/

その他の参考URLは>2から

■前スレ
【Lua】組み込み系言語総合 その6【Squirrel】
http://echo.2ch.net/test/read.cgi/tech/1362895832/
■過去スレ
その5 http://toro.2ch.net/test/read.cgi/tech/1321063450/
その4 http://hibari.2ch.net/test/read.cgi/tech/1301414458/
その3 http://hibari.2ch.net/test/read.cgi/tech/1272643397/
その2 http://pc12.2ch.net/test/read.cgi/tech/1243210301/
その1 http://pc12.2ch.net/test/read.cgi/tech/1205208141/
プログラミング言語 Lua
その3 http://pc11.2ch.net/test/read.cgi/tech/1160799232/
0003デフォルトの名無しさん
垢版 |
2016/09/22(木) 19:56:44.34ID:t8yALPnl
NGワードでテンプレが張れないのでざっくり削ってしまった
必要なら補完をお願い
0004デフォルトの名無しさん
垢版 |
2016/09/22(木) 21:05:12.80ID:oIZhSgnz
>前スレ999
リファレンスはあくまで言語リファレンスだから、踏み込んだ機能は Programing in Lua 読まないと駄目だよ

該当機能は13.4に解説されてる
0006デフォルトの名無しさん
垢版 |
2016/09/23(金) 00:05:56.60ID:SHIicrTE
>>4
ありがとうございます
ttps://www.lua.org/pil/13.4.5.html
これですね。__indexは関数の節約や継承に相当する機能を実現するために
使いますけど[]の定義とこれらは両立は出来ない・・・?
__indexに[]にさせたい関数を入れてしまうとキーを参照しに行くテーブルを設定できませんし
__indexにテーブルを入れてしまうと[]にさせたい関数を書く場所がないような

>>5
すみません。気がつきませんでした。>>4を見た後に探し直したら見つかりました
0007デフォルトの名無しさん
垢版 |
2016/09/23(金) 02:26:53.79ID:cTcmD9zg
__indexメタメソッドに設定した関数の中から目的のテーブル参照すりゃ良いだけだと思うが
0008デフォルトの名無しさん
垢版 |
2016/09/26(月) 08:06:56.17ID:wXZ7/4lL
ノンプリエンプティブなマルチタスクしか実現できないLuaでファイルアクセルの
オーバーヘッドを掩蔽することは不可能ですか?
IO待ち中にタスクを切り替えられないと思いますけど何か方法があるのでしょうか
0009デフォルトの名無しさん
垢版 |
2016/09/26(月) 08:30:26.28ID:Jg/TEaNB
>>8
別スレッドで自動でファイル読み込みして、メモリへの読み込み終わったら通知が来るような仕組みを別途作ればいい
0011デフォルトの名無しさん
垢版 |
2016/09/28(水) 00:35:49.15ID:yOlfPxWj
タスクの定義がなんだかよーわからへんけど、1つのスレッドで読み込み要求を発行した後、
そのままそのスレッドで円周率ん万桁とか計算したりした後、
読み込みが終わったかどうかを確認した上で読み込んだ内容をほげほげしたい、と仮定しよう

Win32だったら::ReadFile(::ReadFileEx)はプログラマがマルチスレッドを意識する事なく非同期読み書きが可能
キーワードはReadFile、GetOverlappedResult、
あとCancelIo(一度に沢山読み込むのを例外とかでキャンセルしたりする時に重要、
キャンセルしたら即全部止まる訳じゃないからGetOverlappedResultで待ち合わせないとダメよ)
Linuxの類ならスレッドなりプロセスのフォークなりして最初に読み込んで
単純にLuaスクリプトが追いついたらWait何とかみたいな関数バインドして待たせたらどうだろうか

で、どうしてもLuaが主導で要求を発行した上で自前の他のスレッドでやりたいってんなら
Luaにクリティカルセクションか非同期読み込みに使ったイベントへのアクセス手段を
ホスト(Luaスクリプトを使う側から見た内部)で存続から何から何まで管理して
ロック待ち、ロック開放、イベントシグナル変更、シグナル待ち まで提供しとけば手っ取り早くできなくはない
ただしマルチスレッドプログラミングの注意点をLuaでも守らなきゃならなくなる

最後は>>9の手段についてだけど、これが無難と言えば無難だけど、
通知を待つ手段をコルーチンの類にすると、ちょいと突っ込んだ事を始めるとすぐに限界にぶちあたる筈
どうせ読み込みを開始して必要な処理が終わったらコルーチンか終了フラグをポーリングするんだろうから
いっその事ブロッキングしちゃった方がいいんじゃないかと思わなくもない
この時の注意点はホストからの終了要求も取りこぼさない様に2つ(複数)のハンドルをウェイトする事
0012デフォルトの名無しさん
垢版 |
2016/09/28(水) 06:29:58.49ID:Nip8sf3s
Luaに足りない機能が欲しいときはJavaScriptを参考にするといい
この2つはスクリプトエンジン部分が非常によく似ている

非同期処理が欲しいなら、Promiseのように処理完了でコールバックする形式が良い
実装は、非同期I/Oなりスレッドプールなりでご自由に

また、Lua自体を並列実行したい場合は Web Worker が参考になる
新しいStateで独立したグローバル環境を用意し、引数/返値のみマーシャリングする
ホスト側のマルチスレッドを公開する >>11 の方法は間違いで、GCが破綻する
レスを投稿する


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