プログラミング言語 Lua その3
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2006/10/14(土) 13:13:52前々スレ http://pc5.2ch.net/tech/kako/1034/10341/1034182349.html
前スレ http://pc8.2ch.net/test/read.cgi/tech/1063711237/
本家 http://www.lua.org/
lua-users http://lua-users.org/
LuaForge http://luaforge.net/
Lua 5.1 リファレンスマニュアル(日本語訳)
http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html
0855デフォルトの名無しさん
2008/02/29(金) 07:57:010856デフォルトの名無しさん
2008/02/29(金) 12:13:320857デフォルトの名無しさん
2008/02/29(金) 14:34:16うまいこといったつもりか!
0858デフォルトの名無しさん
2008/02/29(金) 15:42:34スタックはややこしいよね……。
テンプレートは使ったり使わなかったりかな。単純な関数呼び出しぐらい
なら、普通に書いたほうがわかりやすいので。
0859デフォルトの名無しさん
2008/02/29(金) 18:37:04結局スタック操作から逃れられなかったなあ。
操作をできるだけ簡略化しようとして変態的になっていく不思議。
スタックの取得とかはこんなん。
lua_Var var = Lua.peek(-1);
↑Luaが扱うオブジェクトなら何でも入る共有体クラス
関数呼び出しはこんなん。
( Lua.global()["object"]["setPosition"] << 1.0 << 12.3 << 0.4 )(3, 0);
0860デフォルトの名無しさん
2008/03/01(土) 00:10:39luaのバージョンも進んでいるうえ、VS2008も販売された今では、
サポート放置されたライブラリには手が出しにくいです。
0861デフォルトの名無しさん
2008/03/01(土) 00:29:400862デフォルトの名無しさん
2008/03/01(土) 00:44:46最小限の関数だけエクスポートして積極的にLua側に
ロジック追い出すように練り直した方が良いと思うけど。
0863デフォルトの名無しさん
2008/03/01(土) 00:46:58http://code.rasterbar.com/luabind/wiki
0864デフォルトの名無しさん
2008/03/01(土) 08:56:590865デフォルトの名無しさん
2008/03/01(土) 09:32:40変態っぽいw
でも関数呼び出し面白い
>>864
スタックは仕組みがわかってても、日常のプログラミングでつかわないから疲れる
で、Squirrelは基本ライブラリですらスタック周りのバグがあったりして、
ソースみながら理解しようとしても信用できずに不安(もちろんパッチなげたけどさ)
0866デフォルトの名無しさん
2008/03/01(土) 09:33:45DMonkeyもスレ違いじゃないよね?
0867デフォルトの名無しさん
2008/03/01(土) 10:09:03<< 1.0 << 12.3 << 0.4ってのは何を渡してるの?(3,0)は関数呼び出しって分かるけど。
>>865
バグについてkwsk
確かにスタック操作は煩雑だよね。特に開放。忘れたらリソース食いつぶすって点で
new-deleteに通じるものがある。
Squirrel使う予定なんだけど、やっぱりスタック操作の理解を深めるためにバインダは
自作したほうがいいかな。
0868デフォルトの名無しさん
2008/03/01(土) 10:22:28情報処理試験の勉強をするのがよいとおもう。
0869デフォルトの名無しさん
2008/03/01(土) 10:43:45> 自作したほうがいいかな。
Squirrel Wikiのバインディングを一通り試してみてからでも遅くはないと思う。
http://wiki.squirrel-lang.org/
どっちにしろ、1から書くには大変だと思うので。
>>867
バグkwsk覚えてない。SqPlusのバグだったかも。
>>867も言うような pop忘れだったと思う。
俺が見た時は、安定版にパッチが取り込まれてなかった。
大分前、去年の話だけどね。
他にも似たようなところがあるかもしれない。
0870デフォルトの名無しさん
2008/03/01(土) 10:48:13まぁ車輪の再発明もいいところだが、バインダ作るよ。できたら公開するぽ
0871デフォルトの名無しさん
2008/03/01(土) 10:51:39>>869
とりあえずSqPlusのソースを読み始めたところ。SqPlusと似たインターフェイスになりそう。
名前空間何にしよう。とりあえずsqbindでいいか。
0873デフォルトの名無しさん
2008/03/01(土) 13:13:31ストリームみたいにしたいなら
gcall<<"object"<<"setPosition"<<arg<<1.0<<3.0<<-2.0<<end;
みたいにマニュピレータつかった方が見やすいと思うけど
0874デフォルトの名無しさん
2008/03/01(土) 14:17:150875859
2008/03/01(土) 14:20:12その辺は考えてなかった。
0876デフォルトの名無しさん
2008/03/01(土) 14:59:38a << 1.0 の戻り値はどんなオブジェクトになっとるの?
a と同じオブジェクトを返しているのですかね。
ということは、メソッドチェーンみたいなのでも可能か・・・
a.push(1.0).push(12.3).push(0.4).call(3, 0)
みたいな
0877デフォルトの名無しさん
2008/03/01(土) 15:59:30SqPlusを読んで勉強中。
SquirrelObjectのコピーコンストラクタだけど、以前保持していたオブジェクトへのハンドル
はsq_releaseしなくて平気なんだろうか。
operator=ではちゃんとsq_releaseしてるし、バグだよなぁ・・・やっぱり。
0878デフォルトの名無しさん
2008/03/01(土) 17:21:12アホス つってきまつ
0879デフォルトの名無しさん
2008/03/02(日) 02:02:22なんでもいいけど一行でcallできるのと
一行でnative closure登録できるようにしとけば
他はほとんどつかわんよ
0880デフォルトの名無しさん
2008/03/02(日) 06:28:46それを人はバインダと呼ぶ
0881デフォルトの名無しさん
2008/03/02(日) 11:54:53ttp://colon.nsf.jp/lua/
MSVC用なんで需要なさそうだけど^^
0882デフォルトの名無しさん
2008/03/02(日) 12:48:58ソースコードのほうはいいけど、test.luaのほうの文字コードがぶっ壊れてるように見えるんですが。
str = "\\5爐!Eェ殉\\}柔檻5\"xさぜ\"ェ殉柔爐さ檻Exぜ!}"
pat = "[^檻]*"
testf( 1, str, pat, "xさぜ\"ェ殉柔爐さ" )
これってテスト用だからわざとだったりします?
でも、SJISじゃないって警告が8箇所出てたりもします。
0883デフォルトの名無しさん
2008/03/02(日) 13:13:04漢字コードの境界部分を多く含むようにしてあるので
フォントによっては表示すらできません
0884デフォルトの名無しさん
2008/03/02(日) 14:01:30GCの負荷を分散するわけだからどうしても重くなるよね。
やっぱLuaかな・・・
0885デフォルトの名無しさん
2008/03/02(日) 14:17:15つ ベンチマーク
って、ゲームとかの組み込みだろうから、単純計算しても参考にならんわな。
実際の簡単なゲームの比較ベンチマークでもあれば、いんだろうけどね。
0886デフォルトの名無しさん
2008/03/02(日) 14:35:37当然参照カウンタ型のデメリットも把握してたはずだが・・・
一般的なLua型にもデメリットはあるが今現在
決定的なアルゴリズムはないのだからとりあえず一般的な型(Lua型)
にしときゃよかったのに。
0887デフォルトの名無しさん
2008/03/02(日) 15:14:03どっかに記事なかったかな。
0888デフォルトの名無しさん
2008/03/02(日) 15:17:210889デフォルトの名無しさん
2008/03/02(日) 15:28:28特にPCは
専用機(コンソール)だと各世代の寿命と段差が大きいが
0890デフォルトの名無しさん
2008/03/02(日) 16:46:14リファレンスカウントを選んだのはちゃんと理由はある。
http://wiki.squirrel-lang.org/default.aspx/SquirrelWiki/LuaComparedToSquirrel.html
俺がSquirrelを使ってる理由はリファレンスカウントだから。理由は>>888。
巨大なリソースを組み込みスクリプト側で扱う設計にしてるなら、リファレンスカウント
のありがたみが分かるはず。
折角GCつき言語採用してるのに、リソース開放のためにdispose()とかダサいよ。
0891デフォルトの名無しさん
2008/03/02(日) 16:55:030892デフォルトの名無しさん
2008/03/02(日) 20:00:03Squirrelバインダ製作中。とりあえずC++からSquirrel呼び出しは、
SquirrelVM vm;
int value = sq_cast<int>( vm.getRootTable()[ "foo" ] );
vm.getRootTable()[ "bar" ] = "BarString";
vm.getRootTable()[ "setPosition" ]( 1.0f, 2.0f );
vm.beginCall( vm.getRootTable[ "setPosition" ] )
.param( 1.0f )
.param( 1.0f )
.endCall();
みたいな感じに。
SquirrelからC++呼び出しが面倒くさい。Sqplusみたいにテンプレートを駆使した
バインダにするか、それともネイティブクロージャを楽に登録できるようにするだけに
するか、悩みどころ。
0893デフォルトの名無しさん
2008/03/03(月) 07:50:12まあ「俺の好みだからほっとけ!」いわれればもうなにもいうことないけど
リファレンスカウント型には毎度のカウンタ操作による負担が重いという弱点があり
そこを嫌われてマイノリティなのは事実だから仕方ないよ。
0894デフォルトの名無しさん
2008/03/03(月) 08:58:58マイノリティか?海外で大人気のPythonは参照カウント&GC式だぞ。Squirrelと同じ。
Pythonのスタックレス版はどっかのネトゲのサーバーに使われてたはず。
>毎度のカウンタ操作による負担が重いという弱点
これそのままメリットなんだよね。マーク&スイープGCは回収している間プログラムが
とまるって事実は忘れちゃいけない。参照カウントはGCのコストをちょっとずつ払って
いるから、止まることは無い。
一般的に嫌われてるってのはただ単に>>893の個人的な感想じゃないか?
両者のメリット・デメリットを把握して運用するのが重要だと思う。
0895デフォルトの名無しさん
2008/03/03(月) 09:44:53PHPとかIoもやね。あとObjective-Cも。
0896デフォルトの名無しさん
2008/03/03(月) 11:17:30ttp://pc11.2ch.net/test/read.cgi/tech/1203611273/182
0897デフォルトの名無しさん
2008/03/03(月) 14:32:21凄くみにくい言い争いに発展してるんだがwww
0898デフォルトの名無しさん
2008/03/03(月) 19:00:16参照カウントにも利点があることが分かったよ。なんとなく。
あと、英語が読めないと開き直ることに、利点がないのも分かった。はっきりと。
0899デフォルトの名無しさん
2008/03/03(月) 20:15:59Squirrelバインダ製作中。ただ、作ってるうちにSqPlusへの理解が深まったせいで、SqPlus
使えばいいんじゃね?みたいな雰囲気に。もうだめぽ
とりあえず
DefineClass< SampleClass >( "SampleClass", vm )
.constructor()
.method( "testFunction", &SampleClass::testFunction )
.method( "testFunction2", &SampleClass::testFunction2 );
のようにバインドできるようにしたけど、これから作りこんでいくかどうか悩んでる。
メンバ関数ポインタの配列をsq_get/settypetagを使って設定してるけど、
使い方間違ってるぽ\(^o^)/オワタ
0900デフォルトの名無しさん
2008/03/04(火) 00:46:02さらに需要ないんだろうなあ
0901881
2008/03/04(火) 00:50:25メール欄に881ってw
0902デフォルトの名無しさん
2008/03/04(火) 07:56:42うーん、この辺が入門としてはお勧めかな。
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-13308-7
割と大きい図書館ならおいてあるよ。
マーク&すいーぷの欠点はそのとおり。
0903デフォルトの名無しさん
2008/03/04(火) 08:42:52どっちがいいかな?とアンケート。
1.
void foo( cpp_ptr<TestClass> arg )
{
0904デフォルトの名無しさん
2008/03/04(火) 08:45:230905デフォルトの名無しさん
2008/03/04(火) 08:55:511.
void foo( cpp_ptr<TestClass> arg )
{
/*なにか処理*/
}
2.
void foo( TestClass* arg )
{
/*何か処理*/
}
//ヘッダファイルのどこか
SQPP_DECLARE_CLASS( TestClass );
2はSqPlusと同じ方法。1は代替案って感じ。
基本型以外は全部C++のクラスと仮定してエクスポートしてもいいんだけど…
(そうしたらSQPP_DECLARE_CLASSいらない)
0906デフォルトの名無しさん
2008/03/04(火) 13:18:02というか逃げられない(GCしないという選択肢がない)分、有害ですらありうるな。
0907デフォルトの名無しさん
2008/03/04(火) 13:31:54GC一般の話題は専用スレがあります。
過疎スレですからそちらを使って頂けないでしょうか。
Garbage Collection (GC)について語るスレ
http://pc11.2ch.net/test/read.cgi/tech/1141646850/
0908デフォルトの名無しさん
2008/03/04(火) 13:47:301
0909デフォルトの名無しさん
2008/03/04(火) 14:15:57GC使わないようなコード書くなら、組み込み言語使う意味が大幅に薄れるような。
そんな涙ぐましい努力をするくらいなら最初からC/C++で書くよ。
俺も参照カウントが優れた方法だとは思わないが、こと組み込み向けならば
メリットがあると個人的には思うよ。
0910デフォルトの名無しさん
2008/03/05(水) 01:08:52マジックナンバーばっかで何を根拠に調整してんのか
よくわからんしなぁ。
0911デフォルトの名無しさん
2008/03/05(水) 08:12:59うん、だから何度もいってるように「俺の好みだからほっとけ」といわれれば何もいうことはないよ。
「実行速度は遅くてもいい」って人には参照カウント式で十分なわけだから。
それでは十分じゃないって人が多いから議論になるわけで。
0912デフォルトの名無しさん
2008/03/05(水) 08:24:510913デフォルトの名無しさん
2008/03/05(水) 11:43:390914デフォルトの名無しさん
2008/03/05(水) 16:16:32dクス
でも結局一般的な型以外は全部C++のオブジェ
クトと仮定することにしたよ。SqPlusがこの方式
を採用してない理由はなにか問題があるんだろうか…
実際運用してみないと分からないか。
>>911
リファレンスカウント&マークスイープGCのハイブ
リット型って言うほど実行速度遅いの?
今妄想してる組み込み向け言語ではリファレンスカ
ウント採用しようかと思ってるんだが(´Д`;)
Flashでゲーム作ったことあるんだけど、GCで止まる
のは心臓に悪かった。それとBitmapDataが必要なく
なったら明示的に破棄しないといけないのがGC言語
なのになんでさ?って思った。
って経験からリファレンスカウント式を採用しようと
思ったわけなんだが…
>>912
一般GCじゃなくて組み込み言語のGCの話題だし
ここでいいんでない
0915デフォルトの名無しさん
2008/03/05(水) 18:30:46明らかにGC一般の話だろ。
0916デフォルトの名無しさん
2008/03/05(水) 20:00:370917デフォルトの名無しさん
2008/03/05(水) 20:54:49って話にすりかえるのがまずいんですよ。
ダメといわれた言語使ってる人が不愉快でしょ。
組込み向け言語全般で共有してるスレなんだから、
各言語の優劣とかの議論に結びつく話は自重する方向で行こうよ。
0918デフォルトの名無しさん
2008/03/05(水) 20:59:070919デフォルトの名無しさん
2008/03/05(水) 23:31:21カラーリングだけなら他のエディタでもできるし
0920デフォルトの名無しさん
2008/03/06(木) 08:26:41一回実行させた後にスタック弄って値与えるとか?
初期値与える物と与えない物がある、ついでに変数名は変わるんで
引数として値を与える以外の方法でお願い
具体的に言うとRigidChipsのLUAの挙動を再現したい
0921デフォルトの名無しさん
2008/03/06(木) 11:40:46Squirrel内にあるデータ構造をC++に渡すには
どのような方法がございますか?
0922デフォルトの名無しさん
2008/03/06(木) 16:05:00なんか納得いかない。
class abc {
v = 0;
};
local a = abc();
local b = abc();
a.v = 1;
b.v = 2;
a = b;
b.v = 3;
print("a = "+ a.v + "\n");
で出力
a = 3
0923デフォルトの名無しさん
2008/03/06(木) 16:37:260924デフォルトの名無しさん
2008/03/06(木) 17:29:59レスありがとうございます。
なるほど、そうするとホスト側でメタメソッドとかで下手にいじらないほうがよさそうですねぇ。
0925デフォルトの名無しさん
2008/03/06(木) 18:20:45意味がわからないな。たとえば始めにbarに5をセットしても
プログラム内部にbar=0と書いてあればそこでクリアされてしまう
"初期値を設定"と"挙動を再現"とは絶対無関係でしょ
挙動を再現するならゲームでいうセーブロードの処理を自分で
組み込んで、必要ならセーブデータ改変するとかじゃないか
0926デフォルトの名無しさん
2008/03/06(木) 19:53:21RigidChips用のスクリプトがこんな感じ(LUAの言語仕様おかしいかもしれないが気にしないでくれ)
val{
a (max=10,min=-10,default=0)
}
lua{
if _key(0)==1 begin a=a+1 end
if _key(1)==1 begin a=a-1 end
}
って感じなんだが
aの初期値を与えてないと値なくてエラー起きるってのをどうにかしたい
(プログラムでvalの部分一度解析させてLUAのファイルに落とし込み実行して
グローバル変数として宣言させるとかだろうか?
0927デフォルトの名無しさん
2008/03/06(木) 20:32:35何が分からなくて、何がしたいのかさっぱりわからない。
0928デフォルトの名無しさん
2008/03/06(木) 20:44:49したいこと 初期値を与えたい
初期値であって引数じゃないのが問題
初期値はvalって部分で与えられてる
luaのプログラムは別に用意されてる(luaの中で変数宣言しない事もあるのでそのまま実行するとnilだ言われる)
0929デフォルトの名無しさん
2008/03/06(木) 21:25:38から実行すればいい話なんじゃねーの。
0930デフォルトの名無しさん
2008/03/06(木) 21:32:490931デフォルトの名無しさん
2008/03/06(木) 21:39:31それにRigid Chipsの ページ覗いたらlua内で用いる場合は
すべて大文字にするって書いてあるけどなんでAじゃないんだ?
0932デフォルトの名無しさん
2008/03/06(木) 21:48:58うろ覚えのまま、雰囲気だけ伝えようとガーっと書いてったもんで
大文字ってのも言われて思い出したぐらいでした
グローバルテーブルにてきとーに値の詰む方法調べてるんですが…
コンパイルとdofileだけしかまだ理解出来てないんで難しい…
とりあえず一歩前進した気がします。ありがとうございます。
0933デフォルトの名無しさん
2008/03/06(木) 22:03:17RigidChips を例に出すから余計に混乱した。殆ど関係なかったな。
既に言われてるように、スクリプトを実行する前に、
変数に初期値を代入しておけばいいだけのことだよ。
まぁがんばれ。
0934デフォルトの名無しさん
2008/03/06(木) 22:17:43最初にa=0って書けばいいのがわからなかったのか
それでも_key()がないっエラーでるだろうから頑張れ
0935デフォルトの名無しさん
2008/03/06(木) 22:27:50>最初にa=0って書けばいい
これkwsk。グローバルに詰むのを簡単に実現できるって事ですか?
_key()はCの関数を呼ぶ方法とか、そこらへんでやってる人がいるのでそれ参考にしてどうにかなりそうです
0936デフォルトの名無しさん
2008/03/06(木) 22:30:39ようは未初期化の変数触っててヤバイって話なのかな。
0937デフォルトの名無しさん
2008/03/06(木) 22:32:39もう少し…もう少しでRigidChipsのモデルを現実に引っ張り出せる…
0938デフォルトの名無しさん
2008/03/06(木) 23:02:25lua.exeでdofile("hoge.lua")したらaがnil だってエラーでたなら
hoge.luaの始めのあたりにa=0とでも書いとけっていってる
あまりに初歩的すぐるから次からもっと勉強してからおいでってこと
0939デフォルトの名無しさん
2008/03/06(木) 23:39:28(非常に稀に呼ばれるLUA内のサブルーチンでnilがあった時にエラーが出るはずがいきなりリセットが掛かりそのまま最初から?)
変数維持したままプログラムの再loadとかも出来るんでしょうか?
とりあえずリファレンスのテーブルとスタックの辺り読んだ感じだと
valで初期値が与えられている変数全部にlua_pushnumberとlua_setglobal適用してやれば良い気がしてるんですが…
0940デフォルトの名無しさん
2008/03/07(金) 00:06:130941デフォルトの名無しさん
2008/03/07(金) 00:18:51言われた通りにやった方が楽ではないかという心理で
とりあえず原因不明のエラー\(^o^)/今日はもう寝て明日続きやってみます
0942デフォルトの名無しさん
2008/03/07(金) 02:00:22Val {
Handle(default=0,min=-20,max=20,step=5)
}
Key {
2:Handle(step=-0.5) //キー2(初期値←)が押されてる間handle-0.5
3:Handle(step=0.5) //キー3(初期値→)が押されてる間handle+0.5
}
こんなのが出てくるんだけど、これはいったいどうなってるんだろう?
Keyはテーブルではなさそうだし、luaではキーワード付き引数は使えないはず。
RigidChipsの内部で解析されてるんだろうか。
0943デフォルトの名無しさん
2008/03/07(金) 04:06:47lua{}ブロック内以外は、Luaとは無関係。
内部で解析されてる、で合ってる。
0944デフォルトの名無しさん
2008/03/07(金) 08:54:420945デフォルトの名無しさん
2008/03/07(金) 09:20:150946デフォルトの名無しさん
2008/03/07(金) 10:13:180947デフォルトの名無しさん
2008/03/07(金) 12:07:020948デフォルトの名無しさん
2008/03/07(金) 12:22:41に一票。
0949デフォルトの名無しさん
2008/03/07(金) 12:56:350950デフォルトの名無しさん
2008/03/07(金) 13:11:27統合いらなくね?
【Lua】組み込み言語【squirrel】
0951デフォルトの名無しさん
2008/03/07(金) 13:17:54あと細かいがSquirrelのSは大文字で
0952デフォルトの名無しさん
2008/03/07(金) 14:20:01【Lua】組み込み言語総合【Squirrel】
に一票で。
0953デフォルトの名無しさん
2008/03/07(金) 14:56:14に一票
0954デフォルトの名無しさん
2008/03/07(金) 15:43:15wikiあるんだからリンクあんま要らんかも。長いけど、まあ参考にして貰えれば。
Squirrelの話題も増えてたし、Luaじゃなくて組み込み全体のスレにするっていうのは可決でいいよね?
↓↓↓
LuaやSquirrelなど、組み込み用途で使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/
その他参考URLは>>2
■過去スレ
その3 http://pc11.2ch.net/test/read.cgi/tech/1160799232/ (前スレ)
その2 http://pc8.2ch.net/test/read.cgi/tech/1063711237/
その1 http://pc5.2ch.net/tech/kako/1034/10341/1034182349.html
■関連してるかもしれないスレ
【Perl,PHP】LLバトルロワイヤル【Ruby,Python】
http://pc11.2ch.net/test/read.cgi/tech/1188997302/
Io Language
http://pc11.2ch.net/test/read.cgi/tech/1201100624/
Garbage Collection (GC)について語るスレ
http://pc11.2ch.net/test/read.cgi/tech/1141646850/
各種ライブラリ紹介スレ2(ゲ制作)
http://pc11.2ch.net/test/read.cgi/gamedev/1177886529/
レス数が950を超えています。1000を超えると書き込みができなくなります。