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
201 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 23:49:03 ] >>200 XMLで書かれた同人ゲームを一つだけ知ってるが、 解析がえらい面倒だったな
202 名前:デフォルトの名無しさん [2008/07/14(月) 04:31:50 ] >>200 BulletMLもXMLのDSLだな
203 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 11:28:11 ] XMLで書いてると最後に統計取れたり 解析が楽だったりするのがメリットか。 ドキュメンテーションも楽だろう。
204 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 12:34:15 ] S式じゃダメ?
205 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 12:40:29 ] セックスピー
206 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 21:17:26 ] Lua workshop2008もうすぐはじまるよ @ワシントン州で
207 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 18:15:34 ] xtal更新とまっちまってるなあ
208 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 00:54:26 ] >>207 C++では行き詰まるという現実に気がついたのでは
209 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 01:00:17 ] つまりスクリプトをつくるための軽量スクリプト言語を アレ?
210 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 16:41:45 ] わらかすなwwwwww
211 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 19:15:16 ] Lispでいいじゃん
212 名前:デフォルトの名無しさん [2008/07/20(日) 19:41:13 ] そういや、Ruby の Matz もOOPのスクリプト作るのにOOPはむりぽ みたいなこと言ってたな
213 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 23:37:57 ] >>212 なんで?やっぱり速度?
214 名前:デフォルトの名無しさん [2008/07/21(月) 01:53:26 ] 今時、さすがに速度じゃないと思うがw(開発速度?w) Matz日記の過去ログにあったかもしれん。ちょっと行ってくる
215 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 02:06:29 ] 確か、まつもと氏が混乱するとかいう理由だったような・・・・と思ったら オブジェクト指向言語でオブジェクト指向言語を実装するというのに、脳がついていけないんだけど。 それって、僕だけ? (笑) C++ で言語作ってる人がいるけど、よくやるなぁ、とか思う。 ベース言語のクラスとか継承とかと、実装言語のクラスや継承がごっちゃになて、訳わかんなくなっちゃう。 設計して、どういう風に作ろうかなと思った時点で、もう、わかんなくなって「もういい、やめた」って。 ttp://jp.rubyist.net/magazine/?0001-Hotlinks
216 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 05:44:25 ] C++/CLIのことかー
217 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 16:17:08 ] なんだ…人間の能力の限界の話なのかよ
218 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 16:53:35 ] PHPもC++でエンジン書いてたが、やばいと気がつき後にむりやりCで 書き直したと聞いたことがある。具体的に何がやばかったのかは知らない。
219 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 17:24:10 ] 俺には全く理解できん CでいいならそのままC++でもいいじゃんと思うんだが…
220 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 17:36:48 ] そもそもCよりC++の方が型がこなれているんだから OO捨ててもCより享受できるものが多いはず。 まあ、でもポータビリティ犠牲にするほどのものでもないかなあ。
221 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 18:47:24 ] >>219 C++ は、効率重視で、バイナリ互換とるのが極端に難しい実装ばっかりなので、 独立アプリならいいんだけど、ライブラリとして広く長期的に共有されるような ものの記述には残念ながらあまりむいてない。 Windows はこれを COM という形で一応解決したんだけど、UNIX 系OSではその手のものが 統一的につくられることは結局なかったからね。php のような、他と組み合わせた 運用が求められるものだとこの点はわりと致命的なので、Cでかかざるをえ なくなったんじゃないかな。 一応 Objective-C という選択はあるけど、こっちは実装が限られてるからねぇ
222 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 19:14:47 ] 勉強になりました
223 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 21:55:19 ] ABIの問題ってことかな。 C++のライブラリをextern "C"してDLLやsoにしたものを、 Cとかで呼ぶとなんかまずそうなのは想像できるな。 グローバルなコンストラクタとかあったらそれはいつ呼ばれるんだろうって。
224 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 23:31:59 ] 継承かガベージコレクトじゃね?
225 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 00:54:53 ] >>223 もう一度良く考えてみろ。どうにもならないことはない。単にリンカがどうするかというだけのことだ。 しかし、万人が納得する解法は無いという事も、ここからわかる。
226 名前:デフォルトの名無しさん [2008/07/24(木) 20:18:47 ] Squirrel3.0alpha1リリースあげ
227 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 08:35:19 ] イラネ
228 名前:デフォルトの名無しさん [2008/08/02(土) 19:26:37 ] hoshu
229 名前:デフォルトの名無しさん [2008/08/03(日) 06:02:10 ] squirrelでsq_compile()を行うとプロシージャが一つ返ってきますが、 このプロシージャは何を表しているのでしょうか? たえば、コンパイル元のファイルが、 function foo() { print("foo"); } function bar() { print("bar"); } の場合、sq_compile()が返すプロシージャはこの2つの内の一つなんでしょうか?
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の方が愛されてる感はある