5 :
デフォルトの名無しさん :2008/03/11(火) 15:59:21
組み込みと言えば、TCLだな
function L(t,c) return t[1] and (c and "■" or " ") :rep(table.remove(t,1))..L(t,not c) or "\n" end io.write(L{0,1,2,1,4,1,2,4,1}) io.write(L{1,1,2,1,2,2,5,1,1}) io.write(L{2,1,2,1,2,1,3,2,2}) io.write(L{1,1,2,1,3,1,2,1,3,1}) io.write(L{0,1,2,1,3,3,1,5})
8 :
デフォルトの名無しさん :2008/03/11(火) 17:10:27
>>5 なんでTCLなの?
組み込みのIDEとかでよく使われてるけど
RubyもPythonも組込めるけどなあ。 Perlはさすがにやったことないが、できないこともないだろう。
RubyにしてもPythonにしても標準ライブラリや言語機能がでかすぎにみえる。 組込みに向いてるってのはコードサイズまたは外部への依存の少なさと 言語機能のバランスが取れてるって意味にではないのかと。
没になったテンプレ案には書いてあったけど、 そういう比較的大きな言語の組みこみの話も 多少は許容することが前スレで同意されていたはず。 でも一応Luaスレの続きだからその辺は空気読んでねと。
Ruby Perlは$がきらいだ
>>1 乙curry
このスレタイにくるまで長かったな
前スレは実りの多いスレだった 二年前からのスレだから当然かwww
GCのまとめ LuaのGCはマーク&スィープ方式を組み込み言語向けに改良したインクリメンタル方式。 SquirrelのGCは参照カウント方式。 マーク&スィープ方式の欠点: GCの処理に時間がかかるとハングアップした感じになる。その欠点を克服すべく、 少しづつ分割してGCの処理を行う(インクリメンタル方式)、 マルチスレッドで平行してGCの処理を行う、などの進化型が現在の主流。 参照カウント方式の欠点: 参照カウンタの更新処理によるオーベーヘッドにより処理速度が低下する。 循環参照への対処が必要になる。 過去の方式である感は否めない。
むしろ,ここはSqとLのどちらを使うか自分で判断できる人のスレ GCの比較は余計なお世話というのが前スレの結論じゃなかったか?
squirrel [名](複 〜s, 1で((集合的))〜) 1 《動》リス:肉は食用になる. 2 [U]リス類の肉[毛皮]. 3 ((米俗))変なやつ. ━━[動](〜ed, 〜・ing;((英))〜
____ / \ /\ キリッ . / (ー) (ー)\ / ⌒(__人__)⌒ \ <過去の方式である感は否めない。 | |r┬-| | \ `ー'´ / ノ \ /´ ヽ | l \ ヽ -一''''''"〜〜``'ー--、 -一'''''''ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ だっておwwwwww /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) | / / / |r┬-| | (⌒)/ / / // | :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) / ヽ / `ー'´ ヽ / / | | l||l 从人 l||l l||l 从人 l||l バ ヽ -一''''''"〜〜``'ー--、 -一'''''''ー-、 ン ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) バ ン
squirrelちゃん涙目wwwwwwwwwwwwwwww
なんでこんなところに子供が…と思ったら春休みか
外国だとFreePascalでNintendo DSのソフト作ってる人多いな
Squirrelの正規表現なんですが local text = "ab abcd ab"; re <- regexp("a.*b"); local ret = re.search(text); print("begin, end = " + ret.begin + ", " + ret.end + "\n"); print("ret = " + text.slice(ret.begin,ret.end) + "\n"); > begin, end = 0, 5 > ret = ab ab こうなっちゃうのうちだけでしょうか?
正規表現通りの結果でてる。Squirrelでなくてもそうなると思う
"a.*b" の * は欲張りだから本来 "ab abcd ab" にまでマッチするはずじゃない? Squirrel書いたことないので見当違いしてたらごめん
a.*?bだよな。
>>25 >>26 さんの言うように最後までマッチするはずなんですよ
秀丸と、Luaで試してみましたが最後までマッチします。
>>25 さんのところでも同じ結果がでますか?
うちで何か失敗してるのかなぁ?
うちでもなるから最短マッチな実装なんだと思うよ。 不満なら直すか、他から持ってくるしかないんじゃなかろうか。
いやいや、最短なら ab で終了だろw
あ、そうか。間抜けな俺。 * は 0 個もありだよな ってことで、バグ認定でいいんでね?
.が任意の一文字で*がワイルドカードだとすると辻妻あうな
>>29-31 ありがとうございます
どうもバグみたいですね
英語苦手だけど、なんとかレポート送っときます
35 :
デフォルトの名無しさん :2008/03/31(月) 20:28:40
age
36 :
デフォルトの名無しさん :2008/04/02(水) 00:55:25
なんか過疎ってるな。 swig + lua の組み合わせを最近多用している。 luaからswigで公開する型や関数のメタ情報を取得ってできる? 例えば関数の引数や戻り値の型名とか。 構造体のメンバ変数の一覧ならメタテーブル経由で取得できるけど。
>>36 luaは動的言語だから、戻り値や引数の型の分からんでしょう。
型は変数じゃなくて、値にくっついてる。
luaをネットワーク関係のライブラリ(httpを解釈できればいい) 辺りだけ組み込んで、最小構成にするとどれだけ小さくなりますか? 100kByte以下とかできる?(linuxのELFで)
それは質問する前に自分で試せるだろう。
組み込みの状態でヴィジュアルデバッグができる言語ありませんか?
ヴィジュアルデバッグとか聞いたことなかったけど、そんな単語あるんだなw ICEとかじゃだめなの?言語に依存する内容じゃないように思うけど・・・
サイケデリック ヴァイオレンス & クライム オヴ ヴィジュアル デバッグ!
squirrel は SqDbg と SQDEV っての使うと eclipse からリモートデバッグできるらしいけど使ったことはない。
squirrelはちょっと・・・すみません。
45 :
40 :2008/04/08(火) 20:26:03
>>41 ヴィジュアルデバッグは造語かもしれません。
GDBじゃないVisualStudioのような環境のことを指しています。
あと、「組み込み」は小型機器への組み込みではなく、
C++プログラムに対する組み込みの意味です。
いろいろ、すみません。
>>43 その組み合わせは非常に使えそうなので、ちょっと試してみます。
ありがとうございました。
GUIデバッガとか、ソースレベルデバッガ、って言うと思う。
47 :
41 :2008/04/09(水) 01:12:39
>>45 ヴィジュアルデバッグでググったら多少引っかかったんで個人の造語ってわけじゃないと思うよ。
単純に俺が無知だっただけorz
sqplusでプロパティ(getterとsetterを普通の変数アクセスのようにみせるアレ) は作れますか?
Xtalで char script[] = " \ add: fun(a,b) \ { \ println(a+b); \ } \ sub: fun(a,b) \ { \ println(a-b); \ } \ "; AnyPtr compiled = compile(script); compiled(); こうやってコードをコンパイルする。 そのあと任意のタイミングで add(a,b)やsub(a,b)をCから呼ぶ方法がわかんない。
>>40 scite-debugを使えば、C/Luaプログラムを同じ環境でデバッグできるはず
使ったこと無いけど
xtal結構いいよな。 luaから乗り換えた。 つか作者はドキュメント整備してくれんかのぉ。
Xtalいいな ネイティブスレッド対応か。
Xtalのページ見てみたけどよくわからん。 ゲーム重視だからパフォーマンス重視なんだろうけれども。 Xtalはお手軽に制御構文が書けてかつパフォーマンス重視ってところがいいのかな?
>>53 ちょまて Xtalってバーチャルマシンがスレッドセーフでできてんのか?
ゲームのスクリプトにlispってどう思います?
やってみたら?
58 :
56 :2008/04/18(金) 11:05:19
そっすね
>>56 たしか、naughty dogがlispなんだよね
60 :
デフォルトの名無しさん :2008/04/21(月) 03:11:15
誘導されてきました。 現在C++とSquirrelでSTGを作っています。 Sqruirrelスクリプト側からC++の関数を呼ぶためには、 SQInteger func(HSQUIRRELVM v) という形のグローバル関数でなくてはいけないんですが、スクリプト側から特定のオブジェクトを操作したいと考えています。 しかし、上の形だと動的メソッドでもないし、引数にオブジェクトへのポインタが含まれていないため、どうやって呼び出そうか困っています。 HSQUIRRELVMはスタックになっているので、スクリプト側に操作したいオブジェクトのポインタをあらかじめ渡しておいて 必要なときにスタックにぶち込んで引数として利用しようと考え、 /*Squirrelスクリプト*/ function ExeScript(p) /*引数はポインタ*/ { SetVelocity(p, 0, 5, 0); /*引数は操作するオブジェクトのポインタ、x方向の速度、y方向の速度、z方向の速度*/ return 0; } /* HSQUIRRELVMのスタックには 1(top):roottable, 2:p, 3:0 4:5 5:0)となっているはず*/ というようなスクリプト側の関数を作り、ExeScriptをC++側から呼び出す時に 引数に呼び出し側のポインタをぶち込んであげようと思ったんですが上手くいきません。 ちなみにpはスクリプト側ではint型で扱っていて、ExeScriptが呼ばれたときにintにキャストし、 SetVelocityが呼び出されたときにポインタにキャストするようになっています。 何かいい方法はないでしょうか? もしくはセオリーなどを教えていただけませんか?
申し訳ありません、上げてしまいました
プログラム板では質問は age 推奨
個人のゲームなんですかねえ
64 :
デフォルトの名無しさん :2008/04/21(月) 08:12:31
まずポインタをデバッガで追ってみりい。 スタック操作で単純にミスしてるだけな気がするよう。
>>60 オブジェクトをIDで管理すればポインタを持たなくても
IDでやり取りできるんじゃない?
>>60 そのC++オブジェクトをSquirrelのオブジェクトとして登録してみるのは?
Squirrelあきらめます。ありがとう。
www まあ正直聞いててスクリプトでやるようなことじゃないと思ったわ
>>64 スタック操作確認して怪しいところ修正したら動きました。
本当にありがとうございました…。
>>65 次改造するときに試してみます。
>66
そんなこと出来るのでしょうか? Squirrelのクラスについてもう少し学んでみようと思います。
>68
たしかにそうかもしれません…。
>>60 こんなんはどう?
SqPlusを使うけど。
/*c++*/
/* c++クラスをsquirrelにexport */
SqPlus::SQClassDefNoConstructor<SomeClass> def(_T("SomeClass"));
/* メソッド定義 */
def.func(&SomeClass::SetVelocity, _T("SetVelocity"));
SomeClass* object = new SomeClass();
/* Squirrelの関数呼び出し用オブジェクトの取得 */
SqPlus::SquirrelFunction exeScript = SqPlus::SquirrelFunction<int>("ExeScript");
/* 関数実行。型がsquirrel用に変換可能であれば、
内部で変換されSquirrelに渡される。
*/
exeScript(object);
---
/*squirrel*/
function ExeScript(object)
{
object.SetVelocity(0,5,0);
return 0;
}
>>69 ホストのポインタをvm内に格納するばあい
userpointer型を使うとかsqclassのインスタンスにsq_setinstanceupするのが適当
luaの関数をCの値として保持しておくことはできるんでしょうか? luaスクリプトからコールバックを登録して、Cから適宜呼び出す、ということをしたいのですが。
>>72 LuaのC APIを使って、Lua VM内のグローバルにある関数を(値として)スタックに積むことはできる
スタックに積まれた関数をLuaのC APIから実行することはできる
でOK?
この手の話題ってC側なのかLua側なのか、表現が難しいな。
上のSquirrelのやつもそうだが
74 :
72 :2008/04/24(木) 16:15:42
>>73 ありがとうございます。Cの値として保持しておくことはできないんですよね。
それだと、Luaから渡された関数を適当なタイミングで呼びだすには、
関数を一旦スタックの深いところに置いておいて、必要な時にインデックスを使って呼び出す、という形になるのかな…。
>>74 LuaからCに関数名を渡せばあとでCのほうから探索できる。
関数を保持しとくのは無理かな、たぶん。
luaL_ref/unrefを使えっていう話?
>>76 それが一番質問者の期待しているものに近そう。
75に似た方法で呼び出す関数名を決め撃ちするのもあり。
78 :
72 :2008/04/25(金) 01:33:55
>>75-77 ありがとうございます。マニュアル引き引き調べてみます。
コンパイル済みのsquirrelスクリプトを事前に変数かなんかに格納しておいて、後でvmに読み込む場合はどのようにすればいいのでしょうか? リファレンスなどを読んだ感じだとsq_readclosure()辺りを使うのかと思ったのですが資料をあまり見つけることができませんでした。
>資料 ソースを読めばいいじゃない。 そこらのライブラリとかスクリプトのような聞き方をされると違和感をおぼえてしまう。
でたーソース嫁攻撃
そりゃあ出るだろう ソース読むのが妥当な場面だもの
すべての質問は自分で調べろで片付く ある意味最狂
まぁ、極論馬鹿の脳内では今回の話もそこへ繋がるんだろうな、 というのは、容易に推察できることではある。 アホくさいけど。
昔はハウトゥー本前提での自分で調べろって台詞だったが、 最近は面倒になりそうなのは全部自分で調べろって投げ捨てるよな
ソース嫁馬鹿に極論馬鹿にレッテル馬鹿の三つ巴ですかw
バカばっか
>>86 無理矢理三つ巴と思い込む暇があったら
ソースでも読んでた方がいいと思うよ。
ソース読まない馬鹿は死ぬべきだな。
春か…
ソースを読めば素晴らしい回答が在る、というのにお礼も言わずに、 アホなレス繰り返してる馬鹿のレベルが低いんだもの。 まぁ、読めないから回答者に喰いついてるんだろうね。 質問者は社会常識を身につけてから出直しておいで。 自分の立場を弁える常識は必要だよ?学生君。
ソース読んでどうにかなるレベルの奴がここで質問するわけがない
テンプレに追加案 【このスレは”質問スレ”ではありません】 ソースを読めば素晴らしい回答があります。 何時間掛かるかも分りませんが、まずはすべてのソースを読み理解する頃には質問の内容も解決している事でしょう。 また質問者は立場をわきまえ、回答者を崇めること。 このスレは雑談スレか
79の言ってることがよくわからないんだけど、 あらかじめ変数に読み込んでおいてというのは、 ファイル開いてファイルサイズ分メモリを確保して、そこにreadするということか? それでそのバッファのポインタを渡して読み込ませたいってこと?
95 :
79 :2008/05/01(木) 02:06:38
忙しくてレスできませんでした。
>>80 とりあえずソース読んで分からなかったらまた尋ねるかもしれません。
>>94 94さんの言うとおりファイルサイズ分メモリを確保しておいて、そこにファイルを読み込ませ、そのメモリからオブジェクトにデータをロードさせようと
思っています(do_fileやload_fileなどを使うといちいちファイルにアクセスして負荷がかかるため)。
現在はchar*にスクリプトを読み込ませておいて、オブジェクト生成時にコンパイルしていたのですが、
コンパイルにかかる負荷がバカに出来ないと考え「コンパイル済」のスクリプトをメモリに保存しておいて運用したかったのでその方法を質問させていただきました。
ああ勘違い、コンパイル済みスクリプトをバイナリで保存しておいて読み込みたいのね? 役に立てないZzzz
本人が言ってるとおりsq_readclosureでいいんじゃないのか
私はLuaの方の人だから見当違いかもしれないと前置き。 sq_readclosureでよさそうだけど解説があまりないから 断片的な情報とソースから推測するしかないって感じかな。 ソースはsqstdio.cppにあるsqstd_loadfileの実装が参考になりそう。 ところでsqstd_loadfileは関数を評価せずにスタックに 積むだけみたいだから、その参照を保持しておくだけで 用が足りたりしないのかな。
流れぶった切るけどスマソ。 Lua側の関数に引き渡した0xFFFFFFFFってリテラルが、C側からlua_tonumberで取ってくると0で返却されるのは既知? さらに、0xFF00FFFF -> 0xFF010000なんて取れてきたりする。 どうもVC8だと起こるらしくて、gcc系だと引き渡したリテラルが正しく取れるんだけどなぁ。
101 :
79 :2008/05/02(金) 02:27:06
sqstd_dofileは内部でsqstd_loadfileを呼び出していたため、sqstd_loadfileの中を見てみました。
sqstd_loadfileの中には外部から読み込んだファイルがバイナリであるかテキストであるかを判定する文があり、
バイナリの場合はコンパイルせずにそのままsq_readclosureによってスタックに読み込んでいることが分かりました。
そこで、sqstd_loadfile冒頭のsqstd_fopen(fopenと同じ働き)を削除し、loadfileの引数のファイル名の変わりに(FILE*)型のポインタを
渡してやるようにし、また、(テキストファイルは扱わないため)テキストであった場合の分岐を削除してみました。
これは成功すると思ったのですが(おそらく)こちらのコーディングミスでメモリ関係のエラーが出てしまいました。
こちらを直して正常に動作するようならまた報告したいと思います。
>>99 スタックトップに積むようなので、sq_move(dest, src, -1)といったように設定してやればいいんですかね? 試してみます。
ただ今回の件でSquirrelのスタック周りの操作についてほぼ無知であることが分かったため、もう少し勉強してからトライすることになると思います。
>>100 Luaは整数を小数として扱ってるからその辺りが関係あるのかなぁ。
あと、高速化のためか整数←→小数の変換には
単なるキャストを使っていたり、アセンブラ命令を直で使っていたりする。
>>102 luaconf.hの中のlua_number2intの定義の所ね。
_MSC_VERでifdefしてる個所もある@5.1.3
LUA_ANSIをdefineして直ったらここが原因だろう。
>>100 Direct3D使ってたら浮動小数点演算の精度が24bitになってる可能性あるんで
D3DCREATE_FPU_PRESERVE
を調べるといい。
ただ値の受け渡しだけはできるはずの気がするが。
lua_xmoveが使える条件に、「同じグローバルステートの異なるスレッド」ってあるんですが これってどういう事なんですか? 同じlua_Stateから派生したスレッド同士なら良いということですか?
>>105 それを使ったことはないけども・・・
coroutine作ると新しいlua_Stateが作られるけど、それは元のlua_Stateとグローバル情報を共有してる。
だからxmoveが使えるのは、元のVMから作られたcoroutineを示すlua_State(および元のVM)間だけ、ということかと。
「スレッド」って言うとOSスレッドのように聞こえるから、混乱を招くので敢えて使いたくないんだよね・・・。
>>101 FILE*つかってんなら load_file を忌避する理由がさっぱりわからんわけだが……。
バイトコード判定は残しておくほうがいいよ。作業中はテキストにしておいて、
リリース時に sq.exe つかって全部バイナリにしてしまえばおk
// データ保持用クラス。ポインタだけだと終端がわからんので必要
static class DataBuffer {
const u_char *data; u_int size; u_int pos;
public:
DataBuffer(const u_char *data, u_int size) : data(data), size(size), pos(0) {};
u_int getLeftSize() {return size - pos;}
void copy(void *buf, u_int size) {memcpy(buf, data+pos, size); pos += size;}
};
// sq_readclosure 用 SQREADFUNC
static SQInteger buffer_read(SQUserPointer file,SQUserPointer buf,SQInteger size) {
DataBuffer *data = (DataBuffer*)file;
u_int dsize = data->getLeftSize();
if (size > dsize) {size = dsize;}
if (size > 0) { data->copy(buf, size); return size; }
return -1;
}
// スクリプトのメモリからの読み込み
SQRESULT readscript(HSQUIRRELVM *v, const u_char *data, u_int size, SQBool printerror) {
unsigned short us = *(unsigned short *)data;
if (us == SQ_BYTECODE_STREAM_TAG) {
DataBuffer buf(data, size);
return sq_readclosure(v, buffer_read, &buf);
} else {
return sq_compilebuffer(v, (const SQChar*)data, size, "memory", printerror);
}
}
どうにも理解しがたいので、質問させてください。 Lua 5.1.3 @ VS2005Proです。 #include <stdio.h> #include <lua.hpp> int main(int argc, char* argv[]){ lua_State* Lbase = lua_open(); lua_State* L[10]; for(int count = 0; count < 10; count++){ for(int i = 0; i < 10; i++){ L[i] = lua_newthread(Lbase); // 何か実行 if(luaL_dostring(L[i], "a = 0;")){ printf("err : %s\n", lua_tostring(L[i], -1)); } } } return 0; } これを実行すると、i = 1の時のlua_newthreadで落ちるんですが これはどう対処すればいいんでしょうか・・・
>>108 lua_newthreadはあくまでコルーチンを作る関数だから、
それで作られたlua_Stateはコルーチンの流儀でしか使えないんじゃないかな?
つまり、lua_resumeを使えと。
あとlua_newthreadはスタックにスレッド(コルーチン)オブジェクトを積むので、
使い終わったらpopするとか、グローバルに置くとか、なんとかしてやる必要がありそう。
思うに、Lua側からcoroutine使ったほうが余計なことを考えずに済むような気がするけど。
>>109 ありがとうございます。
そもそもこんな使い方をするものじゃない、ということですかね。
どうやら根本的に考え方がおかしかったようですね・・・
>>105 も私の書き込みです。遅れましたが、
>>106 さんありがとうございます。
>>72 lua_tofunctionでググれば出てくるよ
クロージャ関係のようだけど... なんか今そのLuaのドキュメントのあるサイトが落ちてるみたいなので 覚えてたらまた見てみますね。
5章の最初のところね。そこで言いたいことはわかるんだけど、Pythonに、そこで 言ってるような制限は無いように思うんだな。昔のバージョンではそういう制限が あったのかもしれないけど。 実際、Figure 3. が意味しているコードはPythonで問題なく書ける。 def add(x): def tmp(y): return x + y return tmp add2 = add(2) print add2(5) その Most procedural ... の前の 2 パラグラフが言いたいことはわかってるよね?
wikiのsquirrelのAPIリファレンスが行数オーバーとか言われてるけど
別のサンプルでmutableに見えたのでうっかりしていたのですが、 def init(x): def chg(y): x = y def get(): return x return (chg, get) chg, get = init(0) print get() chg(1) print get() 実行すると 0 0 になりますね。そういうことでいいと思います。
>>117 やはりそういう理解でいいんですかね。
お付き合いいただきありがとうございました。
You can download Squirrel 2.2.1 stable here
月とリス
121 :
デフォルトの名無しさん :2008/05/19(月) 23:52:06
>>108 ,109さん関連で
同様なことやって、lua_newthread関数を連続で呼び出したら。
60前後スレッドを作った時点でエラーが発生してしまった。
これの対策として、109さんのようにLUA_GLOBALSINDEXに突っ込むのも良いと思うけども
luaL_refでLUA_GLOBALSINDEXに突っ込んでも良いのではと一意見を言ってみます。
ちなみに、この関数でリファレンス化したものを消そうとする場合。
luaL_unref(L,LUA_GLOBALSINDEX,(luaL_refの返り値));
って感じで良いのでしょうか?
使っている人が居ましたらご教授お願いいたします。
122 :
デフォルトの名無しさん :2008/05/20(火) 04:29:05
version5.1.2でluac -lしても定数やらUpvalやらのリストが 出てこないんだけど、なんでかな?
>>124 騙されたと思って -l 2つつけてみ・・・
バグっぽいけど。
>>124 ホントだ。man見てもさっぱり理由が分からなかったから
結構まいんってたんだけど・・・。
とにかくありがとう。
127 :
126 :2008/05/20(火) 18:23:42
128 :
デフォルトの名無しさん :2008/05/23(金) 13:37:46
DLLなどなしで使えるポータブルな組み込み言語を探していてWSHに行きついたのですが、 WSHの組み込みってありなんでしょうか? webページを検索してみてもサンプルみたいなものが全然ないのですが、 どこかにないかな・・・
129 :
デフォルトの名無しさん :2008/05/23(金) 14:01:07
130 :
デフォルトの名無しさん :2008/05/24(土) 02:38:46
Squirrel+SqPlus使い始めたんですが。 C++で記述されてるclass AをSqPlusでSquirrel側に公開 ↓ Squirrel側でAをextendsしてclass Bを定義 ↓ Class BのインスタンスをSquirrelで作成。 結果としてSquirrelでBのインスタンス、C++でAのインスタンスが出来上がっていて C++でAのポインタを掴んでるとします。 この状態でC++から呼べるのは、まぁ当然Aのメンバ関数だけなんですが、 Bのメンバを呼ぶ方法って、なんかないでしょうか?
>>130 SquirrelFunction<void>(SquirrelVM::GetRootTable().GetValue("instance_of_B"), "member_function_of_B")("argument1", "argument2");
132 :
デフォルトの名無しさん :2008/05/24(土) 19:40:34
>>131 これだと、RootTable上にinstance_of_Bという名前で生成されているという情報を
C++側がつかんでないと実行できないですよね?
現状の設計だと、
ClassAのコンストラクタでstaticなClassA*のListへ突っ込むという処理を入れとく。
↓
あとでそのリストをぐるっと回してClassAの派生Classのメンバーを呼んでいく
という処理をしたいので、
C++側ではそのインスタンスの名前とか生成されたスコープとかは掴んでないんですよね……。
と、今思いついたんだけど。
GetRootTable().GetValue()が返すのはHSQOBJECTだから、
PostConstructが動いた時点でそいつを掴んどけばいいのか?
class B の constructor() 内で A.constructor() を呼び出すのはどう?
134 :
132 :2008/05/25(日) 00:39:57
int construct_A(list<A * > *, HSQUIRRELVM v){ A *pA = new A(p); int nRes = SqPlus::PostConstruct<A>( v, pA, SqPlus::ReleaseClassPtr<A>::release ); StackHandler sa(v); pA->SetHSQOBJECT( sa.GetObjectHandle(1) ); return nRes; } こんな感じのconstructorをStaticFuncでぶち込んでやれば Squirrelで生成したHSQOBJECTをC++のClassAで保持することは可能っぽい。 で、constructorに渡してるlist<A*>経由でBのメンバーを呼ぶことも可能だった。 HSQOBJECTがGCタイミングとかで変化したりとかしなければこれでいけっかな?
wikiのLuaチュートリアルのサイトでlua_dofileって関数あるけど、 これもうなくなったの?
luaL_loadfile 名前が変わったとかなんとか。
luaL_dofile
DSのLuaはスレチだよね?
139 :
デフォルトの名無しさん :2008/05/30(金) 11:10:06
そこのページにある >NDS用のテキストエディタがあれば、NDSだけでプログラミングも可能です とい文章に質問。NDS用のテキストエディタってどこにあるの?
scriptsフォルダはルートに置けよ。念のため。
Luaって組み込みに関する日本語の解説ページ少ないよね? Squirrelの方がまだ多い気がする
>>144 本家のテキストの和訳が出てないんだからまだこれからじゃないの?
Erlangだって和訳が出てから急激に増えたんだしさ。
Luaでバイナリ出力ってどうするんですか? luaL_loadfileでスクリプト読み込んで lua_dumpで出力でいいんでしょうか? lua_dumpの解説で関数をバイナリ出力すると書いてあるので、 ファイル丸ごと出力するのはまた別にあるのかと思ったのですが、見当たりませんでした
>>146 luac.c調べればいいんじゃないかな
Luaの内部の挙動理解するの難しい… SquirrelはVM内のデータのひとつひとつの役割とか挙動とかもわりと簡単に追えたけど Luaのステートはメンバ変数の意味もよくわからんし、ソースも追いにくい どうしようこれ。突破口が見えん
何となくわかってきたスレ汚しスマソ
150 :
デフォルトの名無しさん :2008/06/13(金) 13:15:11
C++側で定義したクラスをSquirrelで継承したクラスを作って SqPlus::CreateConstructNativeClassInstanceでインスタンス作ったんだけど 戻り値のSquirrelObjectからどうやってそのメンバにアクセスすりゃいいんだろう? SquirrelObject obj obj = SqPlus::CreateConstructNativeClassInstance(SquirrelVM::GetVMPtr(), _T("hoge") ) ClassA * p = (ClassA *)(obj.GetInstanceUP()); とかでいけるのかと思ったら、そんなメンバねーよ、とVCに言われてしまった。
151 :
150 :2008/06/13(金) 14:47:05
すみません、私はキチガイでした。 なんでこれでビルド通ったんだ???
自分で自分を放送禁止用語で貶めなくても。
Luaってlua_loadfileで読み込んだ特定のファイルのデータだけ解放する方法ってありますか? 例えば自分で作成したテーブルにスクリプトを読み込ませて、それを削除する、とか。
グローバルに追加した物を削除してGCかければいいとは思うけど… 方法としては、ロード前にグローバルテーブル入れ替えちゃう方法もいいかも。
SquirrelのコンパイラがFILE*使ってるのを何とかしたいんだけど、 sqstd_fopen、sqstd_fread、sqstd_fwrite、sqstd_fseek、sqstd_fclose、 sqstd_feof、sqstd_ftell、sqstd_fflush これ全部書き換えればなんとかなるかな? 誰か実証した人いない?
>>155 うちは2.2.1でそれで一応動いてるよ。squirrelの全機能の検証まではしてないけど。
157 :
デフォルトの名無しさん :2008/06/23(月) 01:17:20
>>154 それをやる方法がAPIで見つからなかったんですが…
ひょっとしてlua_Stateのl_gtメンバを
直接書き替えるんですか?
>>157 >ひょっとしてlua_Stateのl_gtメンバを
>直接書き替えるんですか?
さすがにそんなことを推奨しないよw
setfenv()使えばいいかと。
CでやるならluaB_setfenv()あたり参考に。
ただグローバルそのまま置き換えると元のグローバルにあったAPIとか全部使えなくなるわけだけど、
新しいグローバルのメタテーブルの__indexに元のグローバルでも入れとけば
なんとかなるんじゃないかなぁ。
test
tolua++ってオワタんですか? サイトにアクセスできないけど…
まだ繋がる。 プロキシを使うと接続できるという報告例あり。
よくわからんけどそれは串のキャッシュを見てるだけなんじゃ…。
あーやっぱtolua++つながらない人いるんだ。 うちも基本繋がらないんだけど、串とか携帯とかhtmllintゲートウェイとか経由すれば大抵いけるんだよね。 調べた限りではその付近のIP一帯につながらない。どっかでルーティングが狂ってそう。
LOVEっていうLua用?の 2D Game Engineみつけた チュートリアルは知りたかったこと扱ってるし簡単そう!
167 :
デフォルトの名無しさん :2008/06/30(月) 13:21:17
そういや、後輩が持ってたけどLuaの本っていつの間にでたん?
168 :
デフォルトの名無しさん :2008/06/30(月) 14:13:00
ググレカス
169 :
デフォルトの名無しさん :2008/07/05(土) 17:30:37
ゲーム向け組み込みJavaScript(まだベータ版)
CRI Script - Trac
http://criscript.com/trac ・ゲームへの組み込みを念頭に作られた ECMAScript の処理系
・PC と Xbox360 で動作確認
・BSD ライセンスに近い独自ライセンス
・バイトコードにコンパイルして実行 (=実行時オーバーヘッドが少ない)
・マルチスレッドサポート; resume() という言語拡張も。
・C++ との相互利用が簡単
・PowerPC, ARM に向けた最適化
・Eclipse によるデバッガ
・コンポーネントをカスタマイズ可能で、メモリ使用量が小さい
・GC のタイミングをコントロールできる
・Vector とか Matrix とか
参考URL ※箇条書きは書きサイトより引用
ゲーム組み込み用の ECMAScript 処理系 CriScript - Game Scripting Memo
http://d.hatena.ne.jp/epics/20080506/p2
なんで60MBもあるんだよ・・・
boostのライブラリのせいかな? srcのほとんどがboostのヘッダだ。 リリースとデバッグのライブラリで合計400MBもある。
bisonとか使うなつーの
後発なんだったらせめてLuaあたりは軽くこえてもらわんと
Cから使えるJavascriptといえば spidermonkeyはどうなんだ yieldも使えるし
>>172 なんで? 使いたいの使えばいいじゃん。
やりたいようにやればいいじゃん
ライセンスは?
178 :
デフォルトの名無しさん :2008/07/10(木) 13:03:11
セデックでスクワラルのセッションがある
luaでゲーム作る人ってやっぱりそんないないのか
小規模なゲームだと使うメリットがあんまりないし 使うほど大きな規模のゲームがそもそも作られない ・・・んじゃないかと思う あと組み込み言語自体がいまいち一般的じゃないよね
海外ゲーはMOD改造しやすいように組み込み言語やXMLなどを使っている。 一方、日本は海外のようなMOD文化が弱い。あっても、バイナリ解析によるデータ変更や画像差し替えが主。 日本のゲームは書き換えを許容する文化でないから、汎用言語を使って間口を広げる必然がないのかも。
homeworldシリーズはluaだったよ
luaやsquirrel使ってたとしても あえて公表する理由がない
>>184 luaはライセンス表記しないとダメだろ
luaはMIT、Squirrelはzlib
>>181 DSluaおもしろそうだと思ったんだがな・・・
組み込み系の言語はそもそもゲーム本体作るのに向いてないしな。 アクションゲームの敵の動きや敵の配置とかをスクリプトで記述するのには向いてるけど。
191 :
デフォルトの名無しさん :2008/07/12(土) 01:13:13
>>190 Rise of Nationsとか思いっきりXMLだったな。
改造し放題。
AoE3も確かそうだった気がする
192 :
デフォルトの名無しさん :2008/07/12(土) 01:15:06
>>189 embeddedの言語はあくまでDSLだからねえ
Pythonとかのレベルになるとそうでもないんだろうけど
Pythonはbattery includedだが電池を作るのに向いてるわけじゃないだろ。
>>187 そう?
言っていることは同じで、Wikipediaは要約しているだけのように見えるけど。
ところで、このライセンスだと、ソースコードを配布しない場合も
ライセンス文を書く必要があるってことだよね?
商用ゲームだと、マニュアルの半ページくらいうはめになりそうだ…
>>185 ,
>>194 著作権表示および本許諾表示を記載しなければならない、というのはソースコード等の話です(消すな、ということ)。
マニュアル等への表示義務はないです(旧BSDライセンスには宣伝条項があった)。
あとサブライセンスが許可されているから、より権利を制限する方向へのライセンス
(例えばGPLや商用ライセンス)を上からかぶせて適用することには問題がない。
ライセンス表記が必要だと思われてるとはなあ
業界でなかなかオープンソースが使われないわけだ
↑偉そうなこといって本当にすまんw zlibと間違ってたみたい
MITの場合でも、見ようと思えば見れる場所にライセンスファイルなりを置いておけばいいでしょ。 オンラインのCREDIT表記あたりが適切か。
199 :
デフォルトの名無しさん :2008/07/13(日) 02:48:50
>>198 まさか、CDATAでスクリプトでも埋め込むのか?w
XMLで書かれたスクリプトってのもどこぞにあった気がする・・・ あんま書きたくないが。
>>200 XMLで書かれた同人ゲームを一つだけ知ってるが、
解析がえらい面倒だったな
202 :
デフォルトの名無しさん :2008/07/14(月) 04:31:50
XMLで書いてると最後に統計取れたり 解析が楽だったりするのがメリットか。 ドキュメンテーションも楽だろう。
S式じゃダメ?
セックスピー
Lua workshop2008もうすぐはじまるよ @ワシントン州で
xtal更新とまっちまってるなあ
>>207 C++では行き詰まるという現実に気がついたのでは
つまりスクリプトをつくるための軽量スクリプト言語を アレ?
わらかすなwwwwww
Lispでいいじゃん
212 :
デフォルトの名無しさん :2008/07/20(日) 19:41:13
そういや、Ruby の Matz もOOPのスクリプト作るのにOOPはむりぽ みたいなこと言ってたな
214 :
デフォルトの名無しさん :2008/07/21(月) 01:53:26
今時、さすがに速度じゃないと思うがw(開発速度?w) Matz日記の過去ログにあったかもしれん。ちょっと行ってくる
確か、まつもと氏が混乱するとかいう理由だったような・・・・と思ったら
オブジェクト指向言語でオブジェクト指向言語を実装するというのに、脳がついていけないんだけど。
それって、僕だけ? (笑) C++ で言語作ってる人がいるけど、よくやるなぁ、とか思う。
ベース言語のクラスとか継承とかと、実装言語のクラスや継承がごっちゃになて、訳わかんなくなっちゃう。
設計して、どういう風に作ろうかなと思った時点で、もう、わかんなくなって「もういい、やめた」って。
ttp://jp.rubyist.net/magazine/?0001-Hotlinks
C++/CLIのことかー
なんだ…人間の能力の限界の話なのかよ
PHPもC++でエンジン書いてたが、やばいと気がつき後にむりやりCで 書き直したと聞いたことがある。具体的に何がやばかったのかは知らない。
俺には全く理解できん CでいいならそのままC++でもいいじゃんと思うんだが…
そもそもCよりC++の方が型がこなれているんだから OO捨ててもCより享受できるものが多いはず。 まあ、でもポータビリティ犠牲にするほどのものでもないかなあ。
>>219 C++ は、効率重視で、バイナリ互換とるのが極端に難しい実装ばっかりなので、
独立アプリならいいんだけど、ライブラリとして広く長期的に共有されるような
ものの記述には残念ながらあまりむいてない。
Windows はこれを COM という形で一応解決したんだけど、UNIX 系OSではその手のものが
統一的につくられることは結局なかったからね。php のような、他と組み合わせた
運用が求められるものだとこの点はわりと致命的なので、Cでかかざるをえ
なくなったんじゃないかな。
一応 Objective-C という選択はあるけど、こっちは実装が限られてるからねぇ
勉強になりました
ABIの問題ってことかな。 C++のライブラリをextern "C"してDLLやsoにしたものを、 Cとかで呼ぶとなんかまずそうなのは想像できるな。 グローバルなコンストラクタとかあったらそれはいつ呼ばれるんだろうって。
継承かガベージコレクトじゃね?
>>223 もう一度良く考えてみろ。どうにもならないことはない。単にリンカがどうするかというだけのことだ。
しかし、万人が納得する解法は無いという事も、ここからわかる。
226 :
デフォルトの名無しさん :2008/07/24(木) 20:18:47
Squirrel3.0alpha1リリースあげ
イラネ
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つの内の一つなんでしょうか?
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()が返すのはグローバル空間に登録するクロージャ」ということがより直感的に理解できました。
#コンパイル済みのバイナリについても悩みどころだったので説明感謝です。
LuaとかSquirrel使ってる人って、存在しない関数・変数の検出や、 引数の数チェックってどうしてます? 実行時にはエラーになりますが、さすがに関数の引数の数間違いで 実行が止まるのは面倒ですし、 エラーが起きるコードが普段はなかなか実行されないところに あるものだったりするとかなり面倒ですよね。。。
それは環境によるのでは? ユーザーにいじらせるようなものでなければ落とした方が間違いに気付きやすくていいと思うけど
誰か静的型付けの組み込み言語作ってよ
>>232 型チェックさえしていれば引数の数チェックは必要ない。
Luaは引数の数が違っても変数が未定義でも実行は止まらない。
存在しない変数の値はnilとして続行。
実行が止まるのは、nil以外の型が必要なところにnilが来るのが原因。
>>233 そうですね、僕は自分しかいじらないので、エラーの時は落とすようにしてます。
ただそうしてると、Cなどであればコンパイル時にわかる型のミスなどが、
Luaだと実行してしばらくしてからでないとわからないので面倒で…
>>235 nilが入ってたまたま動作し、エラーが発見できなかった場合に
デバッグするのが大変ではありませんか?
公開する時には実行が止まらない挙動でないとまずいですが、
作っているときは「想定外の挙動」を検出するために、
型チェックと引数の数チェックは必須だと思っています。
>>234 そ・れ・だ!
>型チェックと引数の数チェックは必須だと思っています 個人的には厳格な静的チェックが欲しいならCで書けばいいし、 気楽にかけて初心者に教えやすく関数がファーストクラスだったりするのが スクリプトのメリットだと思ってる でもまー、スクリプトの用途によって違うかもね
238 :
デフォルトの名無しさん :2008/08/06(水) 02:27:31
なにげにsquirrelだとC++から関数通すたびに数回は引数の数チェックに ひっかかるけど実はデバッグのための膨大な時間の浪費を回避できてたのかな
関数型の組み込み言語あれば面白いかも
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 :2008/08/07(木) 10:06:29
なんでもないです。無かったことにしてください^^
243 :
241 :2008/08/07(木) 11:20:04
うーんやっぱ全然分かりません。
>>241 みたいな例でいうと、
c++側でgameクラスのインスタンスを生成して、
そのポインタをsqplusに渡して、
sqplus側でSetMsg()だのGetMoney()だのの関数を使う
っていう、そういうことはできないんでしょうか?
なんか根本的に用途間違ってますか?
244 :
241 :2008/08/07(木) 11:28:49
>sqplus側でSetMsg()だのGetMoney()だのの関数を使う sqplus側で受け取ったポインタを通して そのインスタンスのSetMsg()だのGetMoney()等のメンバ関数を使ったり メンバ変数の操作をしたり、ということをしたい、、、 ということです。
もう少しマニュアルとサンプルとか見直して出直してきたほうがいいぞー 概念的にはもちろんそういうことができるが、C++ のインスタンスの情報は squirrel 側は当然知らないので、ポインタを渡しただけでは何もできない。 呼び出し用のラッパーを squirrel の流儀で構築する必要がある。 具体的には、C++ のインスタンスは、ユーザデータ型をつかって保持し、 メソッド呼び出しは、そのインスタンスを使ってメンバ呼び出しをする Cのラッパー関数を、ネイティブクロージャとして、そのユーザデータ型の オブジェクトの委譲テーブルに登録することで実現する。 sqplus はこれの記述を簡易化するためのテンプレートライブラリ。 メンバメソッドの引数から自動的にラッパーを組み上げて登録してくれる。 基本的には、登録したクラスを、squirrel 側からインスタンス化して使うのが想定されてて、 C++ 側で生成したインスタンスをはめこむのは原理的にはできるはずだけど、sqplusが それをサポートしてたかどうかは知らない。
つまり、C++をはじめとする静的型付言語の問題は型システムの相互運用性でありそれが組み込み言語でユーザデータを扱う際に表面化する、というわけだな。
>>245 SqPlus の testSqPlus2unit/test_PassByReference.cpp
にその例があるよ
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")); }
>>232 動的言語はその辺は実行しろでFAだったと思いますよ。
動的言語を使用するなら、せめて全経路を走査する単体テストくらいは書けということなのでしょう。
>>245 >基本的には、登録したクラスを、squirrel 側からインスタンス化して使うのが想定されてて、
>C++ 側で生成したインスタンスをはめこむのは原理的にはできるはずだけど、sqplusが
>それをサポートしてたかどうかは知らない。
Squirrelを直に叩いていいならば、
・sq_createinstanceでコンストラクト前のオブジェクトを得る。
・sq_setinstanceupでオブジェクトのポインタをセット
・sq_setreleasehookで後始末関数を設定
で実現できると思いますが、SqPlusには相当する機能は無いんでしょうか。
この機能、無いとFactoryMethodがあるとき困るので、無い事は無いと思うんですが…
どうしても自分のコードで 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();
お前らちょっと聞いてくれよ Squirrelなんだけどさ、 class Foo { val = []; } ってプロパティを空配列で初期化したんだけどさ、これ、インスタンス毎に 空配列を作成するんじゃなくて、インスタンス間で同じ空配列を参照するんだね。 わかんなくて3時間くらいはまったよ。なんだよもうOTL
うむ。みんなが通る道だ。クラス中で定義した値は、インスタンス生成時に 毎回実行されるわけじゃなくて、単にコピーされるんでそういう挙動になるようだ。 ってことで、配列と辞書はコンストラクタで初期化するのが基本。 ちなみに全部同じ空配列を参照するから、クラス変数的に使えたりする。
254 :
デフォルトの名無しさん :2008/08/17(日) 10:46:09
Luaのgeneric for文って、引数の個数を柔軟に扱うというLuaの特徴を生かしているのだね。
くわしく
>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) としても間違いじゃないから上のコードで統一できる。
Lua 5.1.4 いつも通り、バグ修正のみ
261 :
デフォルトの名無しさん :2008/08/25(月) 00:18:07
Luaの質問です
Luaの関数の戻り値をC言語で受け取りたいのですが,どうもうまくいきません.
http://ameblo.jp/coffeex/theme-10002528966.html このサイトの Luaのり付け講座2 - C++からLuaの関数を呼ぶ という部分のコードを丸写しして
実行したのですが,実行結果が
可算結果: 5 (5.000000)
減算結果: 1 (1.000000)
ではなく
可算結果: 1 (1.000000)
減算結果: 5 (5.000000)
とひっくり返ってしまってます.もしかして環境によって戻り値の返し方は違うのでしょうか?
ここの1つめと2つめは逆のような気がするな。 -2のほうが下にあるんだから1個めでは。 double result1 = lua_tonumber(L, -1); //1つめの戻り値(注意:Luaの数値はdouble型!) double result2 = lua_tonumber(L, -2); //2つめの戻り値 その前に「可算」が気になる・・・
Squirrelの話なんだけど、スレッド内でエラーが発生すると有用なメッセージ出力しないのは 仕様? 例えば、 local coro = ::newthread( function() {
ゴメン途中送信した、まとめてから書くよOTL
再送。 Squirrelの話なんだけどさ、スレッド内でエラーが発生すると有用なメッセージ出力しないのは 仕様? 例えば、 local coro = ::newthread( function() { noindex = ""; } ); coro.call(); ってコードを書くと、[the index doesn't exist]とだけメッセージが出力されて、スタック トレースもcoro.call()の部分までしか表示してくれない。 実際のコードだと、noindex = "";の部分が原因だって特定するのが時間かかる。 ただのtypoの特定に時間かかってしまうと、コーディングのテンポが悪くて非常に困る。 Luaはそのあたりどうなのかな。コルーチンの内部にまで踏み込んでスタックトレース 表示してくれる?
sq_notifyallexceptions に SQTrue 指定するだけででない?
>>267 お、ほんとだ出るね。サンクス。
でもこれ指定するとtry/catchでくるんでるのにエラーハンドラ呼ばれるんだよね?
状況によっては困る気もする。
デフォルトのエラーハンドラはトレース表示するだけで catch の先自体はちゃんと動いてた と思うから、あんま困ったことはなかったような記憶、だけどどうだっけか
>>269 例えばエラーハンドラが呼ばれたときはキャッチ失敗したということだから、深刻なエラーとして
ログ出力して終了する、という運用スタイルの時困る気がする。
運用方法変えたら良いだけかもしれないけど…
本当は小細工しなくても、コールスタックちゃんと表示してくれるのが一番
なんだけどね。
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
てきとうな英語と実証コードを送れば分かってくれるんじゃね?
273 :
sage :2008/09/01(月) 23:43:31
Squirrelでスレッド使うときって、 自分でVM切替えしてるの?
>>272 公式フォーラムでいいのかな?暇ができたらレポートすることにする。
>>273 自分が何を指すのかわからないけど、フレンドVMを使っていることを普通意識する必要はないよ。
275 :
デフォルトの名無しさん :2008/09/03(水) 15:08:48
SqPlusはいくつか変なところあるよ。 フォーラムに報告もたまにしてたけど、最近のリリースがけっこう前のものならとりこまれていないのかも。
スクエニの小さな王国はSqPlus使ってるってさ
277 :
デフォルトの名無しさん :2008/09/10(水) 21:12:07
278 :
デフォルトの名無しさん :2008/09/10(水) 22:51:52
Squirrelに関して質問させてください。 LuaからSquirrelに移行しようかと、いろいろ試しているのですが SquirrelにはLuaでいう require/module のような機能はないのでしょうか? 自前で用意すればできるのはわかるのですが、 Squirrelの作法として、 スクリプトファイルを機能ごとに複数に分けて管理したい場合は 通常どうするのが正しいのでしょうか? よろしくお願いします。
特定のテーブルにロードすれば出来るのでは? squirrelってsqstd_dofileとかでファイル読み込む直前でルートテーブルをプッシュしてるけど、 それをルートテーブルではなく、任意のテーブルを指定する そうするとその任意のテーブルにデータが読み込まれる ただし、使うときはtable.func();みたいな使い方をしなければならなくなる…のかな? 他にもデリゲートテーブルを使う方法もあるけど、これはファイルごとと言うわけにはいかないかな というかLuaってrequire/moduleで機能ごとに分けて管理できるんだ… そっち知らなかった…
280 :
デフォルトの名無しさん :2008/09/11(木) 21:52:26
>>279 返答ありがとうございます。
やはり、自前で用意する必要があるようですね。
とりあえず Lua と同じような形で
ルートテーブルに登録する形で実装してみようかと思います。
ありがとうございました。
>>279 >SquirrelにはLuaでいう require/module のような機能はないのでしょうか?
>スクリプトファイルを機能ごとに複数に分けて管理したい場合は
個別に管理、ということは
requireを使えば、いらなくなったスクリプトファイルとかを個別に解放できたりするんですか?
282 :
281 :2008/09/11(木) 22:29: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ファイルに記述するわけにはいきませんから。
そのぐらいなら、手動で適当に読み込めばいいんじゃないかと。 例としてはたとえば以下のような関数をつくっておいて、 function require(name, cond) { if (!cond in ::getroottable()) { dofile(name); } } Character.nut の冒頭 CHARACTER_DEFINE <- true; Stage1.nut や Stage2.nut の冒頭 require("Character.nut", "CHARACTER_DEFINE"); 判定に使うのはグローバルに定義するものなら なんでもいいですが、ルールきめておけばあとでみたときわかりやすいと思います。
あと二週間くらい? 発売日になったらとりあえず買ってこようと思う。
こういうのが何十冊も出ると買う気なくすが、Luaはまだまったりしていてよいです
赤坂じゃなくてよかったw
CEDECでスクエニがSquirrel使ってるの話してたねー。
>>290 kwsk
どっかに資料とかあがってないの?
今さら知ったのかよ
SquirrelとLuaってどっちがつおいの?
Luaの方がこなれてるだろう
強さで言うとSquirrelのが強い。 悟空とべジータくらい違う。
Squirrelはバグだらけ。 自力で直せる環境にいないと使えない
LuaとCをいったりきたりすると演算子とか間違えるから Squirrelのほうがやわらかい
速さと軽さならLua 基本的な演算とsuspendを行う処理を一億回ループさせたらLuaはSquirrelの1/3の時間ですんだ
てゆうかこのスレ張ってる奴けっこう多いんだな 散々過疎ってたのに燃料来たとたんこれかよ
Luaの方が愛されてる感はある
>>285 この辺がなんか不安、サンプルやらソースやら見れば解ることが山ほど載ってそう
>〜人気スクリプト言語Lua(ルア)とC/C++のバインディング実例を詳細に解説。
サンプルやソース見てわかる人は買わなきゃいいだけだろw
サンプルの種類が増えるのは良い。延べ数ばかり増えるのは困る。
LuaとC/C++との連携では、Swigはあまり使わないものなんですか?
>>304 Lua本体に入ってない
LuaがC/C++との連携を単なるオプション扱いすることはない
ゆえに、Swigはあまり使わない
>>291 一応、CEDECのサイトで講演に使ったパワポがpdfでアップされてたんだけど、
これ会員以外に流すとなんかやばそうな・・・
まぁいろいろ言ってたよ。
コード全体の7割はSquirrelとかallocが多いのでメモリまわりの工夫をしたとか。
実際このゲームプレイしたけど、Wii環境であれだけ動いていれば、まぁ実践レベルには十分達しているといえるだろうね
つか、スクエニの開発スタッフ、このスレたまにはチェックしてると思う。 2chにここしかSquirrelのスレないんだもん。 クレっていったら資料くれそうな気もする
308 :
304 :2008/09/21(日) 22:00:07
>>305 なるほど、サンクスです。「入門Luaプログラミング」を読んだんですが、
C++との連携方法がいまいち良く分からなかったので(SquirrelだとSqPlus?)、
>>285 の本を見て勉強することにしてみます。
今週末か。レビューよろ
既出の質問かも知れませんが…。 CからLua関数をコールするときは、関数名、引数をスタックに積んで行うと思います。 これを以下のようにコールするのって、副作用とか問題点って何かありますか? (実行速度とか) sprintf( strCmd, "return add( %f, %f )", a, b ); luaL_dostring( L, strCmd );
速度なら試して比較すりゃいいんでないの?
ものすごくループする所で使うんじゃなければそんなに問題ないよ。 スタック積むのめんどくさい時はたまにやってしまう。
310です。 速度低下と実数が桁落ちするデメリットはすぐに分かるのですが、 マニュアルにある"tail call"形式にする影響が少々心配でした。 アドバイスありがとうございました。
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()
>>285 って誰か買った?
どっかで見てから買いたかったんだけど売ってない。
よさげor誰も買ってないならamazonで買おうかと。誰か買ってたら感想よろ
>>317 >ご注文いただいた商品の配送予定日がまだ確定しておりません。
<中略>
>継続して商品の調達に努めてまいりますが、調達不能な場合または入荷数の関係上キャンセルをさせていただくこともございます。
報告するようじゃないけど、初めてkonozamaメール貰った。\(^o^)/
319 :
317 :2008/09/30(火) 15:07:52
konozama食らうくらいなら探すべ、と思ったらヨドにあったんで買った。 結構いろいろ書いてあるっぽいんで楽しみ。
おれもさっきこうてきた 大学の書店に普通においてあったよ
参考Webサイトにこのスレがwww
記念ぱぴこ オール・ハイル・ぅあ!
bccで使う方法がようわからんのだけど
bcc用のlib付属してないんだっけ。 bccについてるimplibでdllからlibファイル吐かせてリンクすればいけんじゃね? 何がわからんのだかわからんから適当言ってるが、的外れなこと言ってたらスマン
つーかBCBならともかくbccなんざ捨てろ
そしてIDEだけ残ると
vcのexpressあるからなあ。 無料で使えるってことで以前は定番だったけども。
無職なのに、欲望に負けて
>>285 の本を買ってしまった…orz。
C/C++とのバインディングは、パッと見でtolua++とかいうのを使っているみたい。
今のうちにgoluaを登録商標にしとかないと
自作のLuaラッパにApolloって名づけようとしたけど RubyのDelphiバインディングに使われていた
「バインダ」てyaccと同じにおいがする 使うと勝ち組になれるような気がするぜ
amazonからやっと本が届いた tolua++便利だな まだ使っても無いけど
lua最高!
luaはAlgol系schemeのうまくいった例という感じがする
DSのLuaってどうよ?
>>285 の本のサンプルダウンロードサイトって落ちてるのかな?
tolua++のソースとかSDLとかSConsとかダウンロードしたいやつが結構ある。
できればCD-ROM付きの方が良かったかも…。
落ちてるっぽいな。 まあCD-ROMは邪魔だわ更新されないわで嫌いだから気長に待つが。
lua5_1_3_Win32_mbenc.zip にコンパイル済みの lua5.1.lib が入ってないと 81ページ付近で少し困るような気がする。 ついでに59ページ。counry
340 :
337 :2008/10/06(月) 22:52:20
なんかサイトがダウンしてたみたいで、いろいろダウンロードできた。 4章まで読んだところでは、4.10のLuaの文法:クラスのところが、Lua入門の方で よく分からなかったとこなんで役に立ったかも。 5章から手動かしながら読んでくべ。
Lua最高!
Lua melhor!
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
クマでもわかるLuaプログラミング 第5版
スクリプト言語 Kuma
Kumaで書かれた
>>343 のスクリプトを実行すると「(_●_)Lua!!」と表示されます
ぅぁあああ!
インタプリタ書いてみた io.open(arg[1]):read("*a"):gsub(([[ ∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ KUMA 彡、 |∪| / / __ ヽノ / (___)]]):gsub("[^%a]","%%%1"):gsub("KUMA","(.-)"), function(s)io.write("(_●_)",s,"\n")end)
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
なんだクマスレか
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / _ヽ ヽノ ノ/ (___)\/ Urso de lua 「和名: ゥアノワグマ」
さすがにうざいだろこれは…
他に話題も無いしなあ
つ翻訳
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
356 :
デフォルトの名無しさん :2008/10/13(月) 20:58:57
そういう部分は後で少しずつCで書き直すわけにはいかないのかな CとLuaの比率をなめらかに変化させるのが理想的だと思う
ところでここはAngelScriptやGameMonkeyの話題はOKなの?
組み込み系言語総合だからおk
やたら懐かしい名前が出てきたなw
AngelScript使っているひといないの? 結構良さそうなんだけど
(´\r-、 ┼ + /`/`) + ┼ (\. \! * // ,/) * + * (ヽ、 \ + * / /) + ⊂ニ ) * + ( ニ⊃ * + ⊂、 ( ∩___∩ ノ ⊃ + * (/(/ ヽ | ノ ヽ / 、)ヽ) ┼ + (/ (⌒ヽ. ∨ ● ●レ /⌒) 、)ヽ) * (/'\ \| ( _●_) ミ' /、)、)´ + + `ヽ彡、 |∪| ノ / Lua!! + 〉 ヽノ / * + ┼ / / + + / /\ \ * + + * / / ┼ ) ) + / / + ( \ * * + (_/ * \_丿 ┼
流れぶった切るが ゲーム系で問題になるluaのreallocの問題って 1) OSのreallocは排他等高コスト 2) 拡張時のコピーが高くつく 3) メモリ断片化 のどれだろう。また、その代替案として以下は正しい? 1) 2) =>インタフェース変えずにカスタムlua_Alloc作成だけでOK? 3) =>stl::vector ->stl::dequeみたいに配列サイズ追加しても allocが呼ばれない配列管理に変更
>>361 あー、おれも興味あるんだ
文体C++風味で型の扱いが静的というところに魅かれる
365 :
363 :2008/10/15(水) 03:08:37
ちょい修正 1) =>インタフェース変えずにカスタムlua_Alloc作成だけでOK? 2) 3) => 配列サイズ増加時にallocは呼ぶが、stl::deque のような再配置をなくした配列管理にし、また、追加される メモリブロックは固定長に出来るので固定長メモリアロケーター で済む。故にメモリ断片化が防げる。
>>363 ここで聞くほど問題が見当たらないなら
4) そもそも実は問題ない
という結論にならないかね?
malloc/free が OK で realloc がダメとかおかしいだろ、普通に考えて。
AngelScriptはC++みたいで個人的に大好きなんだが漠然と遅い気がする。 まぁちょろいテストアプリを作っただけなんで作り込んだらいい線いくかもしれないが。
何だかんだで速度が気になってLuaに戻って来ちゃうんだよなあ。 PythonとかRubyとかちょっと組み込んでみたいんだけども。
369 :
363 :2008/10/15(水) 20:32:14
反応薄いな。366の言うとおり実は問題にしてる人少ない? 本当にリサイズが発生するのって配列サイズの増加と テーブルのハッシュ再計算時と文字列結合ぐらい? lua自身の配列サイズの増加も倍々方式だし、realloc自体も 同様の最適化されてるので、コピーはそんなに発生しない。 ある程度の大きさのランダムアクセス配列が必要なら、 配列サイズの事前割り当ても可能だし、配列自体の 使いまわしも出来る。 ガベコレはだめだ、参照カウンタがいいってんなら理解できるが。
そもそもシビアなゲームとかならalloc呼び出す、みたいな設計はしない。
AngelScriptはホスト側のインターフェイスは好みなんだけどなあ・・
AngelScriptにはJITみたいなのないの?
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
どなたか教えてください。 struct X { int x; }; void B(struct X *x) { printf("%d\n", x->x); } void A() { struct X x; B(&x); } こんな感じで関数Aから関数Bを呼ぶコードがあるとして、 関数BをLuaに書き換えたいのだが、 どうやったらC言語側でメモリ管理している構造体データをLuaの関数に渡せるの?
>>374 lua_pushlightuserdata()
メンバ変数をLua側に公開するなら他にも色々必要だろうけど
>>375 ありがとうございます
色々って、たとえばアクセス用の関数を準備するとかですか?
ほかになにか手はありますかね。
>>376 その関数とデータを一つのテーブルにまとめるとか
メタテーブルを使うとか
メタテーブルの説明はマニュアルにある
何に使うかは自由
SQDEVでSquirrelの自作スクリプト&プログラムのデバッグをやってるんだが、 SquirrelスクリプトにSJISの文字列リテラルを書いてたら Eclipseで毎回コンパイルエラーがでるのは俺だけ? Eclipseの起動前にスクリプトを一時的に削除したりして面倒。 デバッグ用に動かす分には問題ないっぽいんだが。 \
ヒント:SJIS
380 :
378 :2008/10/21(火) 18:22:22
>>379 今確認したが、UTF-8でスクリプトを用意して
bin/squでシンタクスチェックをさせるようにしても、
やはり日本語のリテラル部分でEclipseのエラーメッセージが表示される。
(もちろんsqu -c では問題なし)
ヒント:UTF-8
Eclipseスレでどうぞ
383 :
デフォルトの名無しさん :2008/10/22(水) 21:17:49
とりあえず、SQ-DEVでインストールの仕方を教えてくれ、うまくいかない。
384 :
378 :2008/10/25(土) 14:22:02
>>381 UTF-16LE/BEに変えてみたがやはり変わらず。
それからSquirrelインタプリタsqu.exeはコンパイル時にエラーを吐かないことが結構あることに気づいた。
コンパイルチェックはあまり信用できないんだな。
>>382 説明が悪かった。Eclipseのウィンドウに、「Squirrelスクリプトのコンパイルエラー」と表示されるわけだ。
表示させてるのはSQDEVなので一応まだSquirrelの範囲内。まあしつこいと思われるようだったら黙る。
>>383 俺もつい先週入れたばかりなのでまだ使える情報だと思うが、
1.まずSun Java SEの最新版を入れる。
2.EclipseはC++用じゃなくてJava開発用をインストールすること(CDTは後から入れられる)
3.あとはSQDEVのWikiページの通りでよい
ヒント:UTF-16LE/BE
まず、素のSquirrelはマルチバイド考慮してない 本体のコンパイル時にUNICODE対応させるオプションがある。 内部のUNICODE=UTF-16 だけど確か、読み込み時に標準ライブラリを使ってロードする時はいくつかのUNICODEに対応していたはず、 (UTF-8N,UTF-16のLE,BEあたりだったような) この辺はソース読んでみて、確かめてみて簡単だから
387 :
378 :2008/10/25(土) 20:10:22
>>386 Squirrelソース本体はまさにその通りですね。どうもありがとう。
ところがSQDEVに関しては、どうやらSQDEV自体でSquirrelスクリプトの構文解析をやってるっぽいんだ。
(pluginのJavaソースコードを入手して眺めてみた)
このJavaで独自に実装された構文解析器で文法チェックしてるのか、
SQDEVのオプションで指定するインタプリタで文法チェックさせてるのかはまだ調べてない。
残念ながら俺はJava界隈はあまり詳しくないので、どう直したらSJIS対応の構文解析器に改造できるのかがわからん。
388 :
デフォルトの名無しさん :2008/10/25(土) 21:21:47
>>384 syntax checkingもできてないし
デバックできなかった。
suspend
ready
connected
SQDBG error : cannot open the file
SQDEVって結構謎めいた奴なんだな
>>388 EclipseでSquirrelパースペクティブを開いているかどうか。
SQDEVの設定は完了しているのかどうか。
プロジェクトのファイルパスがスペースを含まない半角英数字のみで構成されているかどうか。
sqdbglibを含んだインタプリタかどうか。(sqdbg.exe)
391 :
390 :2008/10/27(月) 15:17:09
補足。 リモートデバッグというのは動いている外部プログラムをSocket越しにモニターするだけのことだから、 デバッグ対象のプログラムが正常に動作するようにする必要がある。 「SQDBG error : cannot open the file」 という言葉通り考えるなら、sqdbg.exe の場合だと 「Default Working Directory」と「Default command line options」の組み合わせが正しくないとか。
既出かもしれないが、 SqPlusの初期化において、VMをSQSharedStateNodeに渡してアプリケーション終了時にまで VMの解放を後回しにするコードは丸めてゴミ箱に捨てたほうがいい。回避させたほうが無難。
393 :
デフォルトの名無しさん :2008/10/27(月) 18:53:29
>>392 「Default command line options」がわかんないよ。
「test.nut」じゃないの
ほかは全部あってると思う。
394 :
393 :2008/10/27(月) 18:54:05
>>393 まあ分からないというなら、ファイル・ディレクトリ構成まで含めてWikiと全く同じにしてごらんよ。
connectedと出ているようだから、sqdbg.exeへのSocket接続は成功しているようだ。
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
ほっしゅ
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
luaで正規表現は使えますか? また、文字列処理に関して、pythonやrubyと 比べるとどうですか?かなり劣ってますか?
>>399 使えます
ある程度は劣っていると思います
>>400 >>401 レスありがとう。
rubyかpythonの拡張で行こうかと思ってたけど、
組み込みで行くわ。
俄然やる気出てきた。
>>399 ,402
文体の変化にやる気というか、テンションの上がりっぷりが伺えて面白いんだがw
さしあたり、SquirrelにはSJISのテキストを1文字ずつ区切って 配列にぶち込んでくれるAPIが欲しいところだな。
>>404 自分でネイティブ関数作ればいいじゃないかw
406 :
デフォルトの名無しさん :2008/11/07(金) 20:21:05
スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践 って本に関して、Luaの入門書を先に読んだほうが良いですか? それともこの本だけで完結しますか?
開発効率を上げるためにスクリプト言語(Lua)を利用するという趣旨の本で 読むのにLua自体の知識はあまり必要ない
>406 Luaの構文規則については第4章をまるまる使って解説してる 本に載っている内容だけならこれで十分 自分でなんか作ってみて わからないところが出てきたら Webのリファレンスみればいいんじゃない?
409 :
デフォルトの名無しさん :2008/11/08(土) 04:24:49
ご意見ありがとう御座いました。 大変参考になりました。
あれこれSquirrel(on SqPlus)でテストしたけど、VCで文字コードをUnicodeにした場合、スクリプトコードの日本語はうまく処理できない。 文字列処理をアプリ側でやれば問題はないんだが、スクリプトコードのデバッグに日本語が使えないな。
lua5.0で割り算をした時に余りを出す方法はないですか?
ん、5.0って%ないの?
あるならそんな質問しないだろ常識的に考えて・・・
416 :
デフォルトの名無しさん :2008/11/12(水) 23:54:16
math = nil
420 :
411 :2008/11/14(金) 23:41:53
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
俺のXtalたんはどうなりましたか?
音信不通です
Xtalたんは緊張気味です
返事がない。ただの屍のようだ。
AngelScripたんなら俺の横で寝てるが
AngelScript色々いじってみたが、結構使いやすいな。 文法がC++なんで慣れてるってのもあるが。 ただ、AngelScriptとC++プログラムを結びつけるのを簡単に行うツールとかないのが残念。 LuaBindとかみたいなやつね。
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
>>428 バインダがなくてもシームレスに利用できるのがAngelScriptの良いところだと思うのだが。
>>431 確かに。
Luaはいまいち使いこなせなかったが、AngelScriptはその辺楽でよかった。
ただ、例えば
ASFunc<int(int,int)> f;
f.SetContext(〜);
f.SetFuncID(〜);
int val=f(a,b);
みたいな感じで、普通の関数呼び出しと同じようにAngelScriptの関数呼び出せるのがあれば便利かなーと。
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
いいえ、それはKumaです。
436 :
410 :2008/11/24(月) 14:51:19
アプリ側でsetlocaleすりゃよかったんだな。 UCS2は.NETでしか使ったことなかったので、ロケール失念してた。
すみません、質問があります。 現在、「スクリプト言語による効率的ゲーム開発」という本を読み、 Visual C++ 2008 EE上で空のプロジェクトを作成し、 以下のソースファイルをビルドしてみたのですが、 // 以下、ソースファイル #include <lua.hpp> int main() { lua_State* L = lua_open(); lua_close(L); return 0; } LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 という警告が出ます。 かといってLIBCMTを無視するライブラリに指定するとビルドが通りません。 LNK4098のメッセージを無視する方法以外で、警告メッセージを消す方法はありますか?
LuaのライブラリをコンパイルしたときのCRTとそのプロジェクトのCRTが食い違ってるんじゃね。 大体MTとかその辺のオプションで
>>437 vcppでWin32向けプログラムをビルド際にFAQレベルで発生する問題だ。
Luaに限ったことじゃないのでぐぐればすぐに解決策は出てくる。
ややこしいことにvcppは複数のランタイムライブラリを持っていて、しかも各ライブラリ・プログラム生成時には原則全てあわせる必要がある。
>>439 推測だがLuaのビルドオプションがMTでアプリ側もMDだとこの警告がでる。
この場合でもアプリのほうでLIBCMTを無視する設定にすれば大概大丈夫なはずなんだが・・・
面倒だったら、両方のランタイムをそろえてしまえばラクだけど
>> 438 >> 439 >> 440 プロジェクトの [構成プロパティ]->[C/C++]->[コード生成]->ランタイムライブラリ を/MDd(マルチスレッドデバッグ DLL)から/MT(マルチスレッド)に変更することで警告がでなくなりました。 おかげで少しVC++についてわかりました。 ご丁寧な回答、ありがとうございました。
正しい解決法は、 ・LuaのライブラリをCRT毎に6種類全部ビルドする ・#ifdefと#pragma comment(lib,〜)で自動的にそれを選択するヘッダを作る
スクリプト言語による効率的ゲーム開発の本読んで、 確かに動的リロードはできたら便利だよなと思った。 そこでSquirrelで同じことをしようと思ったんだが、問題にぶつかった。 Squirrelの仕様だと、Classは一度インスタンスを生成すると変更不能になる。 この仕様だとSquirrelのクラスはリロードできないんだよな… かといってdelegate使うのは、折角クラス機構があるのにどうよ?と思うんだが、 Squirrelで動的リロードを実装した人いる?
>>442 Makefileで書けば至極簡単だが、(Luaを)プロジェクトファイルで管理したら普通の方法だとものすごく手間がかかりそうだな。
楽にやる方法何かないでしょうか。
>>443 スクエニの小さな王国とかが動的リロードやってる
CEDEC2008で言ってた
>>443 おそらく、いったんインタプリタを殺して最初からやり直した方が早いと思う。
>>445 やってるのか。詳細が欲しいな。
>>446 今まではまさにその方法でやってた。
色々考えてみたが、ソースに手を加えない方法ではdelegate使うしかないな。
Foo = NewClass( "Foo", SuperClass );
function Foo::foo()
{
// do something
}
のようにクラスを記述しないといけないが…
449 :
444 :2008/11/27(木) 22:30:07
>>447 意図がうまく伝わらなくてすまん。
Luaを6種類ビルドする方法のことを言ってます。
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
>>449 プロジェクトファイルってVCの話か?
それなら、ビルド方法のリリースやデバッグに追加して
「DLL リリース」とか「DLL デバッグ」とか作ればええよ
なんか0xff表記使うとfloatっぽい丸め誤差が発生するんだが。
色マクロに使おうとしてた俺涙目とか思ってたら
>>100 で既出な上、
さらに
>>104 で解決策が示されていた件
ありがとう
>>104
Xtalで書いたスクリプトをSquirrelに移植したら 微妙に遅くなって涙目。 デバッガとかついててSquirrel便利だけど、 どっちにしようかなぁ……。
”微妙に”遅くなるだけなら問題ないと思うんだが・・・ 実行に差し障りがあるレベルなら微妙とはいわなくね?
たしかに、スクリプトの速度が1/2になるのとFPSが1/2になるのとでは全く意味が違うからな。 FPSが明らかに低下したらならXtalのままにしたほうがいいと思う。
456 :
453 :2008/12/03(水) 01:14:18
60FPSでキャッシュせずに全張替えしてる仮実装の状態だが、 Xtalだとぎりぎりで60FPS出せる。CPU使用率は1個換算で96〜98%くらい。 これがSquirrelだと52〜54FPSになって少しカクカクしてくる。 速度ならXtalということになるが、これ以上作りこむとどうせ足りなくなるのは同じで、 描画処理の枝刈りをすればSquirrelでもいけるかも……というところ。 蛇足でスマソ。
457 :
453 :2008/12/03(水) 01:28:54
ところで、みんなSqPlusのところ悪いが(ほんとか?) jkBindってどうよ? なんかフォーラムにパッチ上がってるみたいだけど。
なんかtolua++の挙動怪しかったん、手てグルーコードを書くのを補助する ライブラリ自作しちまったい。 やっぱり自前で書いたほうが細かく制御できていいね。
AngelScriptのShiftJIS対応版とか需要あるんだろうか…
>>460 ちょうど今、vcpp向けの改修を行っているところ。
作者のスクリプト、デフォルト引数などは既に対応した。
まだメタメソッドや複数段階のクロージャの呼び出しがイマイチ不安定なので改善を図ってるところ。
近々フォーラムに発表予定。
wktk
464 :
461 :2008/12/19(金) 20:46:12
とりあえず、手元のスクリプトがほぼ一通り動くようになったのでフォーラムで公開してみる。 協力者求む。 動かないスクリプトの例などがあるとうれしい。
乙!
>>464 乙カレー
LuaはC++だとlua_call失敗時に例外投げるんだな。ちゃんと書いてくれよOTL
てっきりデストラクタ呼ばれないと思って、そういうコードを書いてたせいで
謎の挙動に悩まされたよ。
>>466 リファレンスマニュアルの3.6にそれらしいことが書いてあるよ
Cでsetjmp/longjmp使っててもC++のデストラクタが呼ばれる処理系もあるけどね
>>467 ほんとだ見落としてた
俺の3時間を返せorz
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
toLuaでC++とLuaをバインディングしてるんだけど、 yieldをC++側で呼ぼうとしたとき、 toLuaの生成したラッパーの中じゃ、 lua_yieldを呼べないようなんだが、 どうしてる?
>>470 lua が yeild をどうやって実装しているか、ソースを追っかけてごらん。
>>472 浜中さんの本すでに持ってる人にはあまり新しい情報は出ない気がする…
日本製のゲーム用スクリプトで最もオープン、かつ、つかわれまくってるものを 開発した W.Dee 氏をパネリストでよぶべきだろう、とちょっと思ったけど、 よくよく考えてみればあの人はゲームは本業じゃないか……
うん。Nスクの人だと食指は動かないが、Deeたんなら是非行く。 というか、組込み言語の話だからじゃないかな(Nスクの人がいるけど)。
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
Nスクリプトは、組み込み言語?というよりDSLでは? ゲームとか簡易GUIが簡単に作れるHSPみたいなイメージ
ごめん、 W.Dee ってきりきりの人かスアソ
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ O sol e a Lua!!, parabens!!! 彡、 |∪| / / __ ヽノ / (___)
ぅあけおめー
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
あ、ぅあたんいんしたお!
ところでLuaとかでyieldでスクリプトの処理を一時停止させて、 その状態をファイルとかに保存して、そのファイルを読み込んで復元、ってできる?
>>484 d
ちょっと調べてみる。
しかし日本語マニュアルがないのは地味にきついな…
普段使ってるAngelScriptも英文マニュアルしかないし。
Xtalたん結婚おめ!
地味にきついな、といいながら日本ではマイナーもいいところなAngelScirptを普段使っているところに男を感じるw
Xtalってソースコードに他言語との比較ベンチコードが のってるけど、実際はやいの?
>>487 日本語マニュアルはないけど、サンプルがたくさん付いてて分かりやすいのよ。
あと、LuaやSquirrelのスタック介したやり取りじゃなくて直接的にC++とやり取りできるんで便利。
ただデフォでShiftJISに対応してないけど…
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
Xtalなんて誰も使ってないから 気楽にやりなー
>>488 上にSquirrelよりはやいって書いてあるよ
Squirrelも、JIT対応版を使えばLuaやXtalよりはやくなるけどね。
Luaも、JIT対応版を使えばSquirrelやXtalよりはやくなるけどね。 Xtalも、JIT対応版を作ればLuaやSquirrelよりはやくなるけどね。
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
つまりLuaSquirrelXtal-JITを作れば、LuaやSquirrelやXtalよりもはやいLuaSquirrelXtalが出来るということだね。
a
C++のインスタンスをLuaからLuaのインスタンスかのようにアクセスしたいのですがやり方が判らず悩んでいます。 インスタンスメソッドを直接lua_registerできないですよね、いったいどうしたら良いものやら。。 ご存知のかたいらっしゃいましたら是非お教えください。
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ まピョーん☆ / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ まピョーん☆ 彡、 |∪| / / __ ヽノ / (___)
_,..-- 、 ,' ヽ まピョーん☆ /<┃> <┃ >l _ _ l 、,,--イ | /Mヽ /M l l ` ̄ Lノ/ i `ー l ̄  ̄ヽ / \ { ヽ `ー-'ノ `ー----''"
すでにLua関係ねえw ひかえてくれw
>>499 メンバ関数呼び出しは、関数に対応した整数値とthisポインタを登録して
__call内部でswitchで対応する関数を呼び出すような実装ならしたことあるな。
もっとスマートな方法があると思うけど。
>>499 toLuaとかluabind使うのがええよ。
自前でやるなら、テーブルなどを使うべし。
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua まピョーん☆ 彡、 |∪| / / __ ヽノ / (___)
AngelScriptで改行コードがCR+LFだとスクリプトがビルドできない Windows+MinGWでやってるんだけどこれって仕様なのかな unexpected tokenとか出るから最初何かと思ったわ
>>508 自分の所では普通にビルドして実行できてるな。
ちなみにWindows+VisualStudio2005。
あと、全角文字使ってない?
>>509 半角英文字しか使ってないよー
void main() {
return;
}
これでエラー出たんだぜw
普通に実行できるということはライブラリ自体のビルドに問題があったのかな
なんでだろう、Linux環境と誤認してるのか?
別にLinuxでもSolarisでも改行コードのせいでビルド失敗することないけどな。
スクリプトをUnicode(UTF-16)で保存してないか? 現バージョンだとUTF-16のスクリプト読めないみたい。
>>511 ライブラリがLinux環境(LF)を期待しているのに、Windows環境(CR+LF)を食わせるから
エラーが出るのだと思ったんだが…
Linux環境でCR+LFを食わせてもエラーが出ないなら、他に原因があることになるな
>>512 一応いくつかのエディタで開いてUTF-8Nだということは確認した
けれども、文字コード自体は最初から変えてないよ
エラーがいつもファイルの末尾で出てたから、
試しに void main() { return; } ってのをやってみたら
ビルドが通ることを発見して、改行コードに目をつけた
よく考えたら改行コードに問題があるなら、全ての行でエラーが出るはずだよな…
ファイルの末尾でだけエラーが出てたにも関わらず、なぜ改行コードを変えるとビルド出来るんだろう
MinGW の stdio のバグじゃないかな。 EOF判定がおかしくて、最後の文字(または行)が読めてないか、 あるいは逆にごみを読み込んでしまってるかのどちらかじゃないかと思う。
スクリプトを丸ごと読み込んでそのまま使った場合に、 EOFが無くてスクリプトを読み込んだ領域の後ろの部分まで 解析しようとしてエラー起こしたことがあったな。
最後に空行かコメント行入れてみるとわかるかも?
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
まず最初にエラーの出るファイルをバイナリダンプすべきじゃね?
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua まピョーん☆ / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
原因が分かった freadでファイルを読み込んでたんだけど、そこでCR+LFが勝手にLFに変換されてた そのせいでファイルの長さと文字列の長さでズレが生じて、 スクリプト読み込み時にその差分だけ余計な領域まで踏み込んでた "r"じゃなくて"rb"で読み込むようにしたらエラー出なくなったよ サンプルのユーティリティ関数をそのまま使ったのが悪かったのかもしれん
∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄ まあよくあることだなw Rubyのライブラリでも何か読み込みの挙動がおかしいと思ったら、 ライブラリ側でWindows考慮してなくて、バイナリモードになってなかったり。
テキストモードって何のために存在するの?
fprintf(f, "Hello World\n"); ってコードの、\n を出力時に \r\n にむりやり変換するのと、fclose したときに EOF をむりやりつけるために存在する。DOSの遺産。
歴史的な経緯 タイプライターやTTY、CP/Mの歴史たどるといいかも。
525 :
デフォルトの名無しさん :2009/02/05(木) 17:09:16
526 :
デフォルトの名無しさん :2009/02/05(木) 17:18:06
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua まピョーん☆ / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
Luaのクマーさん
>>525 まずお前が試して、ダメ出しした方がいいんじゃない?
俺は、ずっと秀丸で済ましてるな。
LuaEditも使える様にインストールはしたけど、
本当にテンパった時の保険として残してる感じ。
>>530 今のところの感じでは、
・色分けされて便利
・文字入力するたびに候補でもない単語が出てくるのがウザイ
・プロジェクトの設定が分からない
ググッて見たけど何処にも解説ないし、Raedmeが欲しかった。
環境を揃える所から入る性質で、
「コレはいいな」って思ったのにプロジェクトの設定が分からないから聞きたかったんだ。
(プロジェクトの設定できたらデバッグとか出来るのかと思うんだけどなぁ)
やっぱサクラエディタとか秀丸とかSciTEとか使った方がいいのかな・・・・。
取り合えずはLuaLanguagePackで勉強進めてみる。
532 :
名無しさん :2009/02/07(土) 21:08:45
./lua > の状態で、Ctrl-C以外で終了する方法はありますか? exit とか quit とかやってみましたがダメでした
そこは Ctrl+Zだと思う。 標準入力を終了しない事には終われないのが正常なのでは?
534 :
名無しさん :2009/02/07(土) 21:36:59
>>533 どうも
Linuxなので、 Ctrl-D でぬけられました。
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua まピョーん☆ 彡、 |∪| / / __ ヽノ / (___)
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
いまさらながらLua本買ってみた。スクリプト言語による〜〜ってやつ アマチュア個人でゲーム作っててスクリプトはSquirrelでの実装を考えてたんだけど、Luaに気持ちが揺れる揺れる 嗚呼どうしよう!
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
おれは速度と軽さを求めないならSquirrelかな それにLua本に書いてある考え方ってほとんどSquirrelにも応用できるんじゃない?
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua まピョーん☆ / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
>>539 ホントのオススメは、自分で何か実装してみてから選ぶことだけどな。
Lisp とか Forth ライクなものなら結構簡単だし、BASIC やアセンブラのような LL1 で行指向のものなら更に簡単だ。
>>539 AngelScriptが使って欲しそうな目で見ている。
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
>>546 自分の所では普通に動いたなー。
環境はXPSP2、VisualStudio2005SP1、AngelScript2.15.1。
Squirrelって重いんですか? Luaにくらべてコードがシンプルそうだから、組み込んだ後のデバッグも楽だと思って、LuaじゃなくてSquirrelを採用しようかと思っていたのですが。 ちなみに、Squirrelって何であんなに不要なbreakやcontinueがあるんですかね?
不要じゃないだろ。常識的に考えて。
ボケは分かりやすくね
>>549 298 名前:デフォルトの名無しさん[sage] 投稿日:2008/09/20(土) 02:25:07
速さと軽さならLua
基本的な演算とsuspendを行う処理を一億回ループさせたらLuaはSquirrelの1/3の時間ですんだ
イメージとしてはLuaの方が早いって意外だよね Luaもがんばってるな〜
>>553 >イメージとしてはLuaの方が早いって意外だよね
お前だけな
俺だけだったか Luaは実際には使ったことないんで知らないんでイメージでしか語れんかったわ すまん
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
JITでC++と同等の速度が出る組み込み言語 誰か作ってよ
>>552 Squirrelでsuspendを使うということは、マイクロスレッドを切り替える処理があるということなんだが。
それが軽いはず無いだろう。
ただし、基本的な演算処理でSquirrelがLuaの半分くらいの速度しか出ないのは本当。
速さだけ求めるならXtalも有力。
>>557 C++が速い理由には、言語仕様の差以上に、コンパイラに投入された労力が膨大なものだからというのもある。
LuaでもSquirrelでも、人月をかければC++以上に速くする事は可能だと思う。
逆に言うと、言語仕様だけではどうにもならない。
>>558 マイクロスレッドに関してはLuaも全く同じ。
Luaではコルーチンって呼ぶけどね。
298もそれはわかった上で比較してると思うよ。
____ / \ /\ キリッ . / (ー) (ー)\ <C++が速い理由には、言語仕様の差以上に、コンパイラに投入された労力が膨大なものだからというのもある。 / ⌒(__人__)⌒ \ LuaでもSquirrelでも、人月をかければC++以上に速くする事は可能だと思う。 | |r┬-| | 逆に言うと、言語仕様だけではどうにもならない。 \ `ー’´ / ノ \ /´ ヽ | l \ ヽ -一””””~~``’ー?、 -一”””’ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ <だっておwww /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) | / / / |r┬-| | (⌒)/ / / // | :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) / ヽ / `ー’´ ヽ / / | | l||l 从人 l||l l||l 从人 l||l バンバン ヽ -一””””~~``’ー?、 -一”””’ー-、 ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
その通りのことにそのAA使ってもな
残念ながら経験10年のおそらく天才プログラマーが作ったJavaScriptが 学生が演習で作ったCのサブセット以下の速度なのよ
>>562 CとJavaScriptで速度差が出るとしたらプロパティアクセス時の
ハッシュ計算だと思うんだけど、その差はJITすれば消せる。
JavaScriptはV8で比較した?
そんなんで消せたら 誰も苦労しないだろw
しかし、SquirrelにもLuaみたいなスクリプトのライブラリを置くリポジトリサイトが欲しいよな。 ネタは色々あるんだが。
>>562 ベンチマークに使ったコードは、どんな内容だったのでしょうか?
興味があります。
>>559 squirrel でも普通コルーチン。マニュアルの表記は「協調スレッド(コルーチン)」
「マイクロスレッド」だと、システムよりの機能を使ってるような誤解を招くから、
間違いじゃないけどふさわしくないと思う
機械語に近い言語体系じゃないと、C並に早くならんだろうな
559はJITが機械語を生成すると思ってんのかな?
C++より速くできるって…夢でも見てたんだろうね
____ / \ /\ キリッ . / (ー) (ー)\ <その通りのことにそのAA使ってもな / ⌒(__人__)⌒ \ | |r┬-| | \ `ー’´ / ノ \ /´ ヽ | l \ ヽ -一””””~~``’ー?、 -一”””’ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ <だっておwww /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) | / / / |r┬-| | (⌒)/ / / // | :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) / ヽ / `ー’´ ヽ / / | | l||l 从人 l||l l||l 从人 l||l バンバン ヽ -一””””~~``’ー?、 -一”””’ー-、 ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
559はバイトコードと機械語を同じだと思っている、に一票。
>>564 V8では新たなプロパティが追加されるたびに
プロパティに対して定数時間でアクセスできるような
アセンブラコードが生成されるよ。
だからV8は速い。
>>573 突然そんなことを言われても意味がわからない。
その根拠はいったい何さ?
>>567 昔StacklessPythonの記事で、言語仕様上で実装したマイクロスレッドとOS側で実装されるネイティブスレッドの
使い勝手の違いの話があって、それで覚えてしまっていた。
確かにこの場合はコルーチンと呼ぶべきだね。勉強になった。
各種言語処理系の仮想マシンが一種の機械語をサポートする場合、
その機械語、もしくはソースコードからコンパイルして作られた(仮想マシン用の)機械語を一般的にバイトコードと呼ぶ。
これに変換してから実行する形態をバイトコード処理系、もしくはバイトコードインタプリタと呼ぶ。
一方、CPUが直接実行する機械語を生成するのがJITコンパイラだ。
ただし欧米人でもたまに間違えてたりするので記事読む時に注意がいる……。
____ / \ /\ キリッ . / (ー) (ー)\ <一方、CPUが直接実行する機械語を生成するのがJITコンパイラだ。 / ⌒(__人__)⌒ \ | |r┬-| | \ `ー’´ / ノ \ /´ ヽ | l \ ヽ -一””””~~``’ー?、 -一”””’ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ <だっておwww /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) | / / / |r┬-| | (⌒)/ / / // | :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) / ヽ / `ー’´ ヽ / / | | l||l 从人 l||l l||l 从人 l||l バンバン ヽ -一””””~~``’ー?、 -一”””’ー-、 ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
で、人月をかければJITがC++に勝てるの?
単に比較したって意味がないだろう
C++も負けないようにJITにするんだ!
茶化してるだけの人とマジな人と、マジにわかってない人と、いろいろいるな
>581 LLVMとか
>>575 プロパティに定数時間でアクセス出来るのと
JIT使っているっていうのは関係ないだろ
JIT使ってもC/C++より早くなるわけねぇじゃん 現代のCコンパイラがどれぐらいの労力をかけて最適化コード吐くのか考えてみたことある?
C++より速くなる病患者が Javascriptにまでw
コーディングにかかる時間は考慮しないんだな
結局JITは怖くて使わないです。えぇハイ
>>584 JavaScriptだとプロパティの追加や削除を実行時に
しなきゃならんことがある。
なので、普通はそれをプロパティに対するハッシュで実装するわけだけれど、
Googleはプロパティの変化ごとにJITコンパイルする道を選んだ。
V8 JavaScript Engine
http://code.google.com/apis/v8/design.html > JavaScript is a dynamic programming language: properties can be added to, and deleted from,
> objects on the fly. This means an object's properties are likely to change.
> V8 compiles JavaScript source code directly into machine code when it is first executed.
> There are no intermediate byte codes, no interpreter. Property access is handled by inline cache
> code that may be patched with other machine instructions as V8 executes.
機械語を生成できたところで、コンパイラの性能差が大きすぎるでしょ
プロパティの変化ごとにJITコンパイルするとか 意味不明
現代のCコンパイラがgccの事であるなら 労力だけかけても間違った結果しか出てこないもんなんだなー とは考えてみた事がある 主にループ抜けなくなるとか
gccについては、あの…その……うんゴメン
>主にループ抜けなくなるとか wwwww
Squirrelを使おうとしているんだが、 バインダ(SqPlus)の更新が半年前から止まっていて、使おうかどうか躊躇してる。 みんなはバインダに頼らず直接実装した?
優れたJIT技術者がいるとして そいつが何の仕事を選ぶかだな
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
散々JITについて盛り上がっておいて、ここまでLuaJITに言及なし
JIT使ったことねぇからわからねぇ が大半だと思います
>>595 俺はjkBindに乗り換えようかと考えている。
既に作者とは連絡を取った。
Squirrel-2.2.2-stable向けのパッチがフォーラムにあがってる。
jkBindについてkwsk
>>600 ありがとう。jkBindも選択肢としてありなのか。なるほど。
ちょっと調べてみますね
結局Luaなんて誰も使ってなくて へんなクマが冷やかしに来るスレ?
バリバリLua使ってるような人が中々来ないスレ 現在は使ってないけど「今後使ってみようかな」とか興味ある人が情報収集しにくるスレ あとはクマスレ
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua まピョーん☆ / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
ほっそいなAngelwwwww Luaは使ってないけどXtalはバリバリ使ってるよ!
AngelScriptをメインで使ってるのは俺だけですかそうですか。
AngelScriptは不遇だよね〜 もうちょっとがんばれば2強に肩を並べるぐらいになってたかもしれないのに
JITコンパイラが付いてC++並の速度で動くようになれば AngelScriptも流行るよ
なんかJITが好きな奴がいるけど、ゲームとかに組み込んで使用する 用途での言語処理系でJITなんて危なくて使えないだろw
JIT の実装が進んでるシステムは、事前コンパイルできる場合があるので、 開発中は作業効率がいい動的スクリプト言語として使って、完成したら コンパイルしてネイティブコード化するという方法もある。
Pascalでいいやん
CriScriptはベンチを見る限り割と良さそうなんだがなぜか話題にも上がらない
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
先月の IGDA の奴を聴きにいって以来、オレの中で CriScript 株は急上昇中。
実際使ってみたなら感想よろ
スクリプトって多々あるけど、 今後の展望を含め、どれか一派に絞らなけりゃならないのは賭けだよね ・言語仕様 ・ライセンス ・動作環境 ・速度 ・メモリ量やGC問題 ・安定性 ・将来性 ・国内外でのコミュニティの活性度 など複雑な素因が絡んでくるもんね。 自分はSquirrelを選んだが、将来残っているか不安っちゃ不安だわ。 磐石なスクリプトが存在するか、せめて機械的なコード置換があればいいんだがなぁ。
コミュニティや作者のサポートが必要とはあまり思わないな ソースコードが何百万行もあるソフトとは違う
問題ってのは起ってほしくないときに起るもんだ そのときに同じように余裕ぶっこいていられるかな?
バグが見つかったら、自分の書いたソースだろうが利用しているオープンソースだろうが自力で直す。 直す手段が用意されているところがオープンソースの処理系のいいところじゃないか。
お金とってサポートしてくれるところがあるといいなーと思う場合は無きにしもあらず
Squirrelは辛うじて読めたが、Luaは読めなかった俺 今のところ自力で直す場面に出くわした事は無いが、これを直すとなると骨折れるだろうな…
>>601 jkBindだが、SqPlusと比較してみる。
いいところ:
・ソースコードが遥かにきれいで簡潔
・グローバルスコープで余計なことをしない(main関数抜けるまで握ってるオブジェクト解放しないってなんだそれ>SqPlus)
わるいところ:
・テストコードが整備されていない
・マニュアルがない(簡単なサンプルコードのみ)
・Squirrel言語仕様への対応が古い(公式のはコンストラクタの登録に対応してない。要パッチ)
・DirectXのラッパーライブラリがない?(全然使わんよこんなもの)
・せめてソースコードにコメントくらいは書いてください
バインダとしての使い勝手はそう変わらないと思う。
どちらもtemplateを用いるし。
Lua の言語仕様が好きって人いる? JavaScript から prototype をなくしたような感じで、 しかも stackless。 なんかすごく気に入ったんだけど、そういう人いないかしら?
pascalっぽいところが好き
俺は pascal っぽいところが嫌いw
end だけかYO!
どうやっても--はコメントではなくて、デクリメントと認識してしまっている
AngelScriptはなぜ広まらないんだろう。 かなり使いやすいと思うんだが、やっぱり日本語資料が少ないのがネックなんだろうか。
. ∩___∩ ; ; | ノ||||||| ヽ ` , / ● ● | ;, | \( _●_) / ミ AngelScript… ; 彡、 | |∪| |、\ , ./ ヽノ/´> ) : (_ニニ> / (/ ; ; | | ; ' \ ヽ/ / : , / /\\ . ; し’ ' `| | ;
>>631 コルーチンが無いからスルーした記憶がある
「このサンプルは AngelScript でどうやったらコルーチンが実装できるか示してる」
って状態だとさっぱり嬉しくない
ぅあ!
>>633 C++のバイナリ仕様に合わせて設計されてるわけだから、C++にできないことを実装するのは難しいのかもな。
ただJITコードですら中断可能なコルーチン化は実現できるので、やりようはあると思う。
ほう
>>633 普通にSuspendじゃだめなん?
lua_yieldと同じことはできるよ。
引数渡せないが。
>>638 マニュアル眺めてまともに記述されてないってことでスルーしただけなのでつっこまれると困る。すまん
できるのならどんな記述でできるのかぐらい書いておいてほしい
むしろ引数なんか要らないっていう
641 :
デフォルトの名無しさん :2009/02/18(水) 13:37:22
>>639 void Suspend()
{
asIScriptContext *lpContext=asGetActiveContext();
if(lpContext!=NULL)
{
lpContext->Suspend();
}
}
こんな感じの関数をC++の方に記述して、このSuspend関数をasIScriptEngineインスタンスにRegisterGlobalFunctionで登録すればOK。
Luaだと、
int yield(lua_State *l)
{
return(lua_yield(l, 0));
}
こんな感じかな?
Squirrelのバインド操作が意味わからん……。 バインダ使わずその辺を自前で実装したいんだが、SqPlusのコードを読んでてTemplateの嵐だったので投げた。 次はjkBind読むしかないのか……。 SquirrelのC/C++への組み込み方法について、何か参考になるページありませんか?
tolua++とか
補足です。一般的なsqstd_dofileやsq_compileなどからsq_callすることは出来ております。 スタック操作については若干曖昧ですが、C++側からSquirrel内の関数を呼ぶことは出来ました。 特にBind操作(LuaからC++関数の呼び出しや定数/変数のBind)について、 グルーコードの自動化のような処理を探しています。(Luaで言うところのtolua++に相当する実装)
>>642 >>644 それを処理するのに、C++ではtemplateが一番適しているわけだが?
SqPlusにはマクロ版も一応ある。お勧めはしないが。
>>646 645だが、642は自前でバインド作業をやろうとしてたのか。
2行目の前半を読み飛ばしてた。スマン。
……まあ、そのページ読めば分かるだろう。
ClassオブジェクトをSquirrel中にこさえるのと、それをroottableに登録するのと、
Classオブジェクトにメソッドやらプロパティやらの諸情報を埋め込むのと大まかに3つに分かれる。
そろそろ Squirrel の読み方考えようぜ!
発音記号に照らせば スクァラル が近いが、俺はスクワールと呼ぶことにしている。 ちょうどそんな名前の喫茶店があるので。
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua まピョーん☆ 彡、 |∪| / / __ ヽノ / (___)
ちくしょうクマが可愛くなってきたw
luaやsquirrelよりもgauche, ypsilon, moshのような国産schemeの方が速いらしいぜ これからの組み込みスクリプト言語はschemeの時代かもしれない
はいはい
それは無い。残念ながら。 ありうるならもう来てないとおかしい>schemeの時代
schemeの処理系がいくら性能がよくて、柔軟な性質を持っていても、 普通のスクリプタは括弧の嵐を見ただけでげんなりするからな lisp系がメジャーになることは永遠にないだろう
かなりいい線まで行って、おいしいところを非lisp系に取られるんだよなぁ
それがLispの矜持でさぁ
・・・・・・隠れlisp使い多い?w
どっちでもいいよ。 組み込み言語の利点は、ただ1つ「コンパイルなしで改変、実行できる」 言ってしまうとこれだけだし。 デザイナが弄るなら、弄るデータなんてほとんどデータだし、 括弧が多少多くてもプロなら入力してくれる。 ロジックはどうせ、プログラマの仕事だから、schemeだろうが何だろうが、かまわん
まあ、止めはしない。がんばれ。
jkBindってどこにあるの?
釣りか? ググれ。
>>645-647 ありがとうございます。
教えてもらったサイトを見て実装してみました。大変助かりました。
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
>luaやsquirrelよりもgauche, ypsilon, moshのような国産schemeの方が速いらしいぜ 「らしい」とかウゼェから死ねよ、クズ。 各言語のベンチマークに使ったコードを書き込んでから話せや。
仮にそうだとしても schemeなんか速くたってどうしようもないじゃないか
Schemeは処理系を作るのは容易だが、それでプログラミングするのを 嫌うプログラマがかなり多い。非プログラマにも好まない言語だ。 昔を懐かしみ知識を得るだけしか役にたたないというのが常識。 その常識を無視して新規プロジェクトに導入しようとするのは無能マネー ジャで、他にも間違いを多く侵してる。 学生が自分の勉強用に自作するにはとても良い言語とは思うが。
Schemeは学生のとき やらされたっきりだな
Emacs使ってた時にelisp触ってたぐらいだなぁ。 この前エディタスレに行ってみたら、 「○○という機能があるエディタありませんか?」 「emacsなら出来る。Lispで自分で作ればいいよ」 と言う流れを未だにやっていて笑った。
良い言語だと思うけど、学ぶのにコストがかかるから導入しにくい。
>>618 いくつか齧ってたらなんとでもなるよ。 似てる概念や要素が多いから。
|Д`)<AngelScriptも忘れないであげてください |ミサッ
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践という書籍の P.43,44にあるスタンドアロンのLuaを実行してテキストファイル(hello.lua)に 書いたスクリプトを実行する(中身はprint("This is hello.lua"))部分を試しているのですが Windowsのコマンドプロンプト上でhello.luaと同じディレクトリに移動し「lua5.1 hello.lua」と入力する部分がうまくいきません コマンドプロンプト上でhello.luaと同じディレクトリに移動という意味が理解できず 勝手にただ単にパスを指定して実行すると解釈したのですが(C:\------\lua5.1 hello.lua) stdin:1: '<name>' expected near '\'と出てきて実行できませんでした stdin:1: '<name>' expected near '\'のキーワードで検索しても期待した内容が出てきませんでした 無知な私にご教授いただければ幸いです
もはやDOSコマンドも知らないプログラマが存在する時代なんだな そんなんでよくプログラム書けるな
教えて頂きありがとうございました 「コマンドプロンプト 同じディレクトリ」では検索したのですが検索方法も悪かったようです
前の職場にC++,JavaがめちゃくちゃできるのにDOSコマンド知らん人がいたわ 使う機会ないと覚えないもんだなと思った
DOSコマンド知っているけど 使う機会が無くなったな
ディレクトリの移動はできるようになったのですがLua起動後にhello.luaを実行しようとするとまた stdin:1: '<name>' expected near '\'と表示されます 「stdin:1: '<name>' expected near '\'」はどのような意味を表しているのでしょうか?
だから言ってるだろ無知な上に努力不足だって お前はそうやって完成するまでずっと人に聞きつづけるのかっつーの 本でわからない事があるなら著者に聞けよ
著者に聞いたら完成するまで人に聞き続けるだろwwww 試しに俺もそのワードでぐぐってみたが多分わからんと思う わざわざここに書き込んでるのは反応が早いからって理由だろうに まあ俺はドSだから教えないけどな
不快にさせてすみません 著者にわざわざ連絡を取って聞くほどの問題ではないのだろうかと思い書き込みました
Hello,World!が出来ないのを切り捨てるのは性格の悪さがうかがえるな stdin〜はようわからんが俺も同じ内容で引っかかったから教えると lua5.1を起動させずに(重要).exeと.luaを同じディレクトリに置いてlua5.1 hello.luaでいける これは初歩の初歩からやってんのに重要な事書かない筆者が悪いわ これさえわかりゃ後はスムーズに進むぜ
ていうか >Windowsのコマンドプロンプト上でhello.luaと同じディレクトリに移動し「lua5.1 hello.lua」と入力する部分がうまくいきません って自分で書いてるのに >Lua起動後にhello.luaを実行しようとすると やってること違うじゃんよ。これぐらいさすがに気付いて欲しいよ
DOSコマンド使った事ないならそんなもんだ .lua形式のファイル開くんだからlua起動してないとって思ったんじゃね
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua まピョーん☆ 彡、 |∪| / / __ ヽノ / (___)
>>685 たぶんもう少し読んだら出てくるtolua++の解説箇所あたりでも
困ることになる予感がする。
でも苦労したり嫌な思いして覚えたことほど忘れにくいのでがんがれ。
ただその本にはWikiにサポート用のForumあるので、質問とかは
あちらに書いた方がいい気はする。
まあ、ypsilon作った会社は社員一人しかいないからなw
コマンドラインなんて使わないな。 バッチファイル作るのに少し教えて貰ったけど全然使う機会無いわ。 便利な世の中になったお陰で考える事が減って美味しいです^q^
>>693 こういう奴がHDD全消去するようなインストーラー作るんだろうな
ぎすぎすした流れをぶった切って申し訳ないが、 luaのイテレータを使用したfor文に渡す引数は イマイチなじめない。 C++/STLのbegin/endになれた身としては最初に渡した "_var"がfor内ブロックに渡されず、_f(_s,_var)の戻り値が 渡される所とか違和感を感じる。 他の言語のイテレータになれた人だとそうでもない?
じゃあC++使ってればいいじゃん
今時、コマンドラインも使わなきゃLINUX鯖も立てられない奴には仕事は来ないわなw
はいはい挑発伝説挑発伝説
俺なんか家も学校もUNIXだったし会社はいるまでWindows触ったこともなかったからなぁ。 DOS窓?ぷwなにそれ、って言ったら白い目で見られたよ。 Windowsが全てと思ってる奴もいるし世の中間違ってる。
PowerShellはどうよ?
>>695 Luaのことはほとんど知らないんだけど、w
組み込みでは、
・iteratorインスタンスをいちいち生成したくない。
・クロージャやジェネレータを扱いたくない。
という意図があると思う。
特に_s。クロージャ、ジェネレータ相当のことを自前で実装しろと。
単純なイタレータばかりなら、_varだけでいいけど。
そのトレードオフが_f(_s,_var)だと思う。
先週toLua++更新されてるね。
703 :
695 :2009/02/22(日) 23:21:55
>>701 ごめん。理解できないで詳しくお願い。
ちなみに、私が求めていたのはこんな感じ
do
local _f, _s, var_1,...,var_n = explist
while var_1 do
block
var_1, ... , var_n = _f(_s, var_1)
end
end
たとえばluaのtableでリンクリスト(nil終端)を操作する
iteratorを作るとき、上のだと、
_f=function(_s,_var) return _var.next end
_s=nil
var_1,...,var_n = top , ....
でいけると思うけど、オリジナルのLua版だと
_f=function(_s,_var) if _var then return _var.next,... else return _s,... end
_s=top
_var=nil
とかいまいちすっきりしない。(特に_varの位置付け)
リンクリストなら無理してforを使用しなくても出来るけどね。
for文がああなったのはLuaの文法との整合性の問題?
704 :
695 :2009/02/22(日) 23:23:50
luabindも0.8にあがってる。
C++しか知らんからそうなる このイテレータの形は関数型言語やれば自然と判るよ
なんでLua以外の言語人気ないんだろう?
Squirrelの時代が来る! …と信じている……
スクエニが使った実績もあるしな! 俺も今度スクリプト使うときはSquirrelでいくぜ! 何か作る…暇さえあればな…
709 :
デフォルトの名無しさん :2009/02/23(月) 08:46:39
というか、普通にPC向け商用ゲームで採用予定なんだが>Squirrel ……って、他に居ないのか。居ないのか!
ここにいるよ
ここにもいるよ。 PSPの案件でもテスト開始してる。スクエニ様々だね。
よかった…。Squirrelが一躍有名になって。 スクエニのFFCCのプログラマーはGJです。
DQ9はSquirrel採用?
もし知っている人が居ても絶対教えてくれないと思いますよ
いや、9は無理でしょ。DSだよ? メモリ4Mくらいじゃなかったか?
>>713 スクエニでPSP・・・・・パラsうわ何をするやめ(ry
おいおいwネタなのか本当なのか知らんが笑ってしまったw 自分も案件提案して採択されそうだ。というわけでSquirrelは水面下で絶賛展開中だ
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ 勝手に使えばいいだろw 彡、 |∪| / 日本人が発音できない言語lolololololol / __ ヽノ / (___)
ロリロリロリロリ
Luaにはクマが居るのに、SquirrelにはAAすらない。可哀相
Xtal のインタプリンタとかデバッガーとかIDEとかってまだない系?
>>723 以前(半年ぐらい前)ちょっと調べてたけど見つからなかったよ。
Xtalの中の人はかなりがんばっていると思うんだけど、いかんせん外野からの支援が無いよね。
あれは何処の国の人が盛り上げるんだろうね
Xtalは応援してやりたいが、sourceにほとんどコメントが無くて読めなかった。C++コーディングここに極まりって感じ。 言語仕様も定まってきているわけだし、ここいらで一旦仕様拡張を止めて、 導入方法について詳しく記述し、間口を広くすれば流行りそうな予感はしている。 欲を言えば作者自ら本出してほしい。そんな暇無いだろうけど。
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
>>726 Squirrelより実行速度速いしな。おまけに使いやすいC++バインダも内蔵ときた。
ちょっと構文が変な感じするけど、
オープン界のPHPとRubyみたいな関係で、
互いに刺激を受けてcoolな発展してくれることを望むぜ。
実行速度は後からなんとかなるけど 構文が変なのは致命的だなあ
他のスクリプト言語とほぼ相互置換できるのなら無問題なんだけど、実際のところどうなんだろ? Xtalを触りだけじゃなく、実際に使ってる人って居ないんかいねぇ?
Luaの本は結構出てるんだけど Squirrelの本って洋書でもまだ出てない?
洋書でもいいからSquirrel本ほしいよな まとまって目ぼしい情報があるのが公式wikiぐらいだ
SquirrelはAngelScriptよりはまだマシじゃないか。 AngelScript使ってるのは日本で自分含めて数名しかいないんじゃないかとすら思える。
スクエニがFFCCで色々やった結果をSquirrel公式に提供してくれればなぁ
>>735 詳しく調べたわけではないが、C++の制約をそのまま受けてしまう仕様ではなぁ……。
>>700 > PowerShellはどうよ?
UNICODE文字だけなので普段使いにはムリがあった
>>736 んだな。SquirrelにLuaにあるような動的リロードをどう実装したのかが知りたい。
おそらくdelegateじゃないんだよな。
>731 ノシ使ってるよ
せめてインタプリンタやデバッガやIDEがあればなあ・・・>Xtal Pythonからの移行を考えてる今日この頃 LuaやSquirrelも考慮してみるか・・・
>>741 Python止めようと思ってる理由は?
止める気はないよ、機能も手軽さも文句ないし ただちょっと飽きてきたとかそんな理由
あーしいて言うなら処理速度だな あと、ゲームを作る用に作った言語ってのも まだ、完成してないし詳しく知らんwスマソ
>>739 どうなんだろねー。delegate はあまり凝ったことできないし、ユーザデータかテーブルでしか
使えないので別の方法だろうとは思う。
思いついた方法その1 メタメソッドを使ってプロトタイプもどきを実装
・「クラス名」は文字列で保持しておく
・_get/_set のメタメソッドを使って、「クラスのメソッドテーブル」を毎回「クラス名」を使って
引いてきてメソッドはそこから引き出して使うようにする
・「クラスのメソッドテーブル」の中身を書き換えると、同種のオブジェクトのメソッドを一斉にさしかえたことになる
思いついた方法その2 弱参照でインスタンスを全部おぼえておく
・クラスはメソッドを別のテーブルとして持つ(クラスは一度インスタンス化すると書き換えできないため)
・コンストラクタでそのメソッドテーブルの内容をインスタンスに自力でコピーする
・クラスはインスタンスリストも持つ。コンストラクタでインスタンスの弱参照をリストに追加する
・メソッドを書き換えるときは、新規オブジェクト用にメソッドテーブルの中身を置き換えると同時に、
インスタンスリストに登録されてる全インスタンスの該当メソッドも置き換えてしまう
・インスタンスリストは適当なタイミングで掃除
こんなとこじゃないかなー
>>706 Luaがユーザー多くなった→情報を増える→ユーザー増える→(以下繰り返し)
日本でユーザー増やすなら、
>>708 みたいな実績増やして、
スクエニが導入の手引きみたいなリソースを公開してくれたら
祭りになるかもしれんが(公開は)多分ない
やっぱり情報を一杯出さないとな
Squirrelを動的リロードできるようにソース改造したとか。 zlib/libpngライセンスだから問題ないだろうし。 他のスクリプトのShiftJIS対応版みたいな感じで。
Squirrelの動的リロードは、ソースファイルを読み直すだけでそのままできるんだが? ファーストクラスオブジェクトというのはそういうものだ。 シリアライズ・デシリアライズ機構を用意するだけ。
nn _ γ・ ̄\ γΞミvヽ _r・ ( r-、i (゚Д゚) ヽノ (ノ ミ) ミ Squirrel!! ヾ_(つノノつ
>>748 「ソースファイルを読み直すだけ」じゃないじゃん
BSDやMIT等の重要な部分に記載しろというのが嫌い でもzlib系は書かなくてもいいのに記載します なのでSquirrel使い
>ソフトウェアのすべての複製または重要な部分に記載するものとします。 MITのこれって、全体もしくは部分的な複製に記載しろという意味じゃなかったっけ?
>>750 シリアライズ機構を、インスタンスの再構築を行うソースファイルを生成するように設計すればいい。
フォーラムに例が挙がってる。
Xtalはよさげなんだが食指が動かんな。何故だろう?個人がせっせとやってるからかなー。 2月24日の日記によるとよりC++らしい記法が出来るようになるみたいだが、 やっぱりC++チックな記法が世の中的には好まれるんだろうか?
おそらくね。 endはメンドクサイんで嫌いだ
元々xtalはC++ライクな軽量言語ってのをウリにしてるからな
zlibライセンスでC++チックな記法といえばAngelScriptだな。 MITならCINTってのもあるが。
ちょっとしたゲーム製作にSquirrelを使いたかったが、挫折した。 日曜プログラマには無理だった。 もっと勉強してからにします。
Squirrel内の関数をCから呼び出すときに可変長引数で引き渡したいが、上手くいかないです。 bool CallSquirrelFunction(const TCHAR* pFuncName, ...) { SQInteger top = sq_gettop(m_vm); sq_pushroottable(m_vm); sq_pushstring(m_vm,pFuncName,-1); if(SQ_SUCCEEDED(sq_get(m_vm,-2))) { sq_pushroottable(m_vm); int nArgCount = 1; //TODO ここに可変長引数でsq_pushしたい(integer,float,string) sq_call(m_vm,nArgCount,false,false); sq_settop(m_vm,top); return true; } sq_settop(m_vm,top); return false; } va_***系マクロ使えば行けるかなと思ったが、無理なのかな。 "%d%f%s"のような型指定リストを渡すのはスマートじゃないけど、これ以外に方法は無いのかな……。 あんまりSquirrelと関係なくてすいません。助言をください。
>>759 わかってるんじゃん。Cは言語仕様的に引数の型情報を取得する手段がないので、
型指定情報をなんらかの形で渡すか、全部 Variant な型を使うようにするかのどちらかしか無理。
型指定は別に printf みたく文字列にする必然性はないよ。
func("funcName", TYPE_INT, a, TYPE_FLOAT, b, TYPE_STR, c, TYPE_END)
とかこんなかんじで順次型情報とあわせて渡すとかでいいんじゃね?
>>760 すばやい返信ありがとうございます。うーん。Cの仕様上どうしようもないんですね。
型情報も合わせて引数に送ることで、対処しようと思います。
ありがとうござました。
ま、そもそもC言語で今更、自前の可変長引数関数を (ログ出力等以外の目的で)で整備する利点は薄いので、 正直に他の方法による実装を考えた方がいいと思うけどな。
C++にしてboost::tupleとか使えばうまく書けるかもしれない
764 :
デフォルトの名無しさん :2009/02/26(木) 09:55:45
C++だと、boost::functionみたいに、 template<typename _tR,>sq_function0(HSQUIRRELVM &vm); template<typename _tR,typename _t0> sq_function1(HSQUIRRELVM &vm,_t0 t0); template<typename _tR,typename _t0,typename _t1> sq_function2(HSQUIRRELVM &vm,_t0 t0,_t1 t1); template<typename _tR,typename _t0,typename _t1,typename _t2> sq_function3(HSQUIRRELVM &vm,_t0 t0,_t1 t1,_t2 t2); … といった感じで、引数の個数にあわせたtemplateファンクタを用意して、これらをsq_functionというtemplateに置き換える仕組み用意したらいいんじゃね? そういう仕組みの具体的な実装はboost::function参照。 Squirrelじゃないけど、自分はこういうtemplate用意してスクリプト内の関数呼び出す仕組み用意した。 結構便利。
Squirrel3.0の安定版っていつ出るのさ
>>765 そもそも3.0というほどの変更箇所があるように見えないんだが、
ずっと黙って2.2.2-stableを使ってるな。
767 :
デフォルトの名無しさん :2009/03/01(日) 18:51:08
剰余の計算をするとエラーが出るのですが、どうしてでしょうか? x = 10 y = 3 print("余りは" .. x % y .. "です") これを実行すると、 stdin:1: `)' expected near `%' と表示されてしまいます。
何語で書いてるのか書け。まずはそれからだ。
演算子の優先順位の問題じゃね?
Lua5.1.4で再現無いことだけ確認したw
Lua使ってないからしらんが、 括弧付ければ無問題だと予想
>>767 使ってるLuaが5.0系(%演算子が無い)なんだろう。
5.1にするか、math.modを使うかしろ。
ただしmath.modと%演算子は、負数のときの挙動が違うので注意。
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / <●> <●>| / | ( _●_) ミ/ Lua? 彡、 |∪| / / __ ヽノ / (___)
いいえKumaです。
Luaってもしかして、++iとか--iとかない?
忘れたけど、基本floatだからないんじゃないの?
-- はコメントだしなあ
>>777 ,778
ないのか、残念
レスありがとう
i += 1 もないお
//は何なの
>>781 「**」がべき乗として使われる言語がたまにあるけど、
// はその除算版。
つまり、a // b = a ** -b = pow(a, -b)
冪根ことか累乗根とかだっけ
& と && の関係みたいなもんか
全然違わないか? それ
いや、=と==みたいなもんだろ
*hoge と**hogeよりは違わないだろう
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
Squirrelでルートテーブルに対しての、定数のバインドってどうやってやるか分かりますか? sq_pushroottable(m_vm); sq_pushstring(m_vm,"CONST_VALUE",-1); sq_pushinteger(m_vm,255); sq_newslot(m_vm,-3,true); sq_pop(m_vm, 1); これでもCONST_VALUE=255となりますが、定数ではなく変数(書き換え可能)なんですよね……。 スクリプト記述で言うところの、 const CONST_VALUE = 255; となるよううなコーディングを実装したいです。 やっぱ、定数はコンパイル時決定だから無理なのかな?
自己解決しました。 sq_pushconsttableとsq_setconsttableで上手くいきました。 仕様に目を通してないことが丸分かりで恥ずかしい……。 これでやっと ・定数・変数・クラスのバインド ・C++⇒Squirrel関数の呼び出し ・Squirrel⇒C++関数の呼び出し まで完成しました。 あとは、デバッガと動的リロードだ。先が長いぞ。
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
>>782 Lua だとそーいう演算子ないみたいだけど、それってどの言語で使えるの?
c++系統だとコメントだし、Python3.0とかだと余りを切り捨てる除算に使うしあんまり一般的じゃない気がする
// でググってみれば? 俺はどうでもいいからやらないけど。
double slash operator
>>798 これ何がやりたいのかわからん
Luaはネーティブなんだから、只のラッパーに徹するか、
既存のLuaでも使える、.NETをラップしたモジュールにしてくれれば良かったのに
自分はC++/CLIに馴染みが無いから、只のラッパーを自作する参考に
コードを読む程度の利用しかしてね
は?
ひ?
る
の
憂
ハルビンの親戚か?
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
ちょw
る
次スレはいらないな・・
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
そりゃ、あるから書いてるんだろう
Luaを実装したプログラムのソースコードください。
乳揉みてぇ
じゃあ俺はSquirrelのテーブルをJSONに保存する
YAMLじゃなくて?
S式で
根性です
haxeでlua出せないかなぁ
NekoVM LGPLが痛い
他の言語処理系にコンパイルしてから使うという割り切った仕様が興味深いな。 同じような仕様のコンパイラは今まで何回か書いてきたが、 このようにたくさんのライブラリが公開されるというのはさすがオープンソースだな、と思う。
このスレ的にはかなり痛いだろw LだろうがGPL系は
LGPLならライセンスは問題せずに 目的に合った方、実績のある方選ぶ。 GPLは社内ルール上駄目。
PCで使うならLGPLで全然問題ないんだけどねぇ
PCで使う・・・?
趣味のプログラマーでも、実装の下手さの為に バックドア的な穴を開けたようなソースを公開したくないな ライブラリに変更を要する時に格好いい理由とかないだろ
PCでもLGPLは面倒
>>831 は公開しなきゃいけない場合、ライブラリその物を変更した時の話だよ
修正BSDとかMITならなあ・・・・
>>834 うまくライブラリと分離すりゃいいだけでしょ?
自分のプログラムと静的リンクした場合は、全体を公開しないといけない。 wikipediaを読めば大雑把だが把握できる。
会話も危うい奴が自分は何でも出来る様な事を書くとか 春だな
LGPLだとパッカー系(アーカイブ形式で配布するタイプ)、コンシューマ系が封じられるんだよな。 結構痛い。
>>839 パッカー系ってzipやlzh?それともexe?
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ○ ○ | / | ( _●_) ミ/ <…… 彡、 |∪| / / __ ヽノ / (___)
zip同梱でソース開示義務が及ぶなんて聞いたことないな。
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
俺もGPLもLGPLも敬遠してるわ。LGPLは839の理由で。
だからなんで? 同梱するだけのものにはソース開示は及ばないのに。
LGPLライセンスで配布されたライブラリAについて、 * ライブラリAにリンクしたプログラムBを配布する場合、Bのライセンスにリバースエンジニアリングを禁止する条項を含めてはならない。(LGPLv2-6、LGPLv3-4) * ライブラリAに静的リンクしたプログラムBを配布する場合、Bのソースコードまたはオブジェクトコードの配布を拒否してはならない。(LGPLv2-6a、LGPLv3-4d0) * ライブラリAを改変して作成されたライブラリA'を配布する場合、A'のライセンスはLGPLまたはGPLである必要がある。
Lがついてようとやっぱり汚染は免れないんだな
ほんとGPLはゴミだな
ようは静的リンク=直接実行できるexeにしなけりゃいいっとこか。 じゃあパッカー系は大丈夫だな。ほっとした。 .jarも.airも影響受けず大丈夫なのね…
exeでも、rubyscript2exeとか中身は実質パッカー系だから大丈夫だよな?
俺なら黒に近いグレーと判断する
>>850 要するに「入手した人がライブラリだけさしかえて再構築できるか」
がライセンスの想定なので、一般的にばらす手段が認知されて
ないようなものは基本的にダメだと思う
そうしたら、.jar .airはバラせるからOKで、rubyscript2exeは駄目ぽだな
>* ライブラリAにリンクしたプログラムBを配布する場合、Bのライセンスにリバースエンジニアリングを禁止する条項を含めてはならない。(LGPLv2-6、LGPLv3-4) コンシューマだとサードパーティライセンスの関係でこれをクリアできないってことか
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
\ l´⌒\⌒\ \\ \ \ ヽ ) ) \\ \\ ( \ \∩___∩ \\ \ \ ⌒⌒| ノ ヽ \\ \ \ / ● ● ト、\ \\\ \ Y | ( _●_) ミ\ \\\ \ / 彡、_ |∪| ノ \ \\\ (____)―ヽノ' ヽ  ̄ ̄ ヽ\\ \, j l l .l } Lua! l (_ノノノノ
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Luaまピョーん☆ 彡、 |∪| / / __ ヽノ / (___)
IGDA Japan chapter - ニュース
http://www.igda.jp/modules/news/article.php?storyid=1622 13:10 - 14:00
「ごく簡単な並列処理スクリプトシステムの設計と実装」
□講師
小久保啓三(HAL東京)
(株)スクウェアでの代表作「ロマンシング・サガ」「FF5」「クロノトリガー」「FF7」。クロノトリガーとFF7では、スクリプトシステムの設計と実装に携わる。
14:00 - 14:50
「『サクラ大戦X』でのスクリプト運用事例」
□講師
秋葉晴樹(セガ)
株式会社セガ 第三CS研究開発部 リードプログラマ。
代表作は、サクラ大戦シリーズ、のび太の新魔界大冒険、ブレイザードライブ。
サクラ大戦シリーズは3から参加、主にADVパートのプログラムを担当。
15:20 - 16:10
「汎用スクリプト言語Xtal 設計と実装」
□講師
石橋立宣(バンダイナムコゲームス)
NBGI プログラマ。
PSP塊魂のエンディングミニゲームやシステム周り担当。
PSP太鼓のADV部分やシステム周り担当。
趣味で、C++組み込み用スクリプト「Xtal」を開発。
16:10 - 17:00
「Squirrelスクリプトを使った実装と活用」
□講師
神尾隆司(スクウェア・エニックス)
Wiiウェア 小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル の開発に関わる。
北出智(スクウェア・エニックス)
PS2 聖剣伝説4、Wiiウェア 小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル 等の開発に関わる。
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Luaまピョーん☆ / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
そうか。Xtalの作者は現役のゲームプログラマだったのか。 仕様、ソースのできもなかなかいいし、 今後日本ではやって行く可能性もあるなぁ……。
schemeが流行るよりは可能性高いと思う
誰が流行らすのかという問題がな……。 LuaとSquirrelの2強を打破してくれることを祈る。
>>851 > 要するに「入手した人がライブラリだけさしかえて再構築できるか」
> がライセンスの想定なので、
都合のいい風に読み替えるなよw
>>863 Squirrelは2強というほど普及もしてないぞ。
いろいろ話聞いた感じでは、Luaが圧倒的に強くてPAWN、Squirrel、StacklessPythonがポストLuaな感じ。
XtalやCRIScriptはまだ産声あげたぐらいだしなぁ・・・もう数年必要かな。
Xtalタンには頑張って欲しいね 俺では有効活用できないんだけどね…
>>864 どのへんが間違えてるか解説きぼん
ソース公開 / リンク用OBJの公開 / ダイナミックリンク から選べる、
ってのは平たくいえばそういうことだという認識なんだが。
865 -> 867 ね。スマン。
LuaInterfaceって使っている人あまりいないのかな?
これから使おうと調べてるところだ
SexlessPythonのゲームの組み込み向け解説ってどこかにない?
ごめん、オナ禁してたから間違えた Stackless Pythonね
ちょセックスレスってw
>>873 GameDeveloperの2009年2月号にちょっと特集されてるよ
>>875 おお、これか。ちょっくら読んでみるぜ
> Snakes on a Seamless Living World
> By David Hawes
> As a scripting language, Stackless Python is meant to serve the needs of
> multi-threaded environments, namely each of the current gen home consoles
> and PCs. Here, author David Hawes details how to get the language working
> in-engine on consoles.
Game Developer Magazine
http://www.gdmag.com/archive/feb09.htm
\ l´⌒\⌒\ \\ \ \ ヽ ) ) \\ \\ ( \ \∩___∩ \\ \ \ ⌒⌒| ノ ヽ \\ \ \ / ● ● ト、\ \\\ \ Y | ( _●_) ミ\ \\\ \ / 彡、_ |∪| ノ \ \\\ (____)―ヽノ' ヽ  ̄ ̄ ヽ\\ \, j l l .l } Lua! l (_ノノノノ
OBAMA思ったより強気だw
すまん誤爆した
>>865 俺の大好きなAngelScriptはダメですかそうですか。
これってgta4のアレ?
>>881 いや、悪くはないと思うよ。
ただ情報が本当に少ないので、布教も兼ねてCEDECとかもっと小さいセミナーでもなんでも講演してくれる人がいると、
使い手も増える思うんだよなぁ・・・
そういった草の根的な活動を担ってくれる人がいないと組み込みスクリプトはなかなか盛り上がらないと思う。
Xtalは作ってる人が飽きてきてるかんじなんだよな
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
RubyとかJavaじゃないけど、10年は開発続ける気じゃないと広まらないよ。 Luaは言語仕様がどうとか言われているけど、よく続けたナーって幹事。
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
>>886 たしかに言語ってだいたい10年ぐらいしてから普及しはじめるからなー
javaもいじってた頃はまだまだ普及しそうになかったし
Javaは登場当初から流行る雰囲気に満ち満ちてましたよ。
Javaは、その当時使ってた環境がSolarisかWindowsかLinuxかで、 印象がだいぶ違うと思う。
それは関係ないんじゃないかな。
当時使ってた環境が98か286かで、印象がだいぶ違うと思う
Javaはアップレットをプッシュしていた頃は正直ただのオモチャに見えたな が、流行るのに10年はかかってないっしょ
あの薄い灰色の背景がなんかダサかった
昔はオモチャに見えたといえばJavaScriptの方だろ。
Windowsだったからか、JavaもFlashもwebで重いサイトに使われているくらいにしか思ってなくて (WindowsでJava=Java appletの時代w) こんなの流行るわけないだろ!と思ってたら、このありさまだよ! まあ、Windowsでは今でもJavaは、金融関係(証券会社とかトレード関係とか)しかみない気がするけどさ
昔:Javaって(動作が)重いよな 今:Javaって(言語仕様が)重いよな
言語仕様はそんなに膨れてないだろ。 もしかしてGenericsに挫折しちゃった人?
Java Applicationは携帯ゲームで花開いたな。今は使い物にならないJavaFXもそのうち化けるかな?
どちらかっちゅうと、考えるべきはAIRやAndroidじゃね? まあ、そろそろスレ違いかもしれんが。
翻訳 - Python製のソーシャルブックマークエンジンRedditはなぜLispをやめてPythonを使うようになったのか ? TRIVIAL TECHNOLOGIES 2.0
http://coreblog.org/ats/japanese-translation-why-reddit-uses-python > Pythonを使い続ける最も大きな理由... そうだなあ,大きな理由が2つあるよ。
> ひとつめの理由はライブラリ。Pythonには全部のライブラリがそろっている。
> 僕たちは開発を進めてきた課程で,たくさんの技術や,たくさんのアーキテクチャを学んできた。
> たとえば,僕がコネクションプールについて理解していなかったとしても,
> 僕はただ単にライブラリを探してきて使うことができる。それからコネクションプールについて理解して,
> 自分たちでライブラリを書けばいい。Webフレームワークについても理解する必要はない。
> 自分たちのフレームワークを作る時が来るまで,他の人が作ったフレームワークを使うだけだ。
> その他の多くの技術を使う前に学ぶ必要はないんだ。
> だってPythonにはほとんど全ての種類のライブラリが備わっているのだから。
> これからも,僕たちはもっと多くの技術を学び続ける。
> そして自分たちの手でライブラリを作る。技術を自分たち流に変えるためにね。
> このような手法を使うことで,自分流に変換する作業をとってもとっても簡単にすることができるんだ。
>
>
> もうひとつ,僕たちをPythonにつなぎ止めておく理由は,これは最も大きな理由なんだけど,
> Pythonのコードが読みやすく書きやすい,ということなんだ。
> たとえば僕たちが新しい技術者を雇うとき。Pythonが書ける技術者を雇うことはまずないわけだけど。
> 僕はただ「ぜんぶPythonで書いてね」と言うだけだ。
> そう言うだけで,彼らの書いたコードを僕は読むことができる。
> これはすごいことなんだけど,僕は部屋越しにコードが良いか悪いかを見分けることができるんだ。
> というのは,良質なPythonのコードはとても明確な構造を持っているから。
> これが僕の仕事をより楽にしてくれるんだ。Pythonのコードはとんでもなく表情豊かで,
> とんでもなく読みやすく,そしてとんでもなく書きやすい。
> だから僕は仕事をスムーズに運べるというわけさ。
便利なツールとしてのスクリプト・・・あるいはWeb用スクリプトとして言語を選択するのと、 組み込み用スクリプトとして言語を選択するのは視点が若干違うと思うな。 もちろん、手馴れた言語でスクリプトが記述できるのであれば大きなプラスポイントだとは思うけど、 実行速度やメモリ使用量、組み込みやすさ、本体とのやりとりの容易さ、デバッガetc... と単独で実行するときとは事情がけっこう変わってくるので、そのスクリプト言語の仕様が素晴らしいからといって、 採用するかどうかは考えどころだったりするね。
Squirrelで基本的な部分に詰まっちゃて、知ってる人いたら教えてもらえませんか? C言語と同じようにnut側にmain関数を書いておいて、それを呼び出すようにしたいんですが if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,SQTrue))) { SQInteger top = sq_gettop(v); sq_pushroottable(v); sq_pushstring(v, _SC("main"), -1); if(SQ_SUCCEEDED(sq_get(v, -2))){ sq_call(v, 1, SQFalse, SQTrue); sq_settop(v, top); } } と書いたんですが、sq_getで失敗してしまいます。 printなどの組み込み関数だと成功するんですが・・。 nut側は function main() { } しか書いてないんですが、nut側の書き方が悪いんでしょうかね?
> そして自分たちの手でライブラリを作る。技術を自分たち流に変えるためにね。
906 :
902 :2009/04/12(日) 08:59:48
誤爆・・・・まじスマソ
ここはクマスレじゃないぞ
>>902 キニスルナ
プログラム作るのに何の言語を使うかは絶対的なものではなく相対的なものでしかないわけで、
日ごろ使わない他の言語の良さを語ってくれるテキストは参考になる。
それが実績のある開発者の言葉ならなおさらのことだ。
909 :
902 :2009/04/12(日) 10:57:22
Pythonは組み込み言語につかわれているし、趣旨の1つにライブラリたくさんある言語いいよねー って話だから、あながちネタフリとしてはスレ違いでもないかw
>>904 sqstd_loadfile はスクリプトをロードしてスタックの先頭にのせるだけ。
その中身の function main() を登録するにはまずそれ自体を sq_call する必要がある。
sqstd_dofile にすれば思い通り動くと思われ。
まあ、同封されたSquirrelインタプリタの挙動を真似することからはじめることだな。
>組み込みやすさ、本体とのやりとりの容易さ この2点に関してはAngelScriptが一番だと思うんだがどうだろう。
COM用のスマートポインタがそのまま使えたのにはびっくりした
>>912 C/C++とイディオム的に同じことしかできないんじゃなぁ。
無名クロージャーとかコルーチンとかのサポートはあるんだろうか。
>>914 コルーチンは言語的にはサポートされておらず、C++側でそれのための仕組み作ってやらないとダメ。
簡単にできるけど。
じゃあ駄目じゃん
本屋で「はじめてのLuaプログラミング」って本見かけたんだけど、全然話題になってないね。 もしかして地雷?
ところで914の言うコルーチンは、Luaでいうところの、 ・スクリプト側でcoroutine.createで作るやつ ・C++側でlua_yield呼び出して止めるやつ のどっち指してるんだろう。
スクリプト言語による効率的なんたらの方を買って読んだ。 そっちの薄いのは言語仕様を書いてあったな。入門用っぽかった。地雷ではないだろう。
個人的には、 ・はじめてのLuaプログラミング は地雷 ・入門Luaプログラミング は良書 ・スクリプト言語による、効率的ゲーム開発C/C++へのLua組み込み実践 は 地雷ともまでは行かないが、そう受け取れる。 パン食い競争でぶら下げられてるフランスパンって感じ。 一部の実装の例に一貫性がない。しかも大事なところ。 ゲーム作りを謳ってるのに、徐々に作りながらじゃないくて、 「こういう時は、こんな感じでいいでしょう」みたいに書かれていて、 実際に積み重ねてく訳じゃないから使いたい時に使えない。 自分で考えて実装しろって事なんだろうけど、全体的に動かないもの見せられてる感は個人的には困り所。 だけど、Cへ実装の例に関しては一番詳しいのも事実。 入門Luaプログラミングと合わせて使うといい感じに分からない所同士を補ってくれたりするような関係。
>>920 >スクリプト言語による
そっかなー。動作するゲームのソースコードは入手できるわけだし。
コラムなんかを見てもなかなか参考になることが書いてあるように思える。
動くか動かないかはソースコードを読めばいいわけで、必ずしも本で全体を解説する必要はないんじゃないかしら。
別に作者の回し者ではないが、一通り目を通したものとして。
ちと質問 Luaってgotoある? スコープ違うとwhileやifで逃げるのは面倒なんだよな〜 >スクリプト言語による これの不満点はLuaで全部やる必要ないじゃんというところ toluaはクラスのポインタを渡してやってLua側で制御するために使ってて 管理そのものはC側でやった方がいろいろと楽だと思うんだよね 俺は一部のメンバ関数をLuaで書き換えるみたいな使い方してる
調べてすぐに分かることは、人に聞くほうが時間の無駄だと思うんだが。
スルー推奨
>>925 Adobe AlchemyでSquirrelがFlash上でうごくのかー。すげえw
ちょっと詳しい人教えて欲しいんだけど Luaを組み込んだコンシューマゲームの製作の際に、 Luaのライセンス(MIT License)ってどういう風に処理したらいいのかな? ソースのどっかにライセンス表記するのでいいのか、 それとも取説とかに明記する必要がある?
>>927 ソースだけじゃダメ。取説の類に記載が必要。っていうかライセンス嫁。
>>928 ∧__∧
(´・ω・) いやどす
ハ∨/^ヽ
ノ::[三ノ :.、
i)、_;|*く; ノ
|!: ::.".T~
ハ、___|
"""~""""""~"""~"""~"
>>928 ありがとう
調べはしたんだけど、ヘッダにでも書いときゃOKとか
言ってるサイトもあって混乱してたわ
>>930 それはソース配布の場合の条件
バイナリ配布時は取説か、あるいは実行ファイルそのものでユーザが参照できる状態にしておく必要がある。
バイナリを入手したユーザーが参照できるってのがポイントだよな ユーザーが見られるなら、CD内にreadme.txtでも置いてインストーラーでリンクはっておけばいいのかも試練が、 家庭用なら誰も見ないし(or 見れないし)、鳥説が自然でしょう
と書いて、思ったけど、中古だとどうなるん? あとダウンロード販売は。 ・中古は無視 ・ダウンロード販売は、ゲーム内クレジットをつくってそこに記述 って感じでしょうか
Xtalがもうすぐ1.0か
洋ゲーとかでタイトルロゴの下にいっぱいコピーライトが羅列してあるじゃん あれみたいにしたら
洋ゲー風にするなら、クレジット表示をメニューの中に入れてしまう手もあるな。 選択するとスタッフロールとかが流れるようにしておく。
へーそれいいね
それって、取説に載せずにゲーム中に表示してしまうってこと? そんなんでもいいのか
ゲーム起動時のデモで、Luaのサイトにある、青い丸に「Lua」って書かれた画像を出すのはOKなんだろうか。
ライセンスのページには必須じゃないけどいれてくれるとうれしいな的なかんじでかかれてるね>ロゴ
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
今組み込み言語を制作中で、Cから言語へのインターフェイスを考えてるところなんだけど、 どういうのがいいのか悩んでる。 二つ案があって、ひとつはLuaと同じくスタックを介する方法。 もうひとつは、オブジェクトハンドルを経由してアクセスする方法で、 Handle globalhash, funcobj, symbol; globalhash = getglobal( state ); symbol = intern( state, "globalfunc" ); funcobj = getfield( globalhash, symbol ); arg_pushinteger( funcobj, 10 ); call( funcobj ); handle_drop( funcobj ); handle_drop( symbol ); handle_drop( globalhash ); という感じになる。ちょっと長いけど、グローバルハッシュから特定シンボ ルの値を得るというのはありそうな処理なので、実際には専用のAPIを用意する。 ただこちらのほうはスタックに比べて、 ・ハンドル開放処理を忘れるとメモリリーク ・遅い という問題がある。 前者はスタック操作でも同じ(スタックトップを戻し忘れるのがそれにあたる)だけど、 後者は頻繁に行う処理な分、結構致命的。 ただ後者の方法のほうがスタックの状態を覚えなくてよい分、直感的といえば直感的 なんだよな。 両方用意したほうがいいかな?
とおもったけど関数呼び出しをハンドルに対して行うのは非常に無駄が多いな… やっぱりスタック操作かOTL
ごめん、何がいいたいかサッパリだわw 自前で実装するんだった、luabindとかxtalみたいにバインダがあると直感的で楽だと思うけど。 C++じゃなくて純粋なC言語でインターフェース作りたいの?
>>942 LuaではluaL_refとluaL_unrefでハンドルを使えるよ
>>945 ああ、そういやそうだった。やっぱり両方用意するのが得策か。
Pythonではハンドルしか扱えないようだったから、どうかなーと思ったんだけど。
ありがd
947 :
デフォルトの名無しさん :2009/05/06(水) 17:02:58
Luaって非OOの動的型付言語ですけど、 AWKやBASICと何が違うんですか? なんか、単なる先祖帰りのような・・・ Cとの連携が楽とか、 そういう違いは分かるんですけど。 AWKやBASICを拡張しただけでも代わり映えしないんじゃないですか?
>>947 >Luaって非OOの動的型付言語ですけど、
Luaはオブジェクト指向言語として十分な機能は備えてる。
言語のパワーなんて口で説明するよりも実際に触ったほうが理解がはやいと思う。
もし触った上での疑問なら、もうちょっと詳細に違和感を説明したほうがいいんじゃないかな。
自分がLuaを使ってるのは単純明快、
Luaでドメインを書くコスト+C++でその他を書くコスト < C++ですべて書くコスト
という不等式が(自分の場合)成り立つから。
お前さんもAWKやBASICがC++より生産性が高いと思ってて、かつそれが組み込み可能
ならば、それを使えばいいんじゃないの?
|Д゚)ジー |Д゚)ノ<AngelScriptもよろしく! |ミサッ
単なる先祖返りなわけないだろ ちゃんと計算されてる。アングルとか
最近、Squirrelはポロポロと新しいバインダが出回るな。
>>953 事件は2ちゃんねるで起こってるんじゃない。公式フォーラムで起こってるんだ!
scratイイ!luaから乗り換えようかな
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
lua_tointeger の unsgined int バージョンが欲しいんだけど、 strtoul(lua_tostring(L, -1), NULL, 0) みたいにするしかないの?
(unsigned int)lua_tonumber(L,-1) じゃだめなん?
C/C++とバインドするときの話なら別の論となるが、 スクリプト上のプログラミングならunsigned整数など考えないで済むコードを書いた方が楽だぞ。
色コードが書いてあるテキストファイルを読み込みたいんだけど、 "0xAARRGGBB" の形式で書いてあるから lua_tointeger だと読めないんだよね そうか lua_tonumber は double だから 32ビット符号なしでもちゃんと変換できるのかな? 試してみます
963 :
962 :2009/05/20(水) 21:34:17
テキストファイルというか lua でかいた設定ファイルという感じね
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Luaまピョーん☆ / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
Luaのコメントが//か#だったら最高だったんだが... -- だと構文ハイライトされないエディタで見たときにコードに埋もれてよく見えん。
そういう人は squirrel にうつると精神衛生的には楽になるよ!
Luaの向上心のなさは最低レベルだから 宗教論争の火種になりそうな「改良」は、いくら提案してもむだだと思う。
-- は伝統的な構文だからもっと賢いエディタを使えばよろし
>>968 向上心のなさ、というか後方互換性が最大限に考慮されている気がする。
だから、商用プロダクトにも安心して採用できるんだろうけど。
最近、web周りでRubyとかRailsとかも使っているんだが
バージョン上がると全然違う挙動とか、書き方換わったりするのがザラだったりするんだが、これが結構キツイ
書籍が出ても、すぐ陳腐化しちゃったり…書籍の日本語訳が出たころには、次のかなり変わったバージョンがなんて
(Ruby 1.8はいいんだけど、Railsは本当にヒドイw
しかも次期バージョンで他のフレームワークと統合されるのが決定しててちょオマ…)
//でコメントか。 AngelScriptの出番だな!
いやさ、エディタにあわせてライブラリ諸々変更なんて 誰も本気で言わないから
つーかそんな程度もカスタマイズできないエディタを持っていることと そんな程度も我慢できない根性でLuaを選んだ自分の浅はかさを呪うがいい
我慢しないで、カスタマイズができる「普通の」テキストエディタを使ってください
自分は普通にエディタ使うけど、客が使ってくれるとは限らないじゃない。 メモ帳で開けないから、設定ファイルの拡張子は xml じゃなくて txt にしてくれと言われたのに。
メモ帳で開くような設定ファイルを XML にする時点で仕様バグといってもいい。まじで。
それは拡張子xmlをメモ帳に関連付けるだけで良かったんじゃないか
細かく設定したいから、可能な限り設定項目多くしてくれといわれたので、 ini形式よりもxmlのほうが楽だったんだよね。 メモ帳に関連付けるだけで終わりだし、そもそもxmlエディタいれればそれで終わりなのに。
xmlなんかは1行目に文字コードセットが定義されているから、 下手にメモ帳で開いて保存すると、文字コード変わっちゃうしメンドクサイことになりますよね あと、xmlはMSからエディタ出てるけど微妙に使いづらいのが難点 個人的に、スクリプト言語で使うオススメの設定フォーマットはJSONだと思う
素人さんにさわらせる場合は CSV 以上のものは使っちゃダメだってのが経験則
>>980 同感ですな
xmlは素人には無理
フォーマット決めうちなtxtか、ini程度でokな気がする
質問。 C からlua の関数を呼ぶ -> 呼ばれた関数は、lua 内の別の関数 A そのものを返す -> C 側でそれを保持して、必要なときに A を呼びだす てことをやりたいんだけど、どうすればいいですか? lua の関数オブジェクトやみたいなのをスタックから取得する関数が見当たらないのですが。 lua_getglobal(L, "getfunc"); lua_call(L, 0, 1); myfunc = スタック[-1]からlua関数を取得 ... しばらくたってから ... myfunc をスタックにpush lua_call(...) ということがやりたいです。
>>982 Lua はオブジェクトを直接C側で参照する機構を持たない。よって単純には出来ない。
一般的には luaL_ref を使ってオブジェクトのリファレンス(絶対重ならないint値)をとって、
それをつかってレジストリテーブルにつっこんでおいて、必要になったらそのリファレンスを
つかってレジストリテーブルから引っ張り出してくる、という手法がとられる。
そんなややこしいのはいやじゃって人は、リファレンスを C側で保持できる squirrel オススメ
いまのプロジェクトにはC縛りがあるのでC++なsqurrelはダメなんです。 luaL_ref が一番素直そうなのでそれでやってみます。どうもありがとう。
SquirrelってC++だっけ? bindは確かにC++だが、直叩きだったらCの範疇でいけたような・・・
squirrel のソース自体は c++ だよ。 class でなくて struct なのは趣味かね。 ただ、インターフェース的には全部C合わせなので、普通にリンクして使える。 例外とかも全く使ってないから問題になるところはどこにもない。 プロジェクトが C縛りってのがいまどきだと意味不明だねぇ
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
テーブルAのメソッドBを引数Cで呼んで戻り値D, Eを得たいんだけど、 // スタック初期化 lua_settop(L, 0) // A::Bをpush lua_getglobal(L, "A") lua_pushstring(L, "B") lua_gettable(L, -2) // 暗黙の引数selfをpush lua_getglobal(L, "A") //引数Cをpush lua_getglobal(L, "C") //実行 lua_call(L, 2, 2) //luaで return d, e された戻り値を受け取る D = lua_tointeger(L, 1) E = lua_tointeger(L, 2) てやると、D,Eにluaで返した値が入らないんだけど、どうしてですか???
最初に lua_getglobal(L, "A") したときのAがスタックに残ってる。 lua_gettable(L, -2) の後に lua_remove(L,-2) を入れるか、 その後の lua_getglobal(L, "A") を消せばいいと思うよ
>>989 後者の方法だと self が消えない?
>>986 C++がぜんぜんわからないってのがいまだに上にいたりするからな…
自分がそういう上司に当たって死にかけてからもうずいぶんになるが、
いまだにそういう人はちょくちょく見かける。
CとC#しか仕事で使ってません てかつかえません サーセン
>>984 Cオンリーなら、
// 一行コメント
も使っちゃダメなんだろうな、大変だな。
C99
C++ダメなプロジェクトが、C99を(ry
MSVCがC99に準拠することは今後も無いんだろうな //は使えるけど
うめ
次スレ立ってないのに埋めんなw テンプレに、大きな変更ないよね?
ぅ
あ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。