1 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 13:02:21 ] LuaやSquirrelなどアプリケーションへの組み込み用途で 使われるプログラミング言語についてのスレッドです まとめwiki(なにか質問する前に必ずみること!) wikiwiki.jp/lua/ その他の参考URLは>2から ■過去スレ その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
230 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 09:02:27 ] squirrel 的には用語は「クロージャ」ってのはさておき、 戻ってくるのは、元のソースを頭から終わりまで実行するクロージャになります。 その例でいくなら、「foo() と bar() をグローバル空間に登録するクロージャ」ということになります。 sq_compile → sq_call してはじめてスクリプトで記述したことが意味を持ちます。 sq_compile したものを sq_writeclosure すると、コンパイルされてバイナリ状態に なったスクリプトを保存できます。これを sq_readclosure → sq_call するようにすると、 実行時にコンパイルしなくてすみます。 ちなみに sqstdio にふくまれる sqstd_loadfile, sqstd_dofile は、テキスト/バイナリいずれのスクリプトも 同様に扱ってくれるので便利です(ファイルのヘッダをみて、sq_readclosure / sq_compile を切り換えてくれる
231 名前:229 [2008/08/03(日) 13:22:55 ] >>230 解説ありがとうございました。おかげで理解できたような気がします。 説明をふまえて、マニュアルにあらためて目を通すと、 function ciao(a, b, c) { } は this.ciao <- function(a, b, c) { } と等価であるという説明から、「sq_call()が返すのはグローバル空間に登録するクロージャ」ということがより直感的に理解できました。 #コンパイル済みのバイナリについても悩みどころだったので説明感謝です。
232 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 01:40:07 ] LuaとかSquirrel使ってる人って、存在しない関数・変数の検出や、 引数の数チェックってどうしてます? 実行時にはエラーになりますが、さすがに関数の引数の数間違いで 実行が止まるのは面倒ですし、 エラーが起きるコードが普段はなかなか実行されないところに あるものだったりするとかなり面倒ですよね。。。
233 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 02:22:21 ] それは環境によるのでは? ユーザーにいじらせるようなものでなければ落とした方が間違いに気付きやすくていいと思うけど
234 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 05:15:11 ] 誰か静的型付けの組み込み言語作ってよ
235 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 12:04:09 ] >>232 型チェックさえしていれば引数の数チェックは必要ない。 Luaは引数の数が違っても変数が未定義でも実行は止まらない。 存在しない変数の値はnilとして続行。 実行が止まるのは、nil以外の型が必要なところにnilが来るのが原因。
236 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 23:42:07 ] >>233 そうですね、僕は自分しかいじらないので、エラーの時は落とすようにしてます。 ただそうしてると、Cなどであればコンパイル時にわかる型のミスなどが、 Luaだと実行してしばらくしてからでないとわからないので面倒で… >>235 nilが入ってたまたま動作し、エラーが発見できなかった場合に デバッグするのが大変ではありませんか? 公開する時には実行が止まらない挙動でないとまずいですが、 作っているときは「想定外の挙動」を検出するために、 型チェックと引数の数チェックは必須だと思っています。 >>234 そ・れ・だ!
237 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 02:19:38 ] >型チェックと引数の数チェックは必須だと思っています 個人的には厳格な静的チェックが欲しいならCで書けばいいし、 気楽にかけて初心者に教えやすく関数がファーストクラスだったりするのが スクリプトのメリットだと思ってる でもまー、スクリプトの用途によって違うかもね
238 名前:デフォルトの名無しさん [2008/08/06(水) 02:27:31 ] なにげにsquirrelだとC++から関数通すたびに数回は引数の数チェックに ひっかかるけど実はデバッグのための膨大な時間の浪費を回避できてたのかな
239 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 07:07:49 ] 関数型の組み込み言語あれば面白いかも
240 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 08:30:08 ] lisp系ならそこそこないか
241 名前:デフォルトの名無しさん [2008/08/07(木) 09:57:22 ] ゲーム作ってるんですがNPC等のと会話中の選択肢などをスクリプトで書きたいと思ってます。 今のところc++で使いやすそうなのでSqPlusが候補なんですが、 どんな感じにやるものなのかってのいうが全然想像できないです。 例えば下のような感じでc++と行ったり来たりってのはできるんでしょうか? ////////////////////////////////////////////////////// game::SetMsg("買い物する?"); if(game::ShowWndYesNo())//ゲーム側で選択画面を出し、何らかの方法で入力を待ち結果を取得… { if(game::GetMoney() == 0) { game::SetMsg("お客さん金持ってないね!") } else { game::SetMsg("何にする?") game::ShopOpen();//買い物画面出して買い物が終わるのを待つ… } } game::SetMsg("またきてね!"); ///////////////////////////////////////////////////////
242 名前:241 mailto:sage [2008/08/07(木) 10:06:29 ] なんでもないです。無かったことにしてください^^
243 名前:241 [2008/08/07(木) 11:20:04 ] うーんやっぱ全然分かりません。 >>241 みたいな例でいうと、 c++側でgameクラスのインスタンスを生成して、 そのポインタをsqplusに渡して、 sqplus側でSetMsg()だのGetMoney()だのの関数を使う っていう、そういうことはできないんでしょうか? なんか根本的に用途間違ってますか?
244 名前:241 mailto:sage [2008/08/07(木) 11:28:49 ] >sqplus側でSetMsg()だのGetMoney()だのの関数を使う sqplus側で受け取ったポインタを通して そのインスタンスのSetMsg()だのGetMoney()等のメンバ関数を使ったり メンバ変数の操作をしたり、ということをしたい、、、 ということです。
245 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 12:06:33 ] もう少しマニュアルとサンプルとか見直して出直してきたほうがいいぞー 概念的にはもちろんそういうことができるが、C++ のインスタンスの情報は squirrel 側は当然知らないので、ポインタを渡しただけでは何もできない。 呼び出し用のラッパーを squirrel の流儀で構築する必要がある。 具体的には、C++ のインスタンスは、ユーザデータ型をつかって保持し、 メソッド呼び出しは、そのインスタンスを使ってメンバ呼び出しをする Cのラッパー関数を、ネイティブクロージャとして、そのユーザデータ型の オブジェクトの委譲テーブルに登録することで実現する。 sqplus はこれの記述を簡易化するためのテンプレートライブラリ。 メンバメソッドの引数から自動的にラッパーを組み上げて登録してくれる。 基本的には、登録したクラスを、squirrel 側からインスタンス化して使うのが想定されてて、 C++ 側で生成したインスタンスをはめこむのは原理的にはできるはずだけど、sqplusが それをサポートしてたかどうかは知らない。
246 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 12:30:15 ] つまり、C++をはじめとする静的型付言語の問題は型システムの相互運用性でありそれが組み込み言語でユーザデータを扱う際に表面化する、というわけだな。
247 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 13:29:25 ] >>245 SqPlus の testSqPlus2unit/test_PassByReference.cpp にその例があるよ
248 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 22:22:37 ] Squirrelで使えるクラスを作りたいだけならこんな感じだったような class CGame { int GetMoney() { return 100; } void ShowWndYesNo() { printf("yes no\n"); } void SetMsg(const SQChar* msg) { printf(msg); } }; DECLARE_INSTANCE_TYPE_NAME(CGame, Game) void reg_my_class() { SQClassDef<CGame> game_class_def(_T("Game)")); game_class_def.func(&CGame::GetMoney, _T("GetMoney")); game_class_def.func(&CGame::ShowWndYesNo, _T("ShowWndYesNo")); game_class_def.func(&CGame::SetMsg, _T("SetMsg")); }
249 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 01:38:24 ] >>232 動的言語はその辺は実行しろでFAだったと思いますよ。 動的言語を使用するなら、せめて全経路を走査する単体テストくらいは書けということなのでしょう。 >>245 >基本的には、登録したクラスを、squirrel 側からインスタンス化して使うのが想定されてて、 >C++ 側で生成したインスタンスをはめこむのは原理的にはできるはずだけど、sqplusが >それをサポートしてたかどうかは知らない。 Squirrelを直に叩いていいならば、 ・sq_createinstanceでコンストラクト前のオブジェクトを得る。 ・sq_setinstanceupでオブジェクトのポインタをセット ・sq_setreleasehookで後始末関数を設定 で実現できると思いますが、SqPlusには相当する機能は無いんでしょうか。 この機能、無いとFactoryMethodがあるとき困るので、無い事は無いと思うんですが…
250 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 02:42:19 ] >>215
251 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 03:56:36 ] どうしても自分のコードで new したポインタを使いたいのかな これじゃダメなのん? CreateConstructNativeClassInstance(SquirrelVM::GetVMPtr(), "Game"); SquirrelObject obj = Get(TypeWrapper<SquirrelObject>(), SquirrelVM::GetVMPtr(), -1); SquirrelVM::Pop(1); CGame* game = (CGame*)obj.GetInstanceUP(ClassType<CGame>::type()); printf("money = %d\n", game->GetMoney()); obj.Reset();
252 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 18:06:52 ] お前らちょっと聞いてくれよ Squirrelなんだけどさ、 class Foo { val = []; } ってプロパティを空配列で初期化したんだけどさ、これ、インスタンス毎に 空配列を作成するんじゃなくて、インスタンス間で同じ空配列を参照するんだね。 わかんなくて3時間くらいはまったよ。なんだよもうOTL
253 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 18:41:53 ] うむ。みんなが通る道だ。クラス中で定義した値は、インスタンス生成時に 毎回実行されるわけじゃなくて、単にコピーされるんでそういう挙動になるようだ。 ってことで、配列と辞書はコンストラクタで初期化するのが基本。 ちなみに全部同じ空配列を参照するから、クラス変数的に使えたりする。
254 名前:デフォルトの名無しさん [2008/08/17(日) 10:46:09 ] Luaのgeneric for文って、引数の個数を柔軟に扱うというLuaの特徴を生かしているのだね。
255 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 15:43:02 ] くわしく
256 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 17:40:24 ] >A for statement like > > for var_1, ・・・, var_n in explist do block end > >is equivalent to the code: > > do > local f, s, var = explist > while true do > local var_1, ・・・, var_n = f(s, var) > var = var_1 > if var == nil then break end > block > end > end io.lines 等を使うときは s や var は考えないわけだが、 f() の代わりに f(s, var) としても間違いじゃないから上のコードで統一できる。
257 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 20:18:21 ] >>256 なんかやたら抽象的なコードが出てきたと思ったら、 リファレンスマニュアルから引用してるのか。 sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html#2.4.5
258 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 22:02:49 ] Programming in Luaにも同じコードがある。日本語訳は無いみたい。 www.lua.org/pil/7.2.html
259 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 23:59:39 ] 何かよく分からないけどCからLuaに何かさせたい人とか向けな超入門用のテンプレ作ってるの見つけた ・Cからluaにグローバル変数を登録する の項だけ絶賛放置プレイされてるけどまあこのスレ見てるなら過去ログに書いてあるし ttp://www2s.biglobe.ne.jp/~nunokawa/wiki.cgi?page=Lua
260 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 22:49:59 ] Lua 5.1.4 いつも通り、バグ修正のみ
261 名前:デフォルトの名無しさん [2008/08/25(月) 00:18:07 ] Luaの質問です Luaの関数の戻り値をC言語で受け取りたいのですが,どうもうまくいきません. ameblo.jp/coffeex/theme-10002528966.html このサイトの Luaのり付け講座2 - C++からLuaの関数を呼ぶ という部分のコードを丸写しして 実行したのですが,実行結果が 可算結果: 5 (5.000000) 減算結果: 1 (1.000000) ではなく 可算結果: 1 (1.000000) 減算結果: 5 (5.000000) とひっくり返ってしまってます.もしかして環境によって戻り値の返し方は違うのでしょうか?
262 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 03:08:58 ] ここの1つめと2つめは逆のような気がするな。 -2のほうが下にあるんだから1個めでは。 double result1 = lua_tonumber(L, -1); //1つめの戻り値(注意:Luaの数値はdouble型!) double result2 = lua_tonumber(L, -2); //2つめの戻り値 その前に「可算」が気になる・・・
263 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 14:26:16 ] Squirrelの話なんだけど、スレッド内でエラーが発生すると有用なメッセージ出力しないのは 仕様? 例えば、 local coro = ::newthread( function() {
264 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 14:28:53 ] ゴメン途中送信した、まとめてから書くよOTL
265 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 14:36:09 ] 再送。 Squirrelの話なんだけどさ、スレッド内でエラーが発生すると有用なメッセージ出力しないのは 仕様? 例えば、 local coro = ::newthread( function() { noindex = ""; } ); coro.call(); ってコードを書くと、[the index doesn't exist]とだけメッセージが出力されて、スタック トレースもcoro.call()の部分までしか表示してくれない。 実際のコードだと、noindex = "";の部分が原因だって特定するのが時間かかる。 ただのtypoの特定に時間かかってしまうと、コーディングのテンポが悪くて非常に困る。 Luaはそのあたりどうなのかな。コルーチンの内部にまで踏み込んでスタックトレース 表示してくれる?
266 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 15:50:15 ] おk自己解決した。 これ実際にコーディングする上では結構致命的だと思うんだが… フォーラムに載ってた。 squirrel-lang.org/forums/thread/2269.aspx 2行書き換えるだけで、ちゃんとコールスタック表示してくれる。
267 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 15:57:35 ] sq_notifyallexceptions に SQTrue 指定するだけででない?
268 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 16:30:21 ] >>267 お、ほんとだ出るね。サンクス。 でもこれ指定するとtry/catchでくるんでるのにエラーハンドラ呼ばれるんだよね? 状況によっては困る気もする。
269 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 19:22:28 ] デフォルトのエラーハンドラはトレース表示するだけで catch の先自体はちゃんと動いてた と思うから、あんま困ったことはなかったような記憶、だけどどうだっけか
270 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 20:02:35 ] >>269 例えばエラーハンドラが呼ばれたときはキャッチ失敗したということだから、深刻なエラーとして ログ出力して終了する、という運用スタイルの時困る気がする。 運用方法変えたら良いだけかもしれないけど… 本当は小細工しなくても、コールスタックちゃんと表示してくれるのが一番 なんだけどね。
271 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 10:05:48 ] SqPlusでヘンな挙動発見。 VM内で初期化してないアドレスを参照してたから、最初はSquirrelのがおかしいのかと思って 必死こいてソース読んでたけど、どうもトレースしているとSqPlusがおかしいみたいで。 SqPlusでバインディングした変数を参照するとgetInstanceVarFuncが起動するわけ だけど、これが内部でSquirrelVM::Init(v)を呼び出してる。 普段は渡されるVMは変化しないから問題ないんだけど、これがスレッド内で呼び出されると話が 変わる。 スレッドごとにフレンドVMで実行されるから、getInstanceVarFuncの引数として渡されるVMは、メインVM じゃなくてフレンドVMなわけで。 だからSquirrelVM::Init(v)でSquirrelVMがフレンドVMで初期化されてしまう。 その後SquirrelVM::RunScript()なり何なりVMを対象にするメソッドを呼び出すと、フレンドVMを対象に 行われるから、おかしなことになってしまう。 自分の場合、SquirrelVM::RunScript()の内部でthread.resume()を呼び出してたから、本来サスペンドされていた はずのフレンドVMをsq_call()で不正にたたき起こした挙句、さらにthread.resume()で起こそうとしたから、 問題が発生したみたい(クラッシュした)。 でも他の状況だと問題は発生しないかもしれない。よくわからん。 とりあえずworkaroundとして、getInstanceVarFuncを使わない(__getメタメソッドを使わない)ことにした。 レポート送ったほうがいいのかな。 でもこれ英語で書く自信ないよ…OTL
272 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 20:55:02 ] てきとうな英語と実証コードを送れば分かってくれるんじゃね?
273 名前:sage [2008/09/01(月) 23:43:31 ] Squirrelでスレッド使うときって、 自分でVM切替えしてるの?
274 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 07:20:43 ] >>272 公式フォーラムでいいのかな?暇ができたらレポートすることにする。 >>273 自分が何を指すのかわからないけど、フレンドVMを使っていることを普通意識する必要はないよ。
275 名前:デフォルトの名無しさん [2008/09/03(水) 15:08:48 ] SqPlusはいくつか変なところあるよ。 フォーラムに報告もたまにしてたけど、最近のリリースがけっこう前のものならとりこまれていないのかも。
276 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 01:33:04 ] スクエニの小さな王国はSqPlus使ってるってさ
277 名前:デフォルトの名無しさん [2008/09/10(水) 21:12:07 ] >>276 これ? Wiiウェアで始まった、スクエニの“小規模開発への挑戦”。「小さな王様と約束の国 FFCC」の開発事例 www.watch.impress.co.jp/game/docs/20080224/ffcc.htm
278 名前:デフォルトの名無しさん [2008/09/10(水) 22:51:52 ] Squirrelに関して質問させてください。 LuaからSquirrelに移行しようかと、いろいろ試しているのですが SquirrelにはLuaでいう require/module のような機能はないのでしょうか? 自前で用意すればできるのはわかるのですが、 Squirrelの作法として、 スクリプトファイルを機能ごとに複数に分けて管理したい場合は 通常どうするのが正しいのでしょうか? よろしくお願いします。
279 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 00:50:24 ] 特定のテーブルにロードすれば出来るのでは? squirrelってsqstd_dofileとかでファイル読み込む直前でルートテーブルをプッシュしてるけど、 それをルートテーブルではなく、任意のテーブルを指定する そうするとその任意のテーブルにデータが読み込まれる ただし、使うときはtable.func();みたいな使い方をしなければならなくなる…のかな? 他にもデリゲートテーブルを使う方法もあるけど、これはファイルごとと言うわけにはいかないかな というかLuaってrequire/moduleで機能ごとに分けて管理できるんだ… そっち知らなかった…
280 名前:デフォルトの名無しさん [2008/09/11(木) 21:52:26 ] >>279 返答ありがとうございます。 やはり、自前で用意する必要があるようですね。 とりあえず Lua と同じような形で ルートテーブルに登録する形で実装してみようかと思います。 ありがとうございました。
281 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 22:27:49 ] >>279 >SquirrelにはLuaでいう require/module のような機能はないのでしょうか? >スクリプトファイルを機能ごとに複数に分けて管理したい場合は 個別に管理、ということは requireを使えば、いらなくなったスクリプトファイルとかを個別に解放できたりするんですか?
282 名前:281 mailto:sage [2008/09/11(木) 22:29:06 ] >>279 じゃなくて>>278 でした
283 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 13:33:06 ] >>281 解放ですか… Lua の require/module は結局グローバルにテーブルとして追加しているだけなので _G.xxx.foo = nil みたいにしてしまえば解放もできそうな気はしますが…。 (require("xxx.foo"),module("xxx.foo")と仮定) やったことはないです。 私が言っていたのは単純にファイルの管理についてです。 Character.lua : キャラクタークラス定義 Stage1.lua : ステージ1 Stage2.lua : ステージ2 とした場合、 Stage1.lua, Stage2.lua それぞれの先頭で require("Character.lua"); とするような。 すべて1ファイルに記述するわけにはいきませんから。
284 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 15:05:58 ] そのぐらいなら、手動で適当に読み込めばいいんじゃないかと。 例としてはたとえば以下のような関数をつくっておいて、 function require(name, cond) { if (!cond in ::getroottable()) { dofile(name); } } Character.nut の冒頭 CHARACTER_DEFINE <- true; Stage1.nut や Stage2.nut の冒頭 require("Character.nut", "CHARACTER_DEFINE"); 判定に使うのはグローバルに定義するものなら なんでもいいですが、ルールきめておけばあとでみたときわかりやすいと思います。
285 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 12:10:26 ] 「スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践」 ってのがでるらしい。 出版社のページみつかんなかったのであまぞん ttp://www.amazon.co.jp/dp/4797348550
286 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 12:44:58 ] あと二週間くらい? 発売日になったらとりあえず買ってこようと思う。
287 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 13:06:02 ] こういうのが何十冊も出ると買う気なくすが、Luaはまだまったりしていてよいです
288 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 13:17:53 ] 赤坂じゃなくてよかったw
289 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 15:54:56 ] これか・・・ Amazon.co.jp: スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践: 浜中 誠: 本 www.amazon.co.jp/dp/4797348550 images-jp.amazon.com/images/P/4797348550.09.MZZZZZZZZZ.jpg
290 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 23:06:46 ] CEDECでスクエニがSquirrel使ってるの話してたねー。
291 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 03:33:58 ] >>290 kwsk どっかに資料とかあがってないの?
292 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 06:01:40 ] 今さら知ったのかよ
293 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 23:15:44 ] SquirrelとLuaってどっちがつおいの?
294 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 01:08:36 ] Luaの方がこなれてるだろう
295 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 01:38:03 ] 強さで言うとSquirrelのが強い。 悟空とべジータくらい違う。
296 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 01:48:54 ] Squirrelはバグだらけ。 自力で直せる環境にいないと使えない
297 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 02:09:42 ] LuaとCをいったりきたりすると演算子とか間違えるから Squirrelのほうがやわらかい
298 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 02:25:07 ] 速さと軽さならLua 基本的な演算とsuspendを行う処理を一億回ループさせたらLuaはSquirrelの1/3の時間ですんだ
299 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 02:26:59 ] てゆうかこのスレ張ってる奴けっこう多いんだな 散々過疎ってたのに燃料来たとたんこれかよ
300 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 09:58:58 ] Luaの方が愛されてる感はある
301 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 10:11:15 ] >>285 この辺がなんか不安、サンプルやらソースやら見れば解ることが山ほど載ってそう >〜人気スクリプト言語Lua(ルア)とC/C++のバインディング実例を詳細に解説。
302 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 10:30:39 ] サンプルやソース見てわかる人は買わなきゃいいだけだろw
303 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 10:46:06 ] サンプルの種類が増えるのは良い。延べ数ばかり増えるのは困る。
304 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 14:11:14 ] LuaとC/C++との連携では、Swigはあまり使わないものなんですか?
305 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 00:53:52 ] >>304 Lua本体に入ってない LuaがC/C++との連携を単なるオプション扱いすることはない ゆえに、Swigはあまり使わない
306 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 02:11:53 ] >>291 一応、CEDECのサイトで講演に使ったパワポがpdfでアップされてたんだけど、 これ会員以外に流すとなんかやばそうな・・・ まぁいろいろ言ってたよ。 コード全体の7割はSquirrelとかallocが多いのでメモリまわりの工夫をしたとか。 実際このゲームプレイしたけど、Wii環境であれだけ動いていれば、まぁ実践レベルには十分達しているといえるだろうね
307 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 02:15:41 ] つか、スクエニの開発スタッフ、このスレたまにはチェックしてると思う。 2chにここしかSquirrelのスレないんだもん。 クレっていったら資料くれそうな気もする
308 名前:304 mailto:sage [2008/09/21(日) 22:00:07 ] >>305 なるほど、サンクスです。「入門Luaプログラミング」を読んだんですが、 C++との連携方法がいまいち良く分からなかったので(SquirrelだとSqPlus?)、 >>285 の本を見て勉強することにしてみます。
309 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 22:29:12 ] 今週末か。レビューよろ
310 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 23:13:07 ] 既出の質問かも知れませんが…。 CからLua関数をコールするときは、関数名、引数をスタックに積んで行うと思います。 これを以下のようにコールするのって、副作用とか問題点って何かありますか? (実行速度とか) sprintf( strCmd, "return add( %f, %f )", a, b ); luaL_dostring( L, strCmd );
311 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 23:34:49 ] 速度なら試して比較すりゃいいんでないの?
312 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 14:16:38 ] ものすごくループする所で使うんじゃなければそんなに問題ないよ。 スタック積むのめんどくさい時はたまにやってしまう。
313 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 20:28:26 ] 310です。 速度低下と実数が桁落ちするデメリットはすぐに分かるのですが、 マニュアルにある"tail call"形式にする影響が少々心配でした。 アドバイスありがとうございました。
314 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 15:53:01 ] Luaってバインダの決定版っぽいのが無い感じだけど(Activeじゃないのが多い気がする)、 皆なに使ってる?自作してるのかな?
315 名前:デフォルトの名無しさん [2008/09/24(水) 22:18:38 ] Squirrel 2.2.2 stable - September 24, 2008 -fixed some behaviour inconsistencies in thread.call() and thread.wakeup() (thx Mr.Accident) -fixed coroutine error propagation -fixed lingering return value from native function (thx Tom Leonard) -fixed a bug if array.sort() is given a bad sort function (thx Tom Leonard) -fixed some minor api bug -added sq_arrayremove() and sq_arrayinsert()
316 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 08:49:30 ] >>314 漏れはバインダなんてイラン派
317 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 09:20:05 ] >>285 って誰か買った? どっかで見てから買いたかったんだけど売ってない。 よさげor誰も買ってないならamazonで買おうかと。誰か買ってたら感想よろ
318 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 10:06:28 ] >>317 >ご注文いただいた商品の配送予定日がまだ確定しておりません。 <中略> >継続して商品の調達に努めてまいりますが、調達不能な場合または入荷数の関係上キャンセルをさせていただくこともございます。 報告するようじゃないけど、初めてkonozamaメール貰った。\(^o^)/
319 名前:317 mailto:sage [2008/09/30(火) 15:07:52 ] konozama食らうくらいなら探すべ、と思ったらヨドにあったんで買った。 結構いろいろ書いてあるっぽいんで楽しみ。
320 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 15:48:15 ] おれもさっきこうてきた 大学の書店に普通においてあったよ
321 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 17:11:38 ] 参考Webサイトにこのスレがwww
322 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 17:23:42 ] 記念ぱぴこ オール・ハイル・ぅあ!
323 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 19:18:24 ] bccで使う方法がようわからんのだけど
324 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 23:25:37 ] bcc用のlib付属してないんだっけ。 bccについてるimplibでdllからlibファイル吐かせてリンクすればいけんじゃね? 何がわからんのだかわからんから適当言ってるが、的外れなこと言ってたらスマン
325 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 02:25:52 ] つーかBCBならともかくbccなんざ捨てろ
326 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 09:14:48 ] そしてIDEだけ残ると
327 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 16:14:35 ] vcのexpressあるからなあ。 無料で使えるってことで以前は定番だったけども。
328 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 09:11:38 ] 無職なのに、欲望に負けて>>285 の本を買ってしまった…orz。 C/C++とのバインディングは、パッと見でtolua++とかいうのを使っているみたい。
329 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:03:56 ] 今のうちにgoluaを登録商標にしとかないと
330 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 11:09:33 ] 自作のLuaラッパにApolloって名づけようとしたけど RubyのDelphiバインディングに使われていた