1 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 09:11:41 ] LuaやSquirrelなどアプリケーションへの組み込み用途で 使われるプログラミング言語についてのスレッドです まとめwiki(なにか質問する前に必ずみること!) wikiwiki.jp/lua/ その他の参考URLは>2から ■前スレ 【Lua】組み込み系言語総合【Squirrel】 pc12.2ch.net/test/read.cgi/tech/1205208141/ ■過去スレ その3 pc11.2ch.net/test/read.cgi/tech/1160799232/ その2 pc8.2ch.net/test/read.cgi/tech/1063711237/ その1 pc5.2ch.net/tech/kako/1034/10341/1034182349.html
867 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:28:24 ] >>862 >>347 みる限り速度はでLua>>>>Sq
868 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:34:53 ] はじめて日が浅いけど L とか -1 が乱舞する C拡張に馴染む日はくるんだろうか俺・・・
869 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:37:30 ] >>868 俺は2日で拡張できるようになったぞ
870 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 09:34:09 ] >>347 では速度がLuaより早いにも関わらず日本ではあまり使われていないGameMonkey。 ざっと見た感じは文法も特に変な感じじゃないから、使いやすそうな感じはするんだけどね。 日 本 語 資 料 皆 無 だ け ど な
871 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 11:26:11 ] >日本語資料 月並みなことを言うと 因果関係ではなく相関関係ならあるかもしれない
872 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 11:32:07 ] Pawnも文法はシンプルに見えるが流行らないのはやっぱり何かが足りないんだろうな
873 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 14:25:57 ] 足りないというよりはLuaの情報量や実績やユーザ数を 代えられるほどのものではないということだろう
874 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 16:13:12 ] Luaってゲーム以外で使われてますか?
875 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 16:40:55 ] >>874 SciTEとか
876 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:04:31 ] apacheとかwiresharkの拡張に地味に使われてたりする もともとゲーム向けってわけじゃないしね
877 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:50:35 ] Schemeが以外と流行らなかったな
878 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:56:04 ] >>874 TextAdept caladbolg.net/luadoc/textadept2/manual/1_Introduction.html 半分以上 Lua で記述され、また Lua で拡張可能なテキストエディタ iconv で読み書きし内部は UTF-8 なので、日本語も使用可
879 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 21:54:30 ] >>874 tokyotyrantでLua知ったよ
880 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 14:33:21 ] dev.pocoo.org/projects/pygments/browser/pygments/lexer.py www.frykholm.se/files/markdown.lua coderay.rubychan.de/ プロジェクト管理ツール を作ろう Redmin, Retrospectiva, Trac 基本組み込み用途だよね、とツールを作る用途で 移行する気が起きない理由はこの辺にありそうだとさっき気がつきました・・・
881 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 17:47:01 ] lua5.1のDLL版を使ってるんですが、グルーコードの呼び出し規約は__cdeclでいいんでしょうか? それとも__stdcallにしたほうがいいですか?
882 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:55:07 ] >>881 たぶん__cdeclだけど仮に間違っていたとしても name manglingの違いで簡単に見分けられるような気がする
883 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:57:16 ] DLLを使う側の言語の規約に合わせるんだ Cでしか使わないのなら目的にもよるがどっちでもいいと思うがな
884 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 22:45:42 ] >>882 >>883 thxです さっきluaのヘッダ見たところ呼び出し規約は書いてなかったので多分C言語デフォルトのcdeclでよさそうですね
885 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 14:50:36 ] Programming in Lua携帯するにはしんどいな PDFで売ってくれりゃいいのに
886 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 15:59:41 ] ばらして持ち歩けよ
887 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 16:49:25 ] 組み込んで歩けよ
888 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 18:52:41 ] lua で連想配列形式のテーブルの要素数を調べる方法ある? 配列形式だったら #tbl で、出来るみたいだけど・・・。
889 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 20:14:39 ] userdata型に型情報を与えて BOOL isHoge(lua_State *, index); の形で使いたいんですが luaのほうで予め提供されてる方法はありますか? それとも、自分で独自にマップするものなんでしょうか?
890 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 20:46:48 ] >>888 pairsやnextかな
891 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 21:04:58 ] nextだとnilが設定されたフィールドでハマるので pairsを使った方がいいんじゃまいか
892 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 23:23:44 ] luabashがすばらしすぎる。 bashにluaインタプリタ機能追加してbashの拡張ができる& bashが生きている間luaインタプリタも生きているのでlua変数を 保持し続ける。これ重要。 ファイル操作が多いとやっぱりシェルスクリプトが楽だけど コマンド間の結果の連携を環境変数orファイル書き出しで 実装するのはかったるい時に大活躍な予感。
893 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 01:40:15 ] 組み込み用途以外でLua使おうなんて思わんな 汎用的に使うには標準ライブラリ貧弱だし thenとかdoとか書くの面倒だし
894 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 02:40:47 ] 低レベルな質問で申し訳ないのですが wxFormBuilderから追加したイベント宣言を定義するのはどうしたらいいのでしょうか? Generateで書き出した.hファイルにある virtual void OnButton1( wxCommandEvent& event ){ event.Skip(); } の{ event.Skip(); }をコメントアウトすることで 出来なくも無いのですが ヘッダファイルの行頭に // PLEASE DO "NOT" EDIT THIS FILE! とありますし後々修正があったときに困りそうです。 // Virtual event handlers, overide them in your derived class このコメントが鍵のような気もするのですが正直意味が分かりません・・・
895 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 03:09:57 ] 誤爆ってる、失礼しました
896 名前:デフォルトの名無しさん [2010/02/14(日) 11:30:21 ] /ヽ /ヽ ':' ゙''" `':, ミ ・ω・ ;, :; . っ ,つ Lua! `:; ,;' `( /'"`∪
897 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 16:13:25 ] 自作型で__gcでC側のリソースを開放してるんだが __gcをうっかり書き換えてしまわないように メタテーブルを隠蔽あるいは変更不可にすることはできるだろうか?
898 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:19:53 ] __gcということはユーザーデータか。ならばスクリプト側からはメタテーブル自体の変更はできない。 さらにメタテーブルに__metatableを追加しておけば隠蔽も可能になり、メタメソッドの変更、追加を防止できる。 ただしこれらはC側やdebugライブラリには効果がないし、制限する手段も(多分)無い。
899 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:52:18 ] C++でRAIIをうっかり忘れてしまうレベルだ 初期化以外でsetmetatable()を使うのか?
900 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:33:58 ] >>898 __metatableというのがあったのか というかユーザデータはもともと変えられないって知らなかったorz レスthxでした >>899 metatableをうっかり書き換えるのはクライアントで、クラスじゃない RAIIをうっかり忘れるのとmetatableをうっかり書き換えるのは別次元の問題 そのクライアントのついうっかりを封印して出来なくしてしまえれば安心して寝れる
901 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 23:37:24 ] >>900 なにが別次元だ ファイルを読んだり書いたりdllをロードしたりする、普通の言語じゃないか
902 名前:デフォルトの名無しさん [2010/02/19(金) 02:15:03 ] (◞≼◉ื≽◟◞౪◟,◞≼◉ื≽◟ )
903 名前:デフォルトの名無しさん [2010/02/19(金) 20:31:33 ] ∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
904 名前:デフォルトの名無しさん [2010/02/21(日) 15:46:38 ] (´・ω・`)
905 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 16:32:07 ] LuaInterface 使ってる?
906 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 16:55:48 ] (`・ω・´)
907 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 17:51:50 ] ルアのmodule(name)のnameが被ったらどうなるの?
908 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:06:58 ] name ru houkei
909 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 02:06:10 ] local foo = function () local c = 0 return function () c = c + 1 return c end end f1 = foo() f2 = foo() この場合f1とf2に渡される情報はcと関数の参照だけ? それともcを含めて関数まるごとコピーされちゃったりする?
910 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 08:44:16 ] クロージャとしては別々だけどコードはもちろん共有
911 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 08:54:10 ] UpValとProtoの参照 それとenvの参照
912 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 02:47:27 ] なんかロベルトさんがLua5.2のグローバルとか環境まわりの仕様変え始めたような。lua-l参照。
913 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 14:12:12 ] バージョンアップは無能レベルに到達するまで止まらない でも5.2はまだリリースされてないから止めようと思えば止められるけど
914 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 04:05:04 ] イエルサリムスキー教授の翻訳本にuserdataのメタテーブルはLuaからCを出しぬいて手出しすることはできないから安全、みたいなことが書いてあるんだけど ud = create_ud() getmetatable(ud).__gc = nil のようにごくごく普通にアクセスできるように思えるんですが・・・これは本の間違いじゃないですかね?
915 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 08:33:03 ] >>914 保守的GCって知ってるか 解放すべきかどうか疑わしいときは、解放しないほうが安全
916 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 11:12:19 ] >>915 今ググって知りました しかし、保守的GCの話は>>914 の話とは関係ないように思えるのですが、実は何か関係があるんでしょうか?
917 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 11:20:30 ] Squirrelに興味があるやつは見ておけ。 よく考えられてるサンプルだと思う。 ruriko.denpa.org/201002c.html#23
918 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 18:44:23 ] >>914 userdataはsetmetatableはできないがgetmetatableはできる。 よってその例のようなアクセスはできる。 禁止したいなら__metatableを適切な値に設定するといい。
919 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 19:47:36 ] 安全とは禁止することと見つけたり・・・
920 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 11:27:59 ] coroutineの利点がいまいちわかんね state:update()の戦略の方がコスト低いしわかりやすいと思うんだが
921 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 12:48:09 ] 利点がわかんないなら 君には不要って事なんだよ 無理して使う必要ない
922 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 15:01:14 ] 自分の理解している範囲の外に利点があることだって普通にあると思うけど。
923 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 15:08:48 ] 複数回に分けて動かさないといけない処理を継続的な処理として実装可能になる。 結果として同期処理の不要な軽量スレッド的な実装ができるようになる。
924 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 15:46:16 ] コルーチンは、ゲームで「アイテムを取った直後に一定時間白くなる」という処理を書くときとか便利だな。
925 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:04:54 ] >>921 むちゃくちゃな論理展開わろた^^ >>922 ですよね >>923 複数回に渡って処理を分割するのってstateパターンでも普通にできることだと思う コルーチンじゃないとどうしてもできない、あるいは明らかに優れてるっていう要素が自分には見えないんすよね
926 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:07:46 ] Stateパターンが「普通」? Stateパターンのような回りくどいことをしないといけないのがおかしいとは思わない?
927 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:23:51 ] >>925 どうしてもできないから、で使ってる人はいないよ。 機能的にすぐれてる部分は全く無い。ぶっちゃけコルーチンも、 全状態保持を言語側が担ってくれてるだけのおおがかりな state だから。 State パターンで何個もあったり、さらには個数が変動したりするオブジェクトの複雑な 挙動のからみあいとか、考えたくもないけど、コルーチンだとわりとすっきり書ける。 最初に仕様にあわせて組んでいくだけなら State でもいいんだけど、 後から見直す時とか、細かい修正に対応する時とか、コルーチンのが圧倒的に読みやすいし記述も楽。 遷移図をそのまま if や while やら使って書き起こすだけだけになるからね コルーチン切り替えのコストは、固定で組まれた State 切り替えよりかなり大きくなってしまうけど、 表記の楽さがそれを上回る、と判断した人が使うもの。あらゆる状態遷移を頭の中だけでさくさくくめてしまえるので、 State のが簡単だよって言う人は知り合いにもいるけど、それ、凡人には無理ですからー
928 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:36:19 ] そもそもオブジェクト指向におけるデザインパターンというのは、 言語側でサポートしきれていないニーズを無理やり克服するためのバッドノウハウのようなものだ。
929 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 18:44:20 ] >>925 例えばFizzBuzzの通常版が既に完成していて function fizzbuzz(n, print) for i = 1, n do ... print("FizzBuzz") ... end 後になってState版が必要になったときに使う。 co = coroutine.create(function() fizzbuzz(100, coroutine.yield) end)
930 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:20:25 ] コルーチンの便利さは、記述が簡単になるって点だな。
931 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:34:16 ] coroutine.create(function (a, b) showMessageDialog(a, b, "Hello! World!") showMessageDialog(a, b "byebye")end) とか lua-users.org/lists/lua-l/2009-11/msg00214.html >Run Lua in a separate thread and somehow stop it if it takes too long. とか おつかい行って来てよ、と丸投げしまう簡便さ でもちゃんと帰ってこれるのかな・・・的不安
932 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 08:18:34 ] >>930 コルーチンは記述が簡単なだけに非同期対応が面倒に感じるんだよな >>924 みたいな単純な処理ですら、アイテムを連続で取るとキャラが白くならなかったり、 直後にゲームクリアしてもキャラが白いままだったり、直後にキャラが変身するとハングしたりとか Stateパターンならちゃんと回避できる人がコルーチンだと回避し忘れるのはありがちなこと
933 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 14:56:36 ] (何言ってんだコイツという眼差し)
934 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 23:06:08 ] >>932 他の人はコードで例を示しているんだから、君もコルーチンよりStateパターンが明らからに優れているという例をコードで示したら? そうでないと、ただの知ったか君と区別つかないよ
935 名前:デフォルトの名無しさん [2010/03/08(月) 23:32:20 ] >920の「state:update()の戦略」が良く判らん……トランザクションのこと?
936 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 00:01:37 ] Stateパターンを理解してりゃ、そこは判らない文脈じゃないと思うけど。
937 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 00:07:39 ] switch(state) { case WALK: … case WAIT: … case ATTACK: … } をちょっと格好付けただけ コルーチンと比較されるような使い方の場合は特にメリットもない
938 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 00:47:56 ] >>936 ハイハイ、逃げないでコードで示してね それともやっぱり、知ったか君だったのw
939 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 01:02:11 ] そもそもコルーチンと組み込み系言語って何か関係あるの?
940 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 01:15:03 ] このスレで話題になることが多い lua と squirrel が搭載している、以上のものではないかな 他何が搭載してたっけ
941 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 01:20:31 ] よくわかんないけど状態遷移するたびにStateインスタンスを破棄、生成してれば 切り替わるタイミングが明確になって後片付けとかが確実になるとかそういうことなんじゃないの
942 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 02:34:51 ] ちなみに型が厳密な言語でコルーチンを扱うと複雑になるか、制約が大きくなる どのみちオブジェクト指向が好きならJavaとかC#とかで正解なんだよ
943 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 02:43:45 ] 小規模だとコルーチンのがキモチイイけど、遷移が複雑になってくると機械的に遷移図からコードに直せるステートのほうがいいかなって感じる
944 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 03:03:14 ] 画面遷移処理とか、ADV的な演出の逐次制御とかはコルーチンがいいかんじにはまるね
945 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 09:40:22 ] コルーチン=呼び出すと区切りの部分まで実行してくれる関数オブジェクト みたいな感じで理解してるな。 Luaの場合、coroutine.resumeで呼び出すと、次のcoroutine.yieldの部分まで実行してくれる。
946 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:51:46 ] 10回繰り返し、という処理を、途中でイベントを受け取ったりしながらでも、 for (i = 0; i < 10; ++i) ですらっと書けるのがコルーチン。
947 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:59:05 ] cでcoroutineを自作しようと思ったら難しかったでござる。
948 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:26:47 ] 奇怪で制約の多いマクロを組むか sjljでコンテキストを書き換えるかの二択だな
949 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 17:11:31 ] その話題までいくともう組み込み言語まったく関係ないな。
950 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:01:13 ] マルチスレッドで済む処理まで凝るーチン
951 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 13:54:54 ] ルアってなんであんなテーブルマンセーなの?
952 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 14:17:35 ] シンプルだからじゃない? このテーブルひとつで普通の配列も連想配列も オブジェクトまでも扱えるから... でも無理やりオブジェクト指向マネるくらいなら ほかのスクリプト言語を検討するよ
953 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 15:10:04 ] Luaは初心者向けに見えて 実は玄人向け
954 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:48:04 ] 違うな M向け マニアとマゾ
955 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:37:58 ] AngelScript|Д`)<呼ばれたので飛んできました GameMonkey|Д`)<俺もー CRIScript|Д`)<俺もー
956 名前:デフォルトの名無しさん [2010/03/10(水) 18:51:20 ] \ l´⌒\⌒\ \\ \ \ ヽ ) ) \\ \\ ( \ \∩___∩ \\ \ \ ⌒⌒| ノ ヽ \\ \ \ / ● ● ト、\ \\\ \ Y | ( _●_) ミ\ \\\ \ / 彡、_ |∪| ノ \ \\\ (____)―ヽノ' ヽ  ̄ ̄ ヽ\\ \, j l l .l } Lua! l (_ノノノノ
957 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 18:29:44 ] 過疎
958 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 18:55:01 ] コルーチンのAAください
959 名前:デフォルトの名無しさん [2010/03/14(日) 19:23:00 ] ●)(●):::\ .\ :::::::::::::::::::::::::::::::::::::::::::::::: (__人__)./ ̄ ̄ ̄\:::::::::::::::::::::: / ̄ ̄ ̄\ コルーチン ::` ⌒´./ ⌒ ⌒ ヽ::::::::::::::: / ⌒ ⌒ ヽ ::::: ./ (●)(●) |:::::::::::: / ( ●)(●) | \ | (__ / ̄ ̄ ̄\ | (__人__) } コルーチン \/、. / ⌒ ⌒ ヽ/、.. ` ⌒´ .ヽ \ / (●)(●) | | \ \ | (__ / ̄ ̄ ̄\. | / |\ \/、. / ⌒ ⌒ ヽ──┐ |丿 コルーチン | .\ \ / (●)(●) |──┤ | | |\ \ | (__人__) }──┤ | | | \ \/、. ` ⌒´ ヽ\
960 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:37:44 ] /ヽ /ヽ ':' ゙''" `':, ミ ・ω・ ;, :; . っ ,つLua `:; ,;' `( /'"`∪
961 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:50:30 ] lldebugみたいな感じのデバッガって、他のスクリプト言語にあるんだろうか? JavaやPythonとかだと余裕でありそうだけど、SquirrelとかAngelScriptとかにはなさそうだ…