プログラミング言語 Lua その3
レス数が900を超えています。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
0809デフォルトの名無しさん
2008/02/23(土) 22:57:40Luaハジマタ\('o`)/
0810デフォルトの名無しさん
2008/02/23(土) 23:06:410811797
2008/02/23(土) 23:20:59やっつけのパッチ当てたけど、需要ある?
0812デフォルトの名無しさん
2008/02/24(日) 01:48:06というか本家にフィードバックしようぜ
0813デフォルトの名無しさん
2008/02/24(日) 03:09:28うぉ、日本メーカーでLua使用って公開したところはほとんど記憶にないから、
結構インパクトあるねぇ
そういや今GDCの季節かぁ
0814デフォルトの名無しさん
2008/02/24(日) 08:58:560815デフォルトの名無しさん
2008/02/24(日) 12:30:51改変したソースも公開してくれよ
0816767
2008/02/24(日) 14:51:34WikiのSquirrelのページに添付させてもらいました。
SQ_BIGENDIANを定義しておくと、出力が強制的にBEになるです。
やっつけなので、これを基に、ちゃんとした対応をしてくれると嬉しいなあ。
ちなみに、出力したバイトコードが、ビッグエンディアンな環境で動作することは確認済み。
でも、SQ64と_UNICODEは知らん。
_UNICODEはこれからやるかも。
最後に、スレ住人&Wikiの管理人さんアリガトー(゚∀゚)
0818デフォルトの名無しさん
2008/02/24(日) 17:24:11>Squirrelについては、「メモリの消費量は増してしまうが、それだけの価値がある」という白石氏。
>プログラムの7割はSquirrelを使用しているという。
ですって。
0819デフォルトの名無しさん
2008/02/24(日) 17:28:30つかこのスレに書いてる人いそうだなw
0820デフォルトの名無しさん
2008/02/24(日) 19:22:53スクエニが使っているという情報はでかい
Squirrelを採用する企業もこれからかなり増えるんじゃないか
いい感じ
0821デフォルトの名無しさん
2008/02/24(日) 20:17:18開発効率に対する姿勢が比較的アメリカ型なスクエニがこういう方法をとったことは不思議ではない。
C/C++(&内製の半端なスクリプト言語)一辺倒から離れられないプログラマや企業はいよいよ
ついていけなくなるかもね。
0822デフォルトの名無しさん
2008/02/24(日) 20:26:54基本的にスクリプト言語の方が習得難度が低いからね。
まぁその歴史的なしがらみが大きな障壁になるのかもしれないけどさ。
1言語しか扱えないニセグラマとか猿スクリプタとか。
0823デフォルトの名無しさん
2008/02/24(日) 20:40:34プロでそんな人はいなさそう
むしろ、メモリの動的確保が信じられないとか、そっちの方が使わない理由だろう
0824デフォルトの名無しさん
2008/02/25(月) 01:33:21オレはそれならSCE派だな。Nintendoは趣味じゃねー。
0825デフォルトの名無しさん
2008/02/25(月) 01:37:01そこまで考えれたらいっぱしのマネージャークラス?
0826デフォルトの名無しさん
2008/02/25(月) 07:39:050827デフォルトの名無しさん
2008/02/25(月) 07:56:22という時代じゃないし
0828デフォルトの名無しさん
2008/02/25(月) 14:24:07別に任天堂本体が使ってる訳じゃあんめえ
スクエニでしょ
0829デフォルトの名無しさん
2008/02/25(月) 15:59:460830デフォルトの名無しさん
2008/02/25(月) 19:35:14DSの開発言語の標準がC++らしいので、Nintendo自体もSquirrelに
まんざらではない可能性も。
0831デフォルトの名無しさん
2008/02/25(月) 21:29:10WiiはともかくDSにSquirrelはない。メモリ的に
0832デフォルトの名無しさん
2008/02/25(月) 21:36:22スクエニつーかリードプログラマの趣味じゃね?>Squirrel
カリカリチューンとかいってもLuaとかSquirrelで全部やろうとしたらそら重いけども。
単なるイベントハンドラとして使うだけならどっちでも大して変わらんでしょ。
LuaPlayerでゲーム作るノリでゲーム中の全オブジェクトの管理・更新をLuaとかSquirrelとかで書いちゃう人って結構多いの?
0833デフォルトの名無しさん
2008/02/25(月) 22:20:35積極的に開発にフィードバックしてくれたら良いけどな
ただ日本企業にそこまで期待できるか実際のところ何ともいえないけど
0834デフォルトの名無しさん
2008/02/25(月) 23:23:490835デフォルトの名無しさん
2008/02/25(月) 23:35:58ちょっと前まで過疎スレだったのに
0836デフォルトの名無しさん
2008/02/25(月) 23:37:430837デフォルトの名無しさん
2008/02/25(月) 23:38:170838デフォルトの名無しさん
2008/02/26(火) 00:21:49うちでも採用検討しようかな
0839デフォルトの名無しさん
2008/02/26(火) 01:34:26>>811さりげなさ過ぎて気付かなかったw
>>616のバグもめでたく正式に修正されたみたいね
-fixed a coroutine bug
0840デフォルトの名無しさん
2008/02/26(火) 21:37:58あと、上のほうでSquirrelでJITみたいな話がありましたが、
ちょっと前にJITをつけたものを公開してます。
速度的にはあまり早くなりませんし、コードも汚いですがよろしければどうぞ。
ttp://muffin.cias.osakafu-u.ac.jp/~matumoto/cgi-bin/xt.cgi?prog/sqjit
0841デフォルトの名無しさん
2008/02/26(火) 22:14:17神乙
きっとスクエニの人もあなたの翻訳は見ているでしょう
0842デフォルトの名無しさん
2008/02/26(火) 23:31:53koukai sitakerya koukai sitemo iiyo
oreha iranai kedo ne
0843デフォルトの名無しさん
2008/02/27(水) 15:54:40ちょwwww
SquirrelJITってwすげえw
速くならないのは残念ですね。いま時はVM実行でもプロセサが速いから吸収しちゃうのかね
0844デフォルトの名無しさん
2008/02/27(水) 21:40:380845デフォルトの名無しさん
2008/02/28(木) 08:20:37>SCEはLua(C)で、NintendoはSquirrel(C++)か。
LuaがC++対応じゃないみたいに見えるからやめれ。
LuaのC++との相性はSquirrelと同程度だろう
0846デフォルトの名無しさん
2008/02/28(木) 12:08:01から、相性が同程度ってのは疑問だなぁ。Lua ってそのあたりなんか最近変わった?
0847デフォルトの名無しさん
2008/02/28(木) 19:12:32ここんとこ、少し解説してくれまいか?
0848デフォルトの名無しさん
2008/02/28(木) 22:08:060849デフォルトの名無しさん
2008/02/28(木) 23:28:01マニュアルの「C言語のAPIからSquirrelの値への強参照の維持」のところ以降を参照
以下使い方の例の一つ:複数のsquirrelのクロージャをC側で保持して任意に呼び分け
前準備
1. スクリプトをコンパイル
2. スタック上のクロージャを、sq_getstackobject でHSQOBJECT として参照保持
3. スタック上のはとりあえず必要ないので sq_pop で解放
4. 必要な分だけこれを繰り返す
使う場合
1. スタックに HSQOBJECT として参照してるクロージャを sq_pushobject で積む
2. sq_call でそのクロージャを呼びだす
LUA でおなじようなことをしようとすると、なにかしら名前をつけてグローバルのテーブルか
レジストリにいれとくとかして、それをいちいちスタック上で取り出すような処理が必要なはず。
squirrel だと、任意のオブジェクトに対する参照をC側でもてるので、
(強参照なので、参照されてる限り消えない)、使うときだけまたスタックに積む、という使い方ができる。
値を set するにはスタック介さないとダメだけど、get だけならAPIで直接ぬくこともできる。
制御の本体を C 側でおこなってる場合でも、この機構があるおかげで、Squirrel 側のオブジェクトの
とりまわしがすごい楽にできる。
sqplus を使うと、このあたり関連の処理が SquirrelObject としてラッピングしてあって、
値の代入から配列/辞書としての操作まで、全部 Cからのメソッド呼び出しで
簡単にできるようになってる。
0850デフォルトの名無しさん
2008/02/29(金) 00:09:18>LUA でおなじようなことをしようとすると、なにかしら名前をつけてグローバルのテーブルか
>レジストリにいれとくとかして、それをいちいちスタック上で取り出すような処理が必要なはず。
ここ以外はLuaと機能の差がないという解釈でOK?
Luaでもちょっとした(数行の)関数かけば解決しちゃうような。
もちろんその手間はかかるけど。
>強参照なので、参照されてる限り消えない
Luaでもレジストリに保存されている限り消えない。
>get だけならAPIで直接ぬくこともできる。
もうちょっと詳しく書いていただけると助かります。
>SquirrelObject としてラッピングしてあって
luabind::objectでも同様にしている。
0851デフォルトの名無しさん
2008/02/29(金) 00:22:140852デフォルトの名無しさん
2008/02/29(金) 00:54:33なんだって! そんな便利なものがあったのかよ!
0853デフォルトの名無しさん
2008/02/29(金) 01:27:20まあラッピングすればねー。
SqurrelObject は例示としてはよくなかったね。
Cの名前空間との関連を管理するコードを自前で書かないと
いけないってのはちょっとうれしくないぁと。
それをしなくて良い分親和性が高いってのは納得いただけるかと。
>getだけなら
sq_objbool とかそのへん
あと、話はそれるけど、言語文法もかねw>C言語との親和性
begin/end がどうしても慣れなかった……
0854デフォルトの名無しさん
2008/02/29(金) 04:54:19スタック操作とか、参照カウンタとか頭こんがらがってくる
C++じゃなかったからtemplate library 使ってないせいもあるんだろうけどさ。
みんなやっぱりその辺のbinding使ってるの?**Plusとかみたいなの
>>849
強参照ってそんなときに使うのか・・・
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
レス数が900を超えています。1000を超えると表示できなくなるよ。