【Lua】組み込み系言語総合 その7【Squirrel】
at TECH
1:デフォルトの名無しさん
16/09/22 18:23:46.74 t8yALPnl.net
LuaやSquirrelやAngelScriptなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです
Luaに限定してるわけではないのでレスする場合は言語を明記してください
まとめwiki(なにか質問する前に必ずみること!)
URLリンク(wikiwiki.jp)
その他の参考URLは>2から
■前スレ
【Lua】組み込み系言語総合 その6【Squirrel】
スレリンク(tech板)
■過去スレ
その5 スレリンク(tech板)
その4 スレリンク(tech板)
その3 スレリンク(tech板)
その2 スレリンク(tech板)
その1 スレリンク(tech板)
プログラミング言語 Lua
その3 スレリンク(tech板)
2:デフォルトの名無しさん
16/09/22 19:52:44.75 t8yALPnl.net
Lua: URLリンク(www.lua.org)
Squirrel: URLリンク(www.squirrel-lang.org)
ECMAScript (JavaScript): URLリンク(en.wikipedia.org)
AngelScript: URLリンク(www.angelcode.com)
elastiC: URLリンク(www.elasticworld.org)
3:デフォルトの名無しさん
16/09/22 19:56:44.34 t8yALPnl.net
NGワードでテンプレが張れないのでざっくり削ってしまった
必要なら補完をお願い
4:デフォルトの名無しさん
16/09/22 21:05:12.80 oIZhSgnz.net
>前スレ999
リファレンスはあくまで言語リファレンスだから、踏み込んだ機能は Programing in Lua 読まないと駄目だよ
該当機能は13.4に解説されてる
5:デフォルトの名無しさん
16/09/22 23:07:14.74 t8yALPnl.net
__index と __newindex の話ならリファレンスにもある
URLリンク(www.lua.org)
6:デフォルトの名無しさん
16/09/23 00:05:56.60 SHIicrTE.net
>>4
ありがとうございます
URLリンク(www.lua.org)
これですね。__indexは関数の節約や継承に相当する機能を実現するために
使いますけど[]の定義とこれらは両立は出来ない・・・?
__indexに[]にさせたい関数を入れてしまうとキーを参照しに行くテーブルを設定できませんし
__indexにテーブルを入れてしまうと[]にさせたい関数を書く場所がないような
>>5
すみません。気がつきませんでした。>>4を見た後に探し直したら見つかりました
7:デフォルトの名無しさん
16/09/23 02:26:53.79 cTcmD9zg.net
__indexメタメソッドに設定した関数の中から目的のテーブル参照すりゃ良いだけだと思うが
8:デフォルトの名無しさん
16/09/26 08:06:56.17 wXZ7/4lL.net
ノンプリエンプティブなマルチタスクしか実現できないLuaでファイルアクセルの
オーバーヘッドを掩蔽することは不可能ですか?
IO待ち中にタスクを切り替えられないと思いますけど何か方法があるのでしょうか
9:デフォルトの名無しさん
16/09/26 08:30:26.28 Jg/TEaNB.net
>>8
別スレッドで自動でファイル読み込みして、メモリへの読み込み終わったら通知が来るような仕組みを別途作ればいい
10:デフォルトの名無しさん
16/09/26 08:39:51.12 DUFqbT57.net
Luaだけだと無理だね ホスト側で仕組みを作るしかない
11:デフォルトの名無しさん
16/09/28 00:35:49.15 yOlfPxWj.net
タスクの定義がなんだかよーわからへんけど、1つのスレッドで読み込み要求を発行した後、
そのままそのスレッドで円周率ん万桁とか計算したりした後、
読み込みが終わったかどうかを確認した上で読み込んだ内容をほげほげしたい、と仮定しよう
Win32だったら::ReadFile(::ReadFileEx)はプログラマがマルチスレッドを意識する事なく非同期読み書きが可能
キーワードはReadFile、GetOverlappedResult、
あとCancelIo(一度に沢山読み込むのを例外とかでキャンセルしたりする時に重要、
キャンセルしたら即全部止まる訳じゃないからGetOverlappedResultで待ち合わせないとダメよ)
Linuxの類ならスレッドなりプロセスのフォークなりして最初に読み込んで
単純にLuaスクリプトが追いついたらWait何とかみたいな関数バインドして待たせたらどうだろうか
で、どうしてもLuaが主導で要求を発行した上で自前の他のスレッドでやりたいってんなら
Luaにクリティカルセクションか非同期読み込みに使ったイベントへのアクセス手段を
ホスト(Luaスクリプトを使う側から見た内部)で存続から何から何まで管理して
ロック待ち、ロック開放、イベントシグナル変更、シグナル待ち まで提供しとけば手っ取り早くできなくはない
ただしマルチスレッドプログラミングの注意点をLuaでも守らなきゃならなくなる
最後は>>9の手段についてだけど、これが無難と言えば無難だけど、
通知を待つ手段をコルーチンの類にすると、ちょいと突っ込んだ事を始めるとすぐに限界にぶちあたる筈
どうせ読み込みを開始して必要な処理が終わったらコルーチンか終了フラグをポーリングするんだろうから
いっその事ブロッキングしちゃった方がいいんじゃないかと思わなくもない
この時の注意点はホストからの終了要求も取りこぼさない様に2つ(複数)のハンドルをウェイトする事
12:デフォルトの名無しさん
16/09/28 06:29:58.49 Nip8sf3s.net
Luaに足りない機能が欲しいときはJavaScriptを参考にするといい
この2つはスクリプトエンジン部分が非常によく似ている
非同期処理が欲しいなら、Promiseのように処理完了でコールバックする形式が良い
実装は、非同期I/Oなりスレッドプールなりでご自由に
また、Lua自体を並列実行したい場合は Web Worker が参考になる
新しいStateで独立したグローバル環境を用意し、引数/返値のみマーシャリングする
ホスト側のマルチスレッドを公開する >>11 の方法は間違いで、GCが破綻する
13:デフォルトの名無しさん
16/09/28 06:47:31.69 hiAJ49Og.net
マルチスレッドを公開する方法はluaのスタックが壊れるよな
14:デフォルトの名無しさん
16/09/28 11:28:17.80 yOlfPxWj.net
もちろんlua_newstate lua_newthreadは必須
15:デフォルトの名無しさん
16/09/28 11:31:47.14 RDlboUCA.net
luaもes6みたいにクラス構文追加すればいいのに
typescriptを改造してtypelua作れないだろうか
16:デフォルトの名無しさん
16/09/28 11:33:06.02 yOlfPxWj.net
てかggればQiita辺りがすぐ引っかかる筈
それと外部からの正常な中断(中断ボタンとか)はデバッグ命令かなんかで1000命令に
1回フラグ見てフラグが立ってたらスレッドの終了シーケンスに移行みたいな乱暴な事をしてる
フラグ立ててイベントをシグナル化、Luaのスクリプトから何かをウェイトする時は
そのイベントとその資源の両方をWaitForMultipleObjectsで待ってシグナル化原因を必ず判定
17:デフォルトの名無しさん
16/09/28 11:36:10.73 RDlboUCA.net
typescriptというよりbabelか
型があると組み込みとかで面倒な事になりそうだし
18:デフォルトの名無しさん
16/09/28 12:35:10.14 yOlfPxWj.net
メシ前で言葉足らずだったすまぬ
何から何まで直接APIを生で渡してそのままstate切り替えずにマルチスレッドでGoって話じゃない
lua内の変数の直接の共有はもちろんできないからグローバルでホストのユーザデータ持たせて
そこに固定で配列の排他領域持つなりstd::deque<適当>でメッセージポンプなりしなきゃダメ
で、何故WaitForMultipleObjectsかってーと、極端な話最初に実行し始めたluaのスレッドが
別スレッド用のスクリプトを起動してスレッドが動的に生成されて全部無限ループに陥ったりしたのを
止められるように〜とWin32でスレッドをabortしたりすると、実は無限ループじゃなかった時に
使ってたり待ってたりした資源次第でレアなLastErrorや例外になったりして異常なのか正常なのかわからない
luaは俺の知る限り外部からのスレッドセーフな強制中断のメソッドは持ち合わせてないし
google v8なんかも2〜3年位前?のI/Fががらりと変わった時に追加された中断メソッドで
ようやく対応ってくらいだからluaにそれを求めるのは酷かも知れない
だから自分で強制中断の手段をlua_sethookでも何でも使って準備しておくのが吉(異論は認める)
19:デフォルトの名無しさん
16/09/28 13:08:14.98 Nip8sf3s.net
>>15
URLリンク(github.com)
LuaJITのffi宣言は型があるけどLuaへは伝搬しないんだっけか
>>18
もう少し空気を読めるようになろうね
20:デフォルトの名無しさん
16/09/28 13:27:05.51 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:デフォルトの名無しさん
16/09/28 21:14:26.38 E/gCU/1d.net
「スレッドではありません。コルーチンです」とか
「オブジェクトではありません。連想配列です」とかはっきり言うべきなんよ
そうしないと「スレッドのくせにこんなこともできないのか」
「オブジェクトのくせに以下同文」ってなる
22:デフォルトの名無しさん
16/09/28 23:59:19.59 v1ba5adm.net
>>21
コルーチンはあくまで言語の遷移の構造を指す用語(サブルーチンと対になる用語)だから、実行の主体を示すのは「スレッド」で正しいぞ
23:デフォルトの名無しさん
16/09/29 06:26:28.32 wi991s1d.net
>>22
それはつまり正しい用語を使った作者は正しくて誤読した読者が悪いってことか
でも正しい奴も悪い奴も全員にメリットのある方法ってないのかな
24:デフォルトの名無しさん
16/09/29 06:40:04.23 EoqEFEeY.net
そもそも誤読するやついるのか?
25:デフォルトの名無しさん
16/09/29 06:46:03.64 y8+pYy20.net
「オブジェクト」については流石に見解が一致しないだろうから
違う用語 or 意図の説明が欲しいな
26:デフォルトの名無しさん
16/09/29 06:59:50.06 EoqEFEeY.net
ん?Javascriptのオブジェクトも許せない人?
27:デフォルトの名無しさん
16/09/29 07:51:10.72 a430Zm1B.net
この流れは俺が悪いのかな?
目的はある意味投機実行ならぬ投機読み込みだよね?
でもって読み込みが終わったらコルーチン遷移だろうと完了待ちブロッキングの関数バインドだろうと
他のWin32のスレッドか完全な別ステート(コンテキスト)のLuaスクリプトでReadFileだろうと
ReadFileExのコールバックルーチンを使おうと必ず全く別のWin32スレッドが必要になる筈なんだけど
いやむしろコルーチンで全部済む方法があったら是非教えてくだちい(皮肉じゃないよ、結構必死)
ちな俺が作ってたのはシナリオインタープリタに例えると、今実行中のステートとは
完全に独立した複数のステートで選択肢の1つ先の全選択肢を入出力ダミーにして投機実行して
全部DISCARDABLEなグローバルヒープに持っとく為に複数ファイルをグローバルなユーザデータの
m_ctxlistに放り込んでFILE_FLAG_OVERLAPPEDで勝手に全部読み込みにいくって感じの代物
デストラクタでGetOverlappedResultできないのは選択肢決定が早かった時にそこで待っちゃうと
本来の読み込み要求(これも排他を待たなきゃいけない)と重なって更に待たされる可能性があるから
でもってどんなエラーが起きてもおいそれとOVERLAPPED構造体は破棄しちゃいけない
最悪メモリリークを選んで他のヒープの開放にいかなきゃいけない
だって、開放したらしたでアクセス違反で他の後始末する前に即ぶっ飛ぶのが目に見えてんだから
単純な決め打ちの非同期入出力なら何とか簡単にできるかも知れんけど、
突っ込んだ事しようとすると頭うにる
28:デフォルトの名無しさん
16/09/29 08:07:35.79 y8+pYy20.net
>>26
いや、連想配列とオブジェクトは何が異なるのか?という意味
おそらくオブジェクトは連想配列+αなんだろうけど
説明しろと言われたら、自分はハッキリ説明できる自信が無い
29:デフォルトの名無しさん
16/09/29 10:10:01.10 AXFlgWC+.net
OSレベルのスレッド
言語レベルのスレッド
区別してもらえると助かります
30:デフォルトの名無しさん
16/09/29 14:17:18.55 a430Zm1B.net
>>27はWin32スレッド以外は”コルーチン””別ステートのLuaスクリプト”としか言ってないんだけど
これでわからないなら非同期は諦めた方がいいかも知れない
ReadFileExのイベントハンドラでやれば良さそうとか考えそうだけど、
スレッドID取得するとシステムの別スレッドだからそこからLuaの何かいじりにいくとスタックぶっ壊すよ
31:デフォルトの名無しさん
16/09/30 08:27:54.40 aDhSErqk.net
>>27
管理主体はシステム側がもって、
他からは読み込んだものをメモリー経由でのみアクセスするようにして、
luaからは弱参照する仕組み作って参照する形で全く問題無いような
Luaで扱えるレベルのシステムを必要以上に難しく作る意味は無い
32:デフォルトの名無しさん
16/09/30 11:13:49.15 j0K6lQ2j.net
JSなら、メインスレッド以外はサーバーにあってメモリーすらアクセスできない事も多い
スタックが壊れるとかいうならスタックにアクセスしなければいいだけなんだよな
33:デフォルトの名無しさん
16/09/30 11:40:47.98 LMNz6D7V.net
>>32
GC中だと何も触れないからLuaスタック以外へのアクセスでも怖いよ
lua_lock / lua_unlock までカスタマイズする気なら、その限りではないが
34:デフォルトの名無しさん
16/09/30 13:28:37.87 j0K6lQ2j.net
Luaスタック以外って
C++の変数かな
まあそうだねC++は怖いね
35:デフォルトの名無しさん
16/09/30 16:24:15.30 aFh0nkO3.net
>>31
そうだよ、結局はシステム側が管理しなきゃならないと思う、それで全部解決する
OVERLAPPEDなReadFileとGetOverlappedResultの発行をバインドするだけという
最も単純で最も無駄な方法であってもそれが必要になるという話
リモートのファイルにReadFile発行した後LANケーブル引っこ抜いて
スクリプト中断なりエラーなり発生させるとわかる
36:デフォルトの名無しさん
16/09/30 18:18:42.06 j0K6lQ2j.net
バインドという単語は公式なマニュアルでは見たことがないので意味が曖昧だが
LuaがC++を呼び出すことしか想定していない気がする
逆にC++がLuaを呼び出す必要がある場合に色々破綻する気がする
37:デフォルトの名無しさん
16/10/01 05:36:10.17 PtIPW4Qc.net
無難に済ますなら呼び出されたC++側のコード(ホストからluaのステートにバインドされた関数)で
C++側から通知か何かがあるかどうかを調べたりするのかな
どうしようもなければlua_sethookで登録したハンドラで一定行実行される度にフラグを見て
最低限の処理をして離脱した後、改めてlua側で何かをするとかしかない
38:デフォルトの名無しさん
16/10/01 06:33:04.10 cvsJ/xEf.net
メッセージキュー作ってlua側から呼んでコールバック実行すればいい
39:デフォルトの名無しさん
16/10/01 07:36:37.31 PtIPW4Qc.net
結局は原則としてlua側の方から結果が存在するかどうか調べにいかなきゃならないね
40:デフォルトの名無しさん
16/10/01 08:31:36.35 M5ncT/Oi.net
>>39
それJavaScriptで同じこと言えるの?
41:デフォルトの名無しさん
16/10/01 08:55:44.45 PtIPW4Qc.net
>>40
>>11みたいに全ステート共通のユーザデータに排他管理されたデータ積んで
イベント発生毎にスレッドプールからスレッド取ってきて独立したハンドラ専用のステートで
そのイベント専用のスクリプトの実行まですればイベントドリブンは可能
そこまで作りこむとスレッドプールの空きに合わせて投機実行してシナリオデータが間接参照してる
他の細々としたファイルの先読みもそんなに大変なことでもなくなる
どっちのレベルに合わせればいいのかわかんね
42:デフォルトの名無しさん
16/10/01 10:40:59.92 cvsJ/xEf.net
>>41
色々知識足りてないね。勉強したら?
43:デフォルトの名無しさん
16/10/01 11:29:58.38 PtIPW4Qc.net
URLリンク(fast-uploader.com)
ChakraCoreのソースコードを参考にC++/CLIでJSRTを使用
バインドした関数の中でクロージャを確保しても消えない
ある関数の中で作業用の変数をアロケートしてそこでGCしても変数消えない、
スコープ抜けた後のGCできっちり消える
もちろんIEと同じJavaScriptだからMathとかもIEとかと全く同じ、バインドしてるのは・・・
解析した時のテストコードだからちょっと待ってね(バインダは絶対晒さないよ)
それとも何かバインドして同時に16スレッド動く様にしようか?
44:デフォルトの名無しさん
16/10/01 11:39:15.57 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:デフォルトの名無しさん
16/10/01 13:38:37.94 KgMKfA8p.net
Mathてビルトインのクラスね。
Window DOM以外は一通り使えるんだな。
しかもIE入ってればいいのか・・・検索しても例は少ない。
これはバインダー欲しいぞ。
46:デフォルトの名無しさん
16/10/01 14:18:37.12 PtIPW4Qc.net
だから絶対やらんて、3時間に設定したからもうすぐロダから消える
何故煽られるのか考えてみた
lua_sethookでcountフックして終了フラグ見たらthrowみたいな強制的なWin32スレッドの終了ではなく
メモリリークしないluaスクリプトの中断とかですらマイナーな手法なのかな?
俺は行と行の間で止まってる事が約束されてるんだから何かの要求があったらyieldの流れに
干渉するような変更とか平気でやってたんだけど、その辺の温度差なのかな?
47:デフォルトの名無しさん
16/10/01 14:38:35.71 3sVMm49u.net
煽ってるやつはどうせ何も分かってないんだからスルー上等…
なところだが奮起していろいろやってくれるのは面白いから応援しよう
48:デフォルトの名無しさん
16/10/01 15:09:40.69 M5ncT/Oi.net
>>46
外の人がブレーキかけない限り停止しないスクリプトって面倒臭くない?
なぜ自律的に停止しないのか
49:デフォルトの名無しさん
16/10/01 15:22:20.28 PtIPW4Qc.net
>>47ひでぇ; いや、俺が釣り針に食いついた自爆かな?
いつもはあちこちROMだけど、非同期周りで頭がうにってるとこに同じネタが来てたからつい・・・
>>48使うの自分だけならいいけど「無限ループ解除できないの?」の対応めんどくさい
それにasもv8もJSRTも外部からの停止メソッド当然の様に積んでるし
luaでも出来るってわかっちゃったら俺の中では当然実装しちゃう
置き土産、非同期でReadFileしてもキャッシュにあると即リザルト確定、そこそこ頭いいのかと思いきゃ
ヘッドの位置とか取得できないらしくて単純な判定しかしてない、ようするに自分でスレッド作って
そっちでブロッキングReadFileしてるのと殆ど変わらない、だから>>11みたいになる
しかもReadFileはハイブリッドカーネル内部ではなくkernel32.dllがユーザ空間にWin32スレッドを生成、
だから時間が掛かるでかい読み込みが終わる前にプロセス(デバッグ含む)毎終了すると何食わぬ顔で終了
しかしReadFile直後にLANケーブル引っこ抜いてCancelIoしたりしてもReadFileはウェイトのまま
ここでCancelIoしてもGetOverlappedResultしなきゃとかスクリプト終了で全ての待ち合わせが終わる前に
「今のエラーどこだっけ?」とか即再実行したりすると稀に起きる再現性のない原因不明のメモリ破壊
原因わかって「もうこれ全部自分で管理した方がトラブル少なそう」で今に至る、もう手の内は出さない
50:デフォルトの名無しさん
16/10/01 15:45:33.24 M5ncT/Oi.net
無限ループしたから解除したい
バグったからデバッグしたい
これは非同期でもマルチタスクでもなくデバッグの話だよね
51:デフォルトの名無しさん
16/10/01 15:53:18.05 PtIPW4Qc.net
>>50
一番簡単な例として挙げただけでcountフックで止まってる間は再開までに辻褄があってれば
変数の変更から状態遷移の誘発まで色々できるよ
52:デフォルトの名無しさん
16/10/01 16:02:15.47 M5ncT/Oi.net
>>51
「面倒臭くない?」に対して「色々できるよ」は答えになってない
53:デフォルトの名無しさん
16/10/01 16:13:21.80 PtIPW4Qc.net
たしかにボタン1発で終了は意味ないっちゃー意味ないね、忘れてくれていいよ
とりあえず、フックのハンドラに突入したら離脱するまでの間にスタックがluaスクリプトの実行で
動くことはないからAPI全部呼び出し放題だから知らなかった人は遊んでみると面白いかも
54:デフォルトの名無しさん
16/10/01 16:40:57.34 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:デフォルトの名無しさん
16/10/01 17:35:44.97 cvsJ/xEf.net
デバッグ用機能を普通に使ってる時点で…
56:デフォルトの名無しさん
16/10/01 17:51:13.00 KgMKfA8p.net
だが面白いことは面白いw
これも実用例も少なくて同人マが少し案として呟いてるだけか。良く見つけるなw
Chakraをあれだけ動かす位だからlua程度なら隅々まで把握しててもおかしくないか。
57:デフォルトの名無しさん
16/10/01 18:57:18.74 PtIPW4Qc.net
なきゃないで自分で追加してたとこだけどね
読んで参考にしたのはChakraCoreだけどあれが使ってたのは最初から窓に入ってるjsrt.dll
あのexeがめっちゃ小さかったのはexeにエンジンくっつける必要がないから
JSRTをv8猿と比べた感想は使い手にとっては微妙、作り手(ChakraCoreの読み手?)にとっては
わかるまでが大変、わかるとめっちゃ使いやすいけど無駄に感じるとこが多すぎ
そりゃv8に勝てずにオプソにしてブン投げてエッジモードJSRT開発にいくわぁなぁ
思想がわかって作りやすいから個人的には好きだけど
58:デフォルトの名無しさん
16/10/01 21:55:14.80 nMhs26pq.net
>>46
yeild でメインループの呼び出し元に安全に戻ってきてるんだから、そこで全部必要な他スレッド処理した上で後始末もして、
必要ならそれぞれ駆動させてるluaスレッドにluaの例外返して、それをスクリプト側で自発的に処理するだけじゃん?
lua側にスレッドではまるコードを入れる必要性が全く無いのにそれを考えるのはナンセンス
59:デフォルトの名無しさん
16/10/02 02:15:08.35 4LOtpf4Z.net
>>58
それな。
間違った方法と気付かず突き進む無能な働き者臭がプンプンする。
60:デフォルトの名無しさん
16/10/02 09:35:31.71 ToCp8nQC.net
スクリプターがみんな優秀とは限らない
UWSCもスクリプトが固まったらいちいちCtrl+Alt+DELだったらくっそめんどくさいと思うよ
61:デフォルトの名無しさん
16/10/02 11:06:09.66 2GKgFmK4.net
コマンドラインだったらアプリが固まってもターミナルは固まらないから楽
でも見た目が文字ばっかりだからダメという面倒臭い価値観を許容できない者は絶滅した
62:デフォルトの名無しさん
16/10/02 11:16:06.69 ToCp8nQC.net
ゲームかどうか問わずマクロもシナリオインタープリタも
行政の廃棄物処理のサイトの裏のパラーメータ決定もコマンドラインとか無理
63:デフォルトの名無しさん
16/10/02 11:30:58.46 ToCp8nQC.net
2行目ですらちょっとマズかったかも知れない・・・あいつらの知識レベルは想像絶するからね
話聞いたらいじってたのは研究の支援受けた大学の学生とか公的もブラックかよと
JSやasだと行末にはとにかく「;」と思い込んでスコープ生成する様な組み込み構文にも付けて
長時間ハマって問い合わせてくるからね!それじゃif文全く機能しないから!→lua(ry
C++/CLI使ってたのはそゆ事
インタープリタに限らず使えそうな物はASP.NETからも使える様に一通りラッピングしてある
64:デフォルトの名無しさん
16/10/02 16:16:10.81 aWO2DXf2.net
重箱の隅突ついてる面々もどうでもいいとこけなしてないで具体的にどうすればいいか物を出さんとな
↑のは仮想PCのロールバックと共に即消え去ったがまぁ普通に作れる物ではなかった
65:デフォルトの名無しさん
16/10/02 17:05:21.48 4LOtpf4Z.net
Boost.AsioのようなAPIにすればいいだけ
66:デフォルトの名無しさん
16/10/02 18:01:25.22 aWO2DXf2.net
だけ で済むなら晒してやりゃいいのに
まー単純に1ファイル非同期読み出しできてもメモリいっぱい読む時間なんてたかが知れる
煩雑さのわりに効果なくてすぐ棄てそうだが
67:デフォルトの名無しさん
16/10/02 18:23:39.86 ToCp8nQC.net
それ以前にFILE_FLAG_SEQUENTIAL_SCAN立てて開いてればいきなりReadFileでえっらい容量を
読もうとしない限り大抵先読みされる筈だから意味ないとおも
68:デフォルトの名無しさん
16/10/02 18:25:45.79 2GKgFmK4.net
コマンドラインをけなして進化したものもあるんじゃないかな
けなすのを止めろと言われて馬鹿正直に止まった者は進化しなかった
69:デフォルトの名無しさん
16/10/02 18:28:10.94 ToCp8nQC.net
>>67
恐らく読み書きでファイルポインタ動かないのはそゆ事
1ファイルを頭から単純に読み込みに行く事は想定してない
シナリオデータがパックされたでかいファイルでジャンプとか複数のファイルとかじゃないと効果薄いとおも
70:デフォルトの名無しさん
16/10/02 18:35:41.27 ToCp8nQC.net
ミスった、>>66
>>68
コマンドラインをけなしてる訳じゃないんだ
むしろFreeBSD11.0(フライング)で盆栽ならぬ現実逃避しながら土方グラマしてるくらい慣れてるし否定はしない
ただ、現実問題ゲームのツールにしても少なくとも俺の知る限りGUIでないと通用しないしサポートも大変
けなしてると思われたなら謝罪する、申し訳なかった
71:デフォルトの名無しさん
16/10/02 21:34:29.07 Q2kOE1Eq.net
これまでにない最も適切な回答が出た希ガス
そして当然の発想を発想するとは思わない理由もわかった希ガス
72:デフォルトの名無しさん
16/10/02 22:57:41.88 ToCp8nQC.net
もしかして、1つのファイルを頭から非同期で良かったん…?
1つのファイルを頭から順の先読みなんてのをユーザが実装する意味ないです、
どう実装するとかインターフェース云々構造云々言うまでもなくフラグ立てれば
キャッシュを見れる位偉い人が下で勝手にやってくれます;
CreateFile直後のReadFileとかよっぽど早い読み込みとかでもなければ
ERROR_IO_PENDING返ってきません、スレ汚し失礼しました;
73:デフォルトの名無しさん
16/10/02 23:23:52.57 XhpVhTHi.net
>>66
PCだと誤差の範囲ですむけど、VITAとかだとひっかかるのがわかるので、非同期&先行読みこみ重要だったり
74:デフォルトの名無しさん
16/10/02 23:34:04.22 aWO2DXf2.net
ググったがMSがフラグ使えって書いてたのはワラタw勉強になった
それを学習した上で簡単な先読みならそういうのはiostreamみたいなので吸収した方が良さそう
スクリプト内にまで持ち込む利点がおもいうかばない
75:デフォルトの名無しさん
16/10/03 00:06:05.41 P8G6wOCj.net
ホストの変更が困難でネイティブなスレッドも非同期の機能も提供してないのかね?
もしそうならコルーチンで少し読んで主処理に戻ってを繰り返すしかないんじゃないかな
スレッドか非同期が使えるならそれに従えばいいしホスト変更できるなら>>74に一票
76:デフォルトの名無しさん
16/10/06 23:17:21.33 qdTfrzU1.net
LuaにもGUIツールキットってあるみたいだけど実用になるのかな?
非同期処理が出来ないとファイルやネットワークへアクセスするたびに
GUIの描画が止まっちゃうと思うんだけど
77:デフォルトの名無しさん
16/10/07 00:35:46.30 SRvWi+CW.net
非同期IOをネイティブコードで実装すりゃいいだろと何度言ったら…
78:デフォルトの名無しさん
16/10/07 01:39:42.67 aWd3vjbT.net
整理してみようか
・ネットワークアクセスというからにはWindowsで非同期読み込み? > yes:>>67
・何を非同期で処理させたい? > ファイルやディスク類:>>75
・WindowsでGUIを非同期で処理させたい? > GdiFlushを参照(元々非同期)
Vitaだとしたら・・・ちょっと検索したけどVitaのLuaってどこかわかりやすい解説サイトない?
ないならVitaでLuaしてない人は軒並みお手上げ
ホストがどんな機能をどんな形でどれだけ提供するかで大分フローは様変わりする
79:デフォルトの名無しさん
16/10/07 03:09:07.32 SRvWi+CW.net
整理といいつつ明後日の方向に持って行こうとする奴…
80:デフォルトの名無しさん
16/10/07 03:33:01.51 b8KIq0Ir.net
なんかネイティブコードをコンパイルできない環境を正当化してるみたいで嫌な感じだ
81:デフォルトの名無しさん
16/10/07 06:16:16.38 ZvM+u4Of.net
ほんとそれ
Luaは汎用言語ではなく組込用なんだから
ホスト次第でやりたいことは何でもできるし、そういうホストを作るだけだろ
82:デフォルトの名無しさん
16/10/07 08:03:48.60 zaoGKf4F.net
組み込み以外のLua使用は認めんといわんばかりの流れだな
83:デフォルトの名無しさん
16/10/07 08:31:12.00 SRvWi+CW.net
デフォルトでCやC++で書いたライブラリロード出来るけど?
84:デフォルトの名無しさん
16/10/07 14:48:04.63 38WzhEHE.net
Lua言語のみでやるんだ!という朝鮮は無意味ということだろ
85:デフォルトの名無しさん
16/10/07 17:53:12.95 aWd3vjbT.net
非同期君がプラットフォームをはっきりさせれば大部分は解決する気がする
又は解決できないことがはっきりする
86:デフォルトの名無しさん
16/10/07 18:10:59.27 7KQTkYQu.net
組み込みじゃなかったらLua使うメリットなくない?
Pythonとかでいい
87:デフォルトの名無しさん
16/10/08 01:59:56.06 fW81e7KH.net
>>86
JITによるJava顔負けの圧倒的な実行速度。しかもJavaより起動が速い
Pythonなんて雑魚
88:デフォルトの名無しさん
16/10/08 05:53:19.72 y1l14uzD.net
環境晒さずにサンプル出させようって魂胆かね
ホストどころか動作環境も晒さないようなら以降非同期は無視でいっかね?
89:デフォルトの名無しさん
16/10/08 06:51:14.10 7NFzJV+G.net
非同期処理ができないと困るという認識は正しいよ
でもLuaの自助努力とか自己責任でやる必要は全くない
JavaScriptの真似をしたりC++に丸投げしたりすればいい
90:デフォルトの名無しさん
16/10/08 07:22:36.43 2uwi8nYQ.net
>>87
よくJITで比べるひとがいるけど、ホントにLuaJITを使ってる?
本家への追従も遅くて、開発体制が不安なんだけど
91:デフォルトの名無しさん
16/10/08 08:10:17.72 0b+9II7o.net
動作環境て非同期で実行する処理書くだけならCでもC++でも標準で書けるじゃん
あとは通信したいならソケットでも使えばいい
92:デフォルトの名無しさん
16/10/08 10:59:59.33 p4blcc/t.net
>>90
低機能でも良いから速度が欲しい場合に使ってみている
93:デフォルトの名無しさん
16/10/08 11:54:59.08 y1l14uzD.net
Pythonのインデントも一長一短なんだよな
PHPもRubyも変数に一癖も二癖もあるし
言葉は悪いが単純な挙動の変更だけを許して余計なことさせたくない時はLuaは不自由だからうってつけ
94:デフォルトの名無しさん
16/10/08 14:03:50.51 7NFzJV+G.net
Perlはソースの長さを減らした方が自由という考え方でLuaもそれに近い
でも言語を一個二個と数えたら言語が増えてるじゃないか一個にしろという勢力もある
95:デフォルトの名無しさん
16/10/08 14:18:59.47 2uwi8nYQ.net
Luaは別にソースは短くならないぞ。function も self も省略できないし
Perlも最近主流の書き方なら、他と比べても短くはない
96:デフォルトの名無しさん
16/10/08 15:01:44.89 7NFzJV+G.net
C++にたとえるとtemplate <typename T> classを省略できなくてもいいんだよ
新しいclassを作らず既存のtemplateを実体化することで短くするから
97:デフォルトの名無しさん
16/10/08 15:55:37.09 vTm37qb7.net
JSとLuaって似てるからTypeScriptのコンパイラ弄ってLuaスクリプトにコンパイルとか出来ないだろうか
98:デフォルトの名無しさん
16/10/08 23:24:45.57 etzwi2NN.net
>>93
selfは省略できるでしょ:
99:デフォルトの名無しさん
16/10/09 00:02:57.29 438jyFxV.net
多分それは運が良かっただけで実力じゃないんだがそれがいい
100:デフォルトの名無しさん
16/10/09 01:37:00.71 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:デフォルトの名無しさん
16/10/09 02:31:30.06 Ug+5WYAJ.net
> lua: added lua target
URLリンク(haxe.org)
102:デフォルトの名無しさん
16/10/09 02:31:55.27 MEz+Ye2w.net
コード効率の良さならRubyが頭いくつか抜きん出ているような
103:デフォルトの名無しさん
16/10/09 02:46:40.48 vqX9HXbg.net
規模の小さなファームには向かないけど複数の高級なプラットフォーム向けならそうなりそうね
が、Windows限定で速度をある程度犠牲にして汎用性を求めると
URLリンク(www.atmarkit.co.jp)
URLリンク(www.84kure.com)
もはや.NETが最初から入ってるのが当たり前だしこっち行っちゃう気がするな
これを起点に何でもできちまうから企業なんかは無料版に乗せると
自力で機能拡張するのが出てきて有料版を食われる可能性があったりするが
104:デフォルトの名無しさん
16/10/14 23:18:31.17 m7wFj9IA.net
for i=1,10 do
local result=()
if #result >=1then
break
else()
end
usleep()
end
作りたいものは10回認識したあとそれでも条件が一致しなかった場合にelseを起動するという文なのですがどうしたらよろしいでしょうか。↑の文だと1回しか認識してくれずその後すぐにelseが起動してしまいます
105:デフォルトの名無しさん
16/10/15 07:22:22.29 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:デフォルトの名無しさん
16/10/15 11:39:37.03 4d5CGaAG.net
理系にとって最強のアルゴリズムは微分だから
booleanを返す関数とか興味なさそうだよな
107:デフォルトの名無しさん
16/10/20 22:50:26.41 yOW97v2T.net
30分たったら別の動作をするというマクロを組みたいのですがどうしたらいいでしょうか?
108:デフォルトの名無しさん
16/10/20 23:17:53.03 qfvHlq80.net
プラットホームとなるハードとOSと、
その”マクロ”を実現する為に使うインタープリタのライブラリと、
ホスト及びスクリプトの変更の可否と作成/変更するのは誰なのかをはっきりさせよう
109:デフォルトの名無しさん
16/10/20 23:35:02.03 CADipw6U.net
>>107
cron
110:デフォルトの名無しさん
16/10/21 08:41:00.29 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:デフォルトの名無しさん
16/10/21 09:06:48.82 spSptSrt.net
>>110
30分たったら繰り返し抜ける条件入れて”別の動作”するだけじゃん?
112:デフォルトの名無しさん
16/10/21 09:20:44.75 pdGvRJMA.net
現在時刻を見て30分の経過を判定したいなら os.time() が使える
ただスキルレベルから推察するに
「30分間の動作」を個別に作成して、30分(以上)間隔での自動起動を登録するのが楽な気がする
113:デフォルトの名無しさん
16/10/21 10:51:50.70 ZLbHPX6c.net
>>112
30分間の動作を個別に作成ということは1回1分の動作を30回行うということでしょう?回数で指定してしまうと、画像認識などを組み込んでいると、固まってしまった時などに対応出来ないので分数で指定したいなと思ったのです。os.timeというのを少し勉強してみます。
114:デフォルトの名無しさん
16/10/21 11:00:26.81 ZLbHPX6c.net
>>111
30分たった、というのをどう書き込めばしたらいいのでしょうか?
115:デフォルトの名無しさん
16/10/21 11:51:09.35 99qJcPaT.net
こう言っちゃ何だけど、ここで聞く以前のレベルだとおも
116:デフォルトの名無しさん
16/10/24 08:10:28.19 S9sd0iNh.net
luaの#で要素数が取れるのは配列の時だけ?
連想配列の時はとれない?
0となりました
117:デフォルトの名無しさん
16/10/24 09:28:56.92 uL8us8KR.net
>>116
とれない。どうしても要素数が欲しければ next() を繰り返して自分で数える。
正確には、配列と連想配列の区別はなく、オブジェクトに対する#演算子は
「nilでない要素を1,2,3..と数えてその最大値を返す」という意味。
内部的にはバイナリサーチを使ったりと最適化はされてはいる
118:116
16/10/24 10:38:12.37 XgnbxHK6.net
>>117
取り方まで教えていただきありがとうございます
nextで数えます
119:デフォルトの名無しさん
16/12/11 07:53:54.30 RsXQTiEs.net
Duktape と node.js の組み合わせというのも面白そう。
120:デフォルトの名無しさん
16/12/18 18:08:35.21 vfXpGXVv.net
luaに興味持ってこのスレきたんですが
どこから勉強すればいいですか
ほんとに経験0です
そらこのサイト漁ってみたけど全く理解できなかったんでなんかいいサイト教えていただきたいです
121:デフォルトの名無しさん
16/12/19 00:54:09.55 cmGH62+n.net
とりあえず、ちみはC言語でどのくらいのプログラムが組めるのかな?
122:デフォルトの名無しさん
16/12/19 09:49:24.63 7vRJ7kJt.net
最初なら動くものを触ったほうが興味が続くだろうから
既存のアプリなりゲームに付属のLua環境で慣れるのが良いだろうね
日英のWikipediaにLuaを採用している製品の一覧がある
123:デフォルトの名無しさん
16/12/20 08:01:28.19 kdK8nOSL.net
>>120
個人的には、コマンドラインでどうこうするよりも
DLLなどを扱える自分の得意言語にLUAを組み込んで
色々やってみるのがおすすめ
124:デフォルトの名無しさん
16/12/20 08:22:49.39 LqbSCARG.net
経験0なのがluaの経験なのか、プログラミングの経験なのか
luaを使うのが目的なのか、目的の為にluaを使おうとしてるのか
それで大分事情は変わってくる
lua簡単そう=Python並にGUIまでやろうと思えばできる と思ってるなら期待はずれ
125:デフォルトの名無しさん
16/12/22 11:41:07.55 8NoWo5zW.net
lua言語だけで全部やろうとするやつなんていないよ。
Cなどで作った外部関数をコールしたりDLLで拡張したりでGUI作るのが一般的かと。
126:デフォルトの名無しさん
17/01/02 14:24:52.29 Z2Rzarkn.net
遊んでるゲームがLua内蔵してるからそれを使って
カスタマイズしてみたいけどプログラミング経験無し
というケースだとほぼ間違いなく挫折する
127:デフォルトの名無しさん
17/01/31 21:25:07.85 l9i4M/G6.net
Lua 5.3.4 released.
128:デフォルトの名無しさん
17/02/01 08:43:33.03 VgN1at3T.net
Lua安定力半端ねえ
129:デフォルトの名無しさん
17/02/01 09:43:49.71 nwC60mRJ.net
安定しすぎてて話すことが無いくらいだよな
130:デフォルトの名無しさん
17/02/01 20:24:42.65 L9Dup9x5.net
新機能とか使わなきゃ、多少どころか結構古くても殆ど何も変わらんしな
131:デフォルトの名無しさん
17/02/01 22:01:05.85 /Tbv2NCs.net
luaにもクラス構文くれ
132:デフォルトの名無しさん
17/02/02 01:54:26.06 +Uwa3xtw.net
クラスの類は肥大化に加えて速度低下を招くんじゃないかね
JavaScriptみたいなプロトタイプに逃げるとややこしくなるし
素人のコードが実行時に変なとこに読み書きしにいって
とばっちり食う人が出てきたりするかもだし
クラス使うならPHPかAngelScriptおぬぬめ
133:デフォルトの名無しさん
17/02/02 02:05:08.03 SQuns8F5.net
Haxe で lua ターゲットにすればいいんじゃね
134:デフォルトの名無しさん
17/02/02 02:57:06.42 ExAPXdhA.net
Luaはプロトタイプベースのオブジェクト指向言語じゃん
135:デフォルトの名無しさん
17/02/02 03:00:25.24 jZJ6Fjye.net
132はlua使ったこと無いんでしょ
136:デフォルトの名無しさん
17/02/02 03:29:19.53 +Uwa3xtw.net
そうだったんだ、素で知らなかったスマン
プロトタイプベースみたいに実行時にコスト払うの嫌いなんよ
137:デフォルトの名無しさん
17/02/02 05:37:01.12 ExAPXdhA.net
スクリプト言語ならクラスベースだろうが実行時にコストかかんの一緒だろ何言ってんだ
138:デフォルトの名無しさん
17/02/02 05:59:25.88 +Uwa3xtw.net
PHPやAngelScriptは先にコンパイルするよ
それとクラスの宣言自体は何の処理も実行しない
139:デフォルトの名無しさん
17/02/02 06:19:52.32 ExAPXdhA.net
>>138
へぇ、何も実行せずクラスが出来上がるのか。お前の使ってるPHPとASは凄いなー(棒)
140:デフォルトの名無しさん
17/02/02 06:27:58.39 +Uwa3xtw.net
クラス宣言しただけのソースをPHPが暗黙的にコンパイルしたり
AngelScriptにコンパイルさせたりして、それを実行して何か処理が行われるとでも?
プロトタイプベースのスクリプトなら実体作る時に代入とかで変数の中身が変わるから、
それで処理が実行される、というなら話はわかる
インスタンス生成した後、プロトタイプの中身変えて再度インスタンス生成とかできちゃうから
プロトタイプベースの嫌いなんだ
141:デフォルトの名無しさん
17/02/02 09:20:30.60 OnfcMI/e.net
プログラミング言語は偏差値40の人にも理解できるものじゃなきゃダメ。
世間には大量のバカがいる。と先輩から教わった
142:デフォルトの名無しさん
17/02/02 14:20:50.39 jH7tx66P.net
>>141
禿同
143:デフォルトの名無しさん
17/02/02 14:35:52.16 Ty4k3X74.net
でも pcallから例外機構作って スコープ脱出時のフック(Haskellのbracket)作って try catch finally作って デストラクタ呼び出し機構作って クラス機構作って 俺スゲーしたいんだよ……
(案の定 黒魔術過ぎて誰にも見せられないものになった)
144:デフォルトの名無しさん
17/02/02 16:10:30.94 u5OOo/+t.net
俺が言ってるのはLuaにシンタックスシュガーとしてクラス構文を作るって事ね
ES6みたいに
>>133
HaxeってLuaタゲも出来たのか
145:デフォルトの名無しさん
17/02/02 17:22:15.83 t5eA0mNb.net
>>144
Haxe 3.3 からターゲットに入った模様
146:デフォルトの名無しさん
17/02/02 17:26:03.65 u5OOo/+t.net
>>145
3.3が最新だったのか
147:デフォルトの名無しさん
17/02/02 19:06:38.61 DsqPoeB2.net
>>146
最新は3.4でPHP7ターゲット対応らしい
148:デフォルトの名無しさん
17/02/02 19:13:07.99 u5OOo/+t.net
wikipediaの情報が古いだけだったか
wikipediaって芸能とかは反映一瞬だけど技術系はクソ遅いよな
それにしてもHaxe凄い
149:デフォルトの名無しさん
17/02/03 08:54:44.46 Z/TrYC07.net
>>143
finallyはgotoで十分やん的なスタンスみたいよ
150:デフォルトの名無しさん
17/02/03 10:20:50.39 ppyFFvug.net
Luaで扱いたい領域だと、例外処理なんかの複雑なことをさせたくはないな
・「ファイルを開く」「読む」「閉じる」 / 失敗で例外発生
・「ファイルを全部読んだ文字列を返す」 / 失敗ならnilを返す
後者のような、緩い頭で使えるAPIが揃っていたほうが嬉しい
151:デフォルトの名無しさん
17/02/04 02:14:00.58 f+CR9CVX.net
Sublime Text 3の70ドルって700円なんでしょ?
URLリンク(www.sublimetext.com)
URLリンク(www.sublimetext.com)
152:デフォルトの名無しさん
17/02/04 03:06:13.04 pHtZvk4V.net
sublimeはキーボードマクロ系がいまいち
153:デフォルトの名無しさん
17/02/04 11:10:30.26 ZvHVse3h.net
sublimeの70ドルが700円になる技は知らないが
買う気もないしスレ違いだからまあいいか
154:デフォルトの名無しさん
17/02/12 23:42:27.03 9E7ES6fF.net
Squirrelの拡張子はnut
リスだからか orz
155:デフォルトの名無しさん
17/02/15 09:24:27.53 w0SHr4I6.net
windowsでファイルを開きたいんだけど、
ファイル名の文字コードはS-JIS以外受け付けないんですか?
もしそうなら海外のソフトはファイルを開くのにutf8以外受け付けないんで、
海外のソフトでファイルを開くとsjis文字はutf8に勝手に変換されて
そのファイル名を使ってファイルを開くにはutf8をsjisに
変換するしかないですね。
156:デフォルトの名無しさん
17/02/15 09:29:08.83 djpTZ+ZE.net
wide版のapiならUTF16だよ>Windows
157:デフォルトの名無しさん
17/02/15 10:17:36.65 nJh54DV/.net
>>155
まず何の話をしてるのかから説明すること。
あなたの質問がどうすれたの話題に関係するのか解らないよ
158:デフォルトの名無しさん
17/02/15 11:06:56.17 uqX1U/Hr.net
>>155
「Luaの話」かつ「Lua側の文字コードはUTF-8」として進めるけど
・Luaはfopenにstringの生バイト列を渡すだけ
URLリンク(github.com)
・日本語版Windowsのfoepnはファイル名にSJISを要求する
ことを踏まえて対処するしかない
スクリプト層で対処するなら、ファイル名をSJIS変換した文字列を作って渡す
ホスト側 (C言語) で対処するなら、UTF-16変換して _wfopen を使うよう liolib.c を改造する
もちろん、ファイルの中身については別対応する必要がある
159:デフォルトの名無しさん
17/02/15 15:13:56.13 w0SHr4I6.net
変換しようとしてlua-iconvっていうのをmsys2でコンパイルしてmp
vと同じフォルダーに置いたけどクラッシュしました。
160:デフォルトの名無しさん
17/02/15 16:33:33.42 nr9SjX6f.net
下の層で文字コードの問題が起きてもLuaは下から上に受け流すだけ
まるで例外処理だな
161:デフォルトの名無しさん
17/02/19 21:18:00.13 5UFX9Lbh.net
mruby/cってmrubyと違うのか?
なんかmbedの日本語フォーラムに動かしたっぽいのが出てるわww
マイコンでmrubyはIoT的には理想なんだろうけど、キツイんじゃないか。
162:デフォルトの名無しさん
17/02/20 08:03:49.27 wCsxvy5W.net
141 名前:デフォルトの名無しさん[sage] 投稿日:2017/02/02(木) 09:20:30.60 ID:OnfcMI/e
プログラミング言語は偏差値40の人にも理解できるものじゃなきゃダメ。
世間には大量のバカがいる。と先輩から教わった
163:デフォルトの名無しさん
17/02/27 07:02:53.95 fO2hz1Bl.net
とあるゲームのluaなんですが、関数の後ろで初期化した変数が定義されてないって言われるんですが
local AAA = "AAA"
local function FUNC() print(AAA,BBB) end
local BBB = "BBB"
FUNC()
この辺りって実装に依存するんですか?言語仕様に寄るところなんですか?
164:デフォルトの名無しさん
17/02/27 08:52:15.69 +JCIcCN9.net
>>163
言語仕様に寄るものだね。Luaを名乗る実装であれば同じ挙動だと思うよ。
Luaはソースの後ろ(下方)で定義された変数を探してくれない。
FUNC() 定義時にまだ local BBB が無いから、グローバルな BBB を見に行く。
165:デフォルトの名無しさん
17/02/27 09:42:32.87 fO2hz1Bl.net
ありがとうございます。
仕様なら頭に入れておこうと思います。
166:デフォルトの名無しさん
17/04/17 19:00:43.83 8+oEZ/zD.net
nuttxって何て読んでる?
167:デフォルトの名無しさん
17/06/02 08:00:15.31 908dTl/b.net
JavaScript やると Lua の良さがつくづく分かるな
168:デフォルトの名無しさん
17/06/03 21:35:59.87 2Xsb8/qG.net
TypeScriptやるとLuaのクソさがつくづく分かるけどな
169:デフォルトの名無しさん
17/06/03 21:55:09.23 ByaclAQR.net
jsでもES6ならLuaより使いやすい
ES7・ES8なら圧倒的JS
170:デフォルトの名無しさん
17/06/03 22:49:59.57 PWCBRHZL.net
JSは何だかんだでメジャーなだけあって、
色んな団体がしのぎを削り合ったり一部の仕様を淘汰したりで、
良くはなってきたからなぁ
171:デフォルトの名無しさん
17/06/03 23:40:38.35 ez6eSYjJ.net
>>168
それはLuaに限らず動的型付け言語全てに当てはまる部分だと思うけどね。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
284日前に更新/94 KB
担当:undef