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
792 名前:791 mailto:sage [2010/01/13(水) 00:53:12 ] ごめん激しくうそ言った。 791の例でprintはglobal_fが作られた時点で固定化されているので 一番最後の方法では挿げ替えはできないね(orz
793 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:02:20 ] Tropico3という箱庭(miniスケープの方の)ゲームでlua使われてた。 なんかzlib圧縮(?)されてるから.luaファイルみてもわからんけど
794 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 09:45:12 ] >>792 それであってるんじゃないかな? print が global_f の外側で local で宣言されていれば global_f が作られた時点で固定化される(レキシカル変数として)けど、 そうでなければグローバル変数として参照されるので、 環境を変えればその影響を受ける。
795 名前:791 mailto:sage [2010/01/13(水) 19:13:03 ] 実際にビルドして試したので「間違い」で正しいかと。 本質的にはスレッドに対するsetfenvと同じで >94の勘違いと同質な問題。 子供の関数の呼び出しまで影響を受けるとなると 危険極まりないのも事実だし。(トレードオフではあるが) それよりもpcalやCスタック先からyield可能になったのは大きい。
796 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 07:28:39 ] あ、ごめんなさい。勘違いしてた。 関数が定義された場所の環境をそのまま引き継ぐってことですよね。 だから、スクリプトファイルを読み込むとき(dofile とかで)に in ... do を使うと、 以後、そのファイル内で定義された関数はサンドボックス環境で実行されるわけか。
797 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:43:54 ] Luaって table = { element1 = 3 element3 = "str" func element2() ...... end } みたいなことできませんか?
798 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:52:44 ] 事故解決しました。。。。ごめんなさい
799 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 06:58:28 ] Lua 5.2 work2キタ━━ ファイナルもうすぐかも
800 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 08:28:47 ] URLください
801 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 11:27:15 ] lua5.1.dllがノートンでウィルス扱いされるな
802 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 11:46:33 ] なにそれこわい
803 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 18:24:53 ] そういやShiftJIS対応Lua5.1.3もノートンでウィルスありと判定されてたな。 誤検出なのかな?
804 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:46:56 ] 皆luaスクリプトの暗号化はどうやってるん? リファレンスマニュアル探したけど、それらしい物が無かったんだが…
805 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:53:24 ] Luaってシリアライズできなかったっけ
806 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 01:12:18 ] lua_load/lua_dumpで自前で暗号化するくらしかできんよね
807 名前:デフォルトの名無しさん [2010/02/03(水) 08:55:04 ] 暗号化したファイルを読み込んで復元し、文字列にする>luaL_loadbufferやluaL_loadstringにその文字列を渡してコンパイル って手順ではダメ?
808 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:27:02 ] Python人気ねーな。luaより断然コード書きやすいのに。遅いけど
809 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 12:43:27 ] >>808 >>4
810 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 12:46:04 ] Luaがもうちょっとキモくない文法ならいいんだけどなぁ
811 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 12:49:10 ] 文法だけ変換するプリプロセッサかトランスレータのようなものを作ればいいんじゃないだろうか
812 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 13:02:55 ] たった数十kbくらいのサイズで Cライクな文法が使える超軽量な組み込みないかな LuaとかPawnも、小さい部類だろうけど不要な物が多すぎる
813 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 18:35:51 ] asじゃあかんの
814 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:16:11 ] Win版でUTF8とUTF16を相互変換するようにLuaを改造したけど需要ないかしら たとえばSDLとか ところで、Windows x64向けにビルドしてみたけど > print(2^63 - (2^63+1)) でなぜか0が返ってくる > print(2^31 - (2^31+1)) なら1になるけど ちなみにlua_Integerの実体ptrdiff_tは8バイトになってる どこがおかしいのかわからん
815 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:57:11 ] 整数も浮動小数点で計算するからだそうだ‥‥ 64bit integerに対して64bit doubleじゃ精度足りないっての パッチがあったからつっこんでみるが、ちゃんと動くか心配だ
816 名前:804 mailto:sage [2010/02/03(水) 21:57:40 ] >>805->>807 アドバイスありがとう。 luaL_loadbufferやluaL_loadstringを使うという発想は思いつきませんでした。
817 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 15:53:15 ] >>811 Euphoria, t3x, moto, JavaなどCトランスレータを実装している言語は探すと色々あるものの、 トランスレート後に吐いたCソースとハンドコードしたCソースとのリンク方法が 文章化されてなかったりするするんだよな。 >>812 小さくはないが...elastiCは? ttp://www.elasticworld.org/
818 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 19:12:28 ] Luaスクリプトってバインダなしで使い物になるレベル?
819 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 19:41:20 ] 何らかのバインダ及びグルーが無いと、スクリプトの意味が無い気が。
820 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:35:40 ] mingw ,gcc を前提としてるバインダが多い様な気がして lua手を出しにくいのです。。。
821 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:52:42 ] lua51.libとlua5.1.libって何が違うんだろう
822 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:53:06 ] それは気のせいないし思い込みでは……
823 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:57:42 ] .so を makefile でつくる、という事例にちょくちょく 遭遇しまうまう・・・orz
824 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 22:02:22 ] バインダはLuaではなくバインダという言語である!!
825 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 22:04:46 ] $(CC) を $(CL) とか代えて、pkg-config はそのままでも nmake -f makefile でビルドできるもんなんだろうか・・・
826 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:11:51 ] pkg-configはシェルスクリプトだからmsysなりcygwinなり要るだろ
827 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:39:23 ] nmakeには、一から書き直して食わしてる 必要なobjぐらいなら写せるだろ
828 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:52:13 ] それ全然lua関係ないじゃん 必要なc/cppファイルひろって Makefile 書き直すなり Visual Studio でプロジェクトファイルつくるなりぐらいやりなされ。 そんな難しいもんじゃない。
829 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 11:59:44 ] >>828 こういう問題を回避するためにSquirrelのソースパッケージをCMake対応にして フォーラムに投げてみたら、いらないって言われた……。
830 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 18:05:55 ] オレはCMakeで固まろうとした
831 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 12:14:44 ] luaのuserdataとlightuserdataの違いって userdata ・lua側でアロケート ・lua側でデアロケート(GC) ・Cには参照のみが渡される ・Cからは寿命が分からない lightuaserdata ・C側でアロケート ・C側でデアロケート ・luaには参照のみが渡される ・luaからは寿命が分からない これ以外になんか有りますか? それとluaとCでuserdata、lightuserdataの寿命を同期させる方法は有りますか?
832 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 12:41:41 ] meta tableの有無も違ってたかも
833 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:15:34 ] >>831 これは心の贅肉をそのまま箇条書きにしたみたいで面白いな 考え方としてはとりあえず lightuserdataは無くても整数値で代用できる、と割り切ってしまうほうが簡単 そうすると、整数とuserdataを比較するのは無意味だとわかる
834 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 21:32:49 ] |Д゚)<バインダが面倒な人向けにいいもの置いておきますね |Д゚)つ[AngelScript] |ミ サッ [AngelScript]
835 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 21:47:45 ] // / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
836 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 23:25:21 ] >>832 ,833 レスどうもです メタテーブルの有無は重要ですね いろいろいじってようやくユーザークラスをLuaに公開できるところまでこぎつけました しかしlightuserdataは使い道がわからず・・・
837 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:50:27 ] lightuserdataはCからのポインタの入れ物として使うのが想定されているらしい。
838 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 14:36:10 ] lightuserdataは、スクリプトで操作したいクラスのインスタンスとか放り込むんじゃないの? ゲームとかだとひとつのスクリプトで複数のオブジェクトを制御する必要があるし。
839 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 15:41:29 ] C++のオブジェクトとLuaのオブジェクトが混在するのか・・・ C++/CLIならもっとすごいことになるな
840 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 17:14:33 ] C++のオブジェクトをスクリプトで操作する感じかな。 例えばスクリプトで SetSpeed(1,20) とかいうような関数があった場合、C++側でlightuserdataを取り出し、 //lightuserdataからObjectのポインタを取り出す Object *lpObject=(Object*)GetLightUserData(L); //Objectを操作する lpObject->SetSpeed(x,y); って感じの処理をするグルー関数を用意する。
841 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:22:00 ] lightuserdataでC++/Luaのインスタンスを協調させてみようかと頑張ってるんだができないorz userdataでやれば上手くいくんだけどlightuserdataのほうが軽いらしいし・・・ C++側で tableを作る tableにインスタンスへのポインタをlightuserdataで格納 tableに各種メソッドを格納(メソッドはself(第一引数)tableからインスタンスへのポインタを取り出してクラスのメソッドをコールする) さらにtableを積んで__gcフィールドにデリータを格納 最初のテーブルにメタテーブルとして設定 最初のテーブルを返す という感じでやってるんだけどLua側で__gcが呼ばれてくれない mt = getmetatable、mt.__gc(hoge)とすればちゃんとデリータを呼んでくれるのに・・・ こっちがDLL codepad.org/5CuryxGE こっちがLua codepad.org/BON62sBh
842 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:44:41 ] userdataとlightuserdataは全く別物。用途が違う。 パソコンでできることがケータイではできないと嘆いているようなもんだぞ?
843 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:23:56 ] >>841 そういうことができなくなってる分軽いわけなんだが……
844 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:31:07 ] じゃあlightuserdataは何に使うんだろう コールバック的な使い方でしょうか
845 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:44:12 ] だから主にC側で作ったインスタンス(のポインタ)の受け皿だって
846 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:51:50 ] >>844 てか、マニュアルにもCのポインタそのものだって書いてあるだろう。 Cでよくあるハンドルスタイルやコールバックスタイルの構造を直接扱うためにある。 例えば fopenの帰り値の FILE* を void* にキャストして lightuserdata として持ってそのまま使う。 処理する時には、必ずCの関数をいちいち呼び出すのを前提として、 「LUA側は持ってるだけで何もさわらないデータ構造」として準備されてる。 これの使い方が直感的にわからない人がいるってのが驚きだった^^;
847 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 20:54:46 ] わからない人というか、深読みする人もたまにいるな。 ひどくなると「それはただの××だよ」と言われると反論してくる。 「お前はそうやって分かったつもりになってるだけだ」とか。
848 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 21:05:07 ] lightuserdataはテーブルのキーとして使う。 自前のオブジェクトのアドレスや、OSから渡されるハンドルをキーにしてテーブルを参照すれば、同じアドレスやハンドルに同じuserdataを対応させることができる。 ちなみに、この時のテーブルはweak tableにしておくといい。 ということを初めて知った時は目から鱗だった。
849 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 22:40:47 ] 何かLuaって面倒くさいな(´ω`)
850 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 23:14:16 ] ひたすら軽量さが売りの言語って感じだなあ。
851 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 23:22:51 ] ところで848のテクニック?のサンプルソースとかどっかでダウンロードできないかな?
852 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 23:50:34 ] >>841 みたいにuserdataの方にクラスのインスタンスのポインタを格納して Luaから呼ばれるC++側の関数で取り出して使ってるんだけど、>>831 みるとuserdataはLua側でGCかかるの?
853 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 00:40:38 ] codepad.org/8Z7d8J62 うーんこんな感じですかね? ポインタをキーにという発想はすごい便利そうな予感がしますね しかしグルーコード内のエラー処理とかってどうすればいいんだろう C++例外を投げるべきなのか、関数内でもみ消してlua_errorするべきなのか
854 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 07:40:28 ] >>852 「C++側」と「Lua側」をきっちりと分離したいんだな。 組み込み言語は、そういう幻想にうんざりしてる人のためにあるんだと思うけどな。
855 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 10:48:05 ] Luaって速度が同じぐらいで、文法が素直な組み込みスクリプトが作られたらあっという間に駆逐されそう
856 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 11:02:47 ] >>855 作られてないから駆逐されてない訳で
857 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 11:04:23 ] もともとマイナーな分野なのに亜流が既にいくつも出ていてそれができないってことは 実際のところLuaのバランスが優れているってことでしょ
858 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 12:13:32 ] 罠を避けるのが上手い。 静的型 クラス メタプログラミング 並列処理 遅延評価 参照透明性 ・・・
859 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 12:58:59 ] 文法重視で速度気にしてない人は squirrel 使ってるし普通に棲み分けになってんじゃね?
860 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 13:04:33 ] 自分がLua選んだ理由は日本語の資料が一番多かったからだな。 次点の理由はスタティックリンクできたから。
861 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 19:55:29 ] 文法が嫌いとかいうやつって、 自分の英語ができないのは分法を教えるからって口だろ
862 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 20:54:28 ] まぁ855の言うことが真ならSquirrelによってあっという間に駆逐されてるはずだな。
863 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 20:56:42 ] >>861 逆だよ。 文法ができないから英語できないんだよ。
864 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:00:44 ] >>863 >861が何を言ってるのか分かってるの?w
865 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:12:14 ] 俺スクリプトをLuaのVM用のバイトコードにコンパイルすればいいじゃん
866 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:19:01 ] yieldをライブラリとして提供するのは実装の幅を狭めてると思う
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とかにはなさそうだ…