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

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

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

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

■前スレ
【Lua】組み込み系言語総合 その6【Squirrel】
2chスレ:tech
■過去スレ
省7
2
(1): 2016/09/22(木)19:52 ID:t8yALPnl(2/4) AAS
Lua: http://www.lua.org/
Squirrel: http://www.squirrel-lang.org/
ECMAScript (JavaScript): https://en.wikipedia.org/wiki/List_of_ECMAScript_engines
AngelScript: http://www.angelcode.com/angelscript/
elastiC: http://www.elasticworld.org/
3: 2016/09/22(木)19:56 ID:t8yALPnl(3/4) AAS
NGワードでテンプレが張れないのでざっくり削ってしまった
必要なら補完をお願い
4
(1): 2016/09/22(木)21:05 ID:oIZhSgnz(1) AAS
>前スレ999
リファレンスはあくまで言語リファレンスだから、踏み込んだ機能は Programing in Lua 読まないと駄目だよ

該当機能は13.4に解説されてる
5
(1): 2016/09/22(木)23:07 ID:t8yALPnl(4/4) AAS
__index と __newindex の話ならリファレンスにもある
https://www.lua.org/manual/5.3/manual.html#2.4
6: 2016/09/23(金)00:05 ID:SHIicrTE(1) AAS
>>4
ありがとうございます
https://www.lua.org/pil/13.4.5.html
これですね。__indexは関数の節約や継承に相当する機能を実現するために
使いますけど[]の定義とこれらは両立は出来ない・・・?
__indexに[]にさせたい関数を入れてしまうとキーを参照しに行くテーブルを設定できませんし
__indexにテーブルを入れてしまうと[]にさせたい関数を書く場所がないような

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

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

で、どうしてもLuaが主導で要求を発行した上で自前の他のスレッドでやりたいってんなら
省9
12: 2016/09/28(水)06:29 ID:Nip8sf3s(1/2) AAS
Luaに足りない機能が欲しいときはJavaScriptを参考にするといい
この2つはスクリプトエンジン部分が非常によく似ている

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

また、Lua自体を並列実行したい場合は Web Worker が参考になる
新しいStateで独立したグローバル環境を用意し、引数/返値のみマーシャリングする
ホスト側のマルチスレッドを公開する >>11 の方法は間違いで、GCが破綻する
13: 2016/09/28(水)06:47 ID:hiAJ49Og(1) AAS
マルチスレッドを公開する方法はluaのスタックが壊れるよな
14: 2016/09/28(水)11:28 ID:yOlfPxWj(2/5) AAS
もちろんlua_newstate lua_newthreadは必須
15
(1): 2016/09/28(水)11:31 ID:RDlboUCA(1/2) AAS
luaもes6みたいにクラス構文追加すればいいのに
typescriptを改造してtypelua作れないだろうか
16: 2016/09/28(水)11:33 ID:yOlfPxWj(3/5) AAS
てかggればQiita辺りがすぐ引っかかる筈

それと外部からの正常な中断(中断ボタンとか)はデバッグ命令かなんかで1000命令に
1回フラグ見てフラグが立ってたらスレッドの終了シーケンスに移行みたいな乱暴な事をしてる
フラグ立ててイベントをシグナル化、Luaのスクリプトから何かをウェイトする時は
そのイベントとその資源の両方をWaitForMultipleObjectsで待ってシグナル化原因を必ず判定
17: 2016/09/28(水)11:36 ID:RDlboUCA(2/2) AAS
typescriptというよりbabelか
型があると組み込みとかで面倒な事になりそうだし
18
(1): 2016/09/28(水)12:35 ID:yOlfPxWj(4/5) AAS
メシ前で言葉足らずだったすまぬ

何から何まで直接APIを生で渡してそのままstate切り替えずにマルチスレッドでGoって話じゃない
lua内の変数の直接の共有はもちろんできないからグローバルでホストのユーザデータ持たせて
そこに固定で配列の排他領域持つなりstd::deque<適当>でメッセージポンプなりしなきゃダメ

で、何故WaitForMultipleObjectsかってーと、極端な話最初に実行し始めたluaのスレッドが
別スレッド用のスクリプトを起動してスレッドが動的に生成されて全部無限ループに陥ったりしたのを
止められるように〜とWin32でスレッドをabortしたりすると、実は無限ループじゃなかった時に
使ってたり待ってたりした資源次第でレアなLastErrorや例外になったりして異常なのか正常なのかわからない
luaは俺の知る限り外部からのスレッドセーフな強制中断のメソッドは持ち合わせてないし
google v8なんかも2〜3年位前?のI/Fががらりと変わった時に追加された中断メソッドで
省2
19: 2016/09/28(水)13:08 ID:Nip8sf3s(2/2) AAS
>>15
https://github.com/andremm/typedlua
LuaJITのffi宣言は型があるけどLuaへは伝搬しないんだっけか

>>18
もう少し空気を読めるようになろうね
20: 2016/09/28(水)13:27 ID:yOlfPxWj(5/5) AAS
CAsyncFile::~CAsyncFile( void )
{
m_bCancel = true;
if( ( !( m_ctxlist.empty() ) ) || ( 0 < m_uPendingCount ) )
{
m_file.AsyncCancelIo();
}
bool bEnd = false;
while( ( !bEnd ) && ( !( m_ctxlist.empty() ) ) )
{
省16
1-
あと 315 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.814s*