【Lua】組み込み系言語総合【Squirrel】at TECH
【Lua】組み込み系言語総合【Squirrel】 - 暇つぶし2ch2:デフォルトの名無しさん
08/03/11 13:02:49
■関連してるかもしれないスレ
Io Language
スレリンク(tech板)
2 part forth
スレリンク(tech板)
●●●●TCL/TKなら俺に聞け 2●●●●
スレリンク(tech板)
ECMAScript デス 3
スレリンク(tech板)
各種ライブラリ紹介スレ2(ゲ制作)
スレリンク(gamedev板)
【Perl,PHP】LLバトルロワイヤル【Ruby,Python】
スレリンク(tech板)
「コンパイラ・スクリプトエンジン」相談室12
スレリンク(tech板)
Garbage Collection (GC)について語るスレ
スレリンク(tech板)

3:デフォルトの名無しさん
08/03/11 13:03:54
■参考URL

■Lua
URLリンク(www.lua.org) (本家)
URLリンク(lua-users.org) (lua-users)
URLリンク(luaforge.net) (LuaForge)
URLリンク(sugarpot.sakura.ne.jp)(5.1マニュアル和訳)
Lua言語の紹介
URLリンク(staff.aist.go.jp)
入門Luaプログラミング
URLリンク(www.amazon.co.jp)

■Squirrel
URLリンク(www.squirrel-lang.org) (本家)
URLリンク(sourceforge.net)
URLリンク(sourceforge.net) (SqPlus)
URLリンク(sourceforge.net) (Squirrel Shell)
URLリンク(wikiwiki.jp)(wiki内2.1マニュアル和訳)

4:デフォルトの名無しさん
08/03/11 13:05:27
■他、前スレに載ってた言語
The Pawn language(だれも使ってなさそうな、組み込み言語)
URLリンク(www.compuphase.com)
NullLogic Embedded Scripting Language
URLリンク(sourceforge.net)
Xtal(ゲーム向け。スタックを意識しなくていい?)
URLリンク(d.hatena.ne.jp)
URLリンク(code.google.com)
URLリンク(blog.livedoor.jp)

※テンプレ以上※

5:デフォルトの名無しさん
08/03/11 15:59:21
組み込みと言えば、TCLだな

6:デフォルトの名無しさん
08/03/11 16:07:26
>>1

7:デフォルトの名無しさん
08/03/11 16:40:28
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:デフォルトの名無しさん
08/03/11 17:10:27
>>5
なんでTCLなの?
組み込みのIDEとかでよく使われてるけど

9:デフォルトの名無しさん
08/03/11 18:47:39
>>1

10:デフォルトの名無しさん
08/03/11 21:17:18
RubyもPythonも組込めるけどなあ。
Perlはさすがにやったことないが、できないこともないだろう。

11:デフォルトの名無しさん
08/03/11 22:39:02
RubyにしてもPythonにしても標準ライブラリや言語機能がでかすぎにみえる。
組込みに向いてるってのはコードサイズまたは外部への依存の少なさと
言語機能のバランスが取れてるって意味にではないのかと。


12:デフォルトの名無しさん
08/03/12 01:23:20
没になったテンプレ案には書いてあったけど、
そういう比較的大きな言語の組みこみの話も
多少は許容することが前スレで同意されていたはず。

でも一応Luaスレの続きだからその辺は空気読んでねと。

13:デフォルトの名無しさん
08/03/12 01:25:10
Ruby Perlは$がきらいだ
>>1 乙curry

14:デフォルトの名無しさん
08/03/12 06:04:56
このスレタイにくるまで長かったな

15:デフォルトの名無しさん
08/03/12 11:24:25
前スレは実りの多いスレだった
二年前からのスレだから当然かwww

16:デフォルトの名無しさん
08/03/12 11:48:00
GCのまとめ

LuaのGCはマーク&スィープ方式を組み込み言語向けに改良したインクリメンタル方式。
SquirrelのGCは参照カウント方式。

マーク&スィープ方式の欠点:
GCの処理に時間がかかるとハングアップした感じになる。その欠点を克服すべく、
少しづつ分割してGCの処理を行う(インクリメンタル方式)、
マルチスレッドで平行してGCの処理を行う、などの進化型が現在の主流。

参照カウント方式の欠点:
参照カウンタの更新処理によるオーベーヘッドにより処理速度が低下する。
循環参照への対処が必要になる。
過去の方式である感は否めない。


17:デフォルトの名無しさん
08/03/12 12:41:27
むしろ,ここはSqとLのどちらを使うか自分で判断できる人のスレ
GCの比較は余計なお世話というのが前スレの結論じゃなかったか?

18:デフォルトの名無しさん
08/03/12 12:50:09
squirrel

[名](複 ~s, 1で((集合的))~)
1 《動》リス:肉は食用になる.
2 [U]リス類の肉[毛皮].
3 ((米俗))変なやつ. ━[動](~ed, ~・ing;((英))~

19:デフォルトの名無しさん
08/03/12 13:34:15
         ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \    <過去の方式である感は否めない。
    |      |r┬-|    |      
     \     `ー'´   /
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ    だっておwwwwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /      |r┬-|    | (⌒)/ / / //  
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /  
ヽ    /      `ー'´      ヽ /    /     
 |    |   l||l 从人 l||l      l||l 从人 l||l   バ   
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、 ン
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒)) バ
                             ン

20:デフォルトの名無しさん
08/03/12 14:28:03
>>18
欧米じゃリスを食うのか…

21:デフォルトの名無しさん
08/03/12 15:27:03
squirrelちゃん涙目wwwwwwwwwwwwwwww

22:デフォルトの名無しさん
08/03/14 19:35:26
なんでこんなところに子供が…と思ったら春休みか

23:デフォルトの名無しさん
08/03/19 07:50:55
外国だとFreePascalでNintendo DSのソフト作ってる人多いな

24:デフォルトの名無しさん
08/03/20 12:59:11
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
こうなっちゃうのうちだけでしょうか?

25:デフォルトの名無しさん
08/03/20 16:05:19
正規表現通りの結果でてる。Squirrelでなくてもそうなると思う

26:デフォルトの名無しさん
08/03/20 17:56:02
"a.*b" の * は欲張りだから本来 "ab abcd ab" にまでマッチするはずじゃない?
Squirrel書いたことないので見当違いしてたらごめん

27:デフォルトの名無しさん
08/03/20 19:55:26
a.*?bだよな。

28:デフォルトの名無しさん
08/03/20 20:55:19
>>25
>>26さんの言うように最後までマッチするはずなんですよ
秀丸と、Luaで試してみましたが最後までマッチします。
>>25さんのところでも同じ結果がでますか?
うちで何か失敗してるのかなぁ?

29:デフォルトの名無しさん
08/03/21 13:54:40
うちでもなるから最短マッチな実装なんだと思うよ。
不満なら直すか、他から持ってくるしかないんじゃなかろうか。

30:デフォルトの名無しさん
08/03/21 14:28:25
いやいや、最短なら
ab
で終了だろw


31:デフォルトの名無しさん
08/03/21 14:35:24
あ、そうか。間抜けな俺。

* は 0 個もありだよな

ってことで、バグ認定でいいんでね?

32:デフォルトの名無しさん
08/03/21 22:11:46
.が任意の一文字で*がワイルドカードだとすると辻妻あうな

33:デフォルトの名無しさん
08/03/21 22:33:32
>>29-31
ありがとうございます
どうもバグみたいですね
英語苦手だけど、なんとかレポート送っときます


34:デフォルトの名無しさん
08/03/22 17:43:40
>>33 レポート乙

35:デフォルトの名無しさん
08/03/31 20:28:40
age

36:デフォルトの名無しさん
08/04/02 00:55:25
なんか過疎ってるな。

swig + lua の組み合わせを最近多用している。
luaからswigで公開する型や関数のメタ情報を取得ってできる?
例えば関数の引数や戻り値の型名とか。
構造体のメンバ変数の一覧ならメタテーブル経由で取得できるけど。


37:デフォルトの名無しさん
08/04/06 18:28:21
>>36
luaは動的言語だから、戻り値や引数の型の分からんでしょう。
型は変数じゃなくて、値にくっついてる。

38:デフォルトの名無しさん
08/04/07 02:55:50
luaをネットワーク関係のライブラリ(httpを解釈できればいい)
辺りだけ組み込んで、最小構成にするとどれだけ小さくなりますか?
100kByte以下とかできる?(linuxのELFで)

39:デフォルトの名無しさん
08/04/07 10:05:33
それは質問する前に自分で試せるだろう。

40:デフォルトの名無しさん
08/04/07 17:48:01
組み込みの状態でヴィジュアルデバッグができる言語ありませんか?

41:デフォルトの名無しさん
08/04/08 01:21:25
ヴィジュアルデバッグとか聞いたことなかったけど、そんな単語あるんだなw
ICEとかじゃだめなの?言語に依存する内容じゃないように思うけど・・・

42:デフォルトの名無しさん
08/04/08 01:41:17
サイケデリック ヴァイオレンス & クライム オヴ ヴィジュアル デバッグ!

43:デフォルトの名無しさん
08/04/08 02:00:17
squirrel は SqDbg と SQDEV っての使うと eclipse からリモートデバッグできるらしいけど使ったことはない。

44:デフォルトの名無しさん
08/04/08 08:50:27
squirrelはちょっと・・・すみません。

45:40
08/04/08 20:26:03
>>41
ヴィジュアルデバッグは造語かもしれません。
GDBじゃないVisualStudioのような環境のことを指しています。
あと、「組み込み」は小型機器への組み込みではなく、
C++プログラムに対する組み込みの意味です。
いろいろ、すみません。

>>43
その組み合わせは非常に使えそうなので、ちょっと試してみます。
ありがとうございました。

46:デフォルトの名無しさん
08/04/08 23:53:24
GUIデバッガとか、ソースレベルデバッガ、って言うと思う。

47:41
08/04/09 01:12:39
>>45
ヴィジュアルデバッグでググったら多少引っかかったんで個人の造語ってわけじゃないと思うよ。
単純に俺が無知だっただけorz


48:デフォルトの名無しさん
08/04/12 22:34:43
sqplusでプロパティ(getterとsetterを普通の変数アクセスのようにみせるアレ)
は作れますか?

49:デフォルトの名無しさん
08/04/13 02:03:48
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から呼ぶ方法がわかんない。

50:デフォルトの名無しさん
08/04/14 01:20:39
>>40
scite-debugを使えば、C/Luaプログラムを同じ環境でデバッグできるはず
使ったこと無いけど

51:デフォルトの名無しさん
08/04/15 23:22:53
xtal結構いいよな。
luaから乗り換えた。

つか作者はドキュメント整備してくれんかのぉ。

52:デフォルトの名無しさん
08/04/15 23:24:02
>>49
マニュアル嫁

53:デフォルトの名無しさん
08/04/16 09:57:04
Xtalいいな ネイティブスレッド対応か。

54:デフォルトの名無しさん
08/04/16 12:28:27
Xtalのページ見てみたけどよくわからん。
ゲーム重視だからパフォーマンス重視なんだろうけれども。
Xtalはお手軽に制御構文が書けてかつパフォーマンス重視ってところがいいのかな?


55:デフォルトの名無しさん
08/04/16 21:36:25
>>53
ちょまて Xtalってバーチャルマシンがスレッドセーフでできてんのか?

56:デフォルトの名無しさん
08/04/18 09:32:44
ゲームのスクリプトにlispってどう思います?

57:デフォルトの名無しさん
08/04/18 10:52:19
やってみたら?

58:56
08/04/18 11:05:19
そっすね

59:デフォルトの名無しさん
08/04/18 20:29:27
>>56
たしか、naughty dogがlispなんだよね


60:デフォルトの名無しさん
08/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が呼び出されたときにポインタにキャストするようになっています。

何かいい方法はないでしょうか? もしくはセオリーなどを教えていただけませんか?


61:デフォルトの名無しさん
08/04/21 03:12:37
申し訳ありません、上げてしまいました

62:デフォルトの名無しさん
08/04/21 03:13:14
プログラム板では質問は age 推奨

63:デフォルトの名無しさん
08/04/21 03:19:01
個人のゲームなんですかねえ

64:デフォルトの名無しさん
08/04/21 08:12:31
まずポインタをデバッガで追ってみりい。
スタック操作で単純にミスしてるだけな気がするよう。

65:デフォルトの名無しさん
08/04/21 11:04:50
>>60
オブジェクトをIDで管理すればポインタを持たなくても
IDでやり取りできるんじゃない?

66:デフォルトの名無しさん
08/04/21 19:30:36
>>60
そのC++オブジェクトをSquirrelのオブジェクトとして登録してみるのは?


67:デフォルトの名無しさん
08/04/22 08:12:10
Squirrelあきらめます。ありがとう。

68:デフォルトの名無しさん
08/04/22 11:19:04
www
まあ正直聞いててスクリプトでやるようなことじゃないと思ったわ

69:デフォルトの名無しさん
08/04/22 22:55:42
>>64
スタック操作確認して怪しいところ修正したら動きました。
本当にありがとうございました…。

>>65
次改造するときに試してみます。

>66
そんなこと出来るのでしょうか? Squirrelのクラスについてもう少し学んでみようと思います。

>68
たしかにそうかもしれません…。

70:デフォルトの名無しさん
08/04/22 22:57:50
>>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;
}



71:デフォルトの名無しさん
08/04/23 19:09:00
>>69
ホストのポインタをvm内に格納するばあい
userpointer型を使うとかsqclassのインスタンスにsq_setinstanceupするのが適当

72:デフォルトの名無しさん
08/04/24 02:39:32
luaの関数をCの値として保持しておくことはできるんでしょうか?
luaスクリプトからコールバックを登録して、Cから適宜呼び出す、ということをしたいのですが。

73:デフォルトの名無しさん
08/04/24 08:27:31
>>72
LuaのC APIを使って、Lua VM内のグローバルにある関数を(値として)スタックに積むことはできる
スタックに積まれた関数をLuaのC APIから実行することはできる

でOK?
この手の話題ってC側なのかLua側なのか、表現が難しいな。
上のSquirrelのやつもそうだが

74:72
08/04/24 16:15:42
>>73
ありがとうございます。Cの値として保持しておくことはできないんですよね。
それだと、Luaから渡された関数を適当なタイミングで呼びだすには、
関数を一旦スタックの深いところに置いておいて、必要な時にインデックスを使って呼び出す、という形になるのかな…。

75:デフォルトの名無しさん
08/04/24 17:42:07
>>74
LuaからCに関数名を渡せばあとでCのほうから探索できる。
関数を保持しとくのは無理かな、たぶん。

76:デフォルトの名無しさん
08/04/24 20:17:04
luaL_ref/unrefを使えっていう話?

77:デフォルトの名無しさん
08/04/24 22:39:23
>>76
それが一番質問者の期待しているものに近そう。
75に似た方法で呼び出す関数名を決め撃ちするのもあり。

78:72
08/04/25 01:33:55
>>75-77
ありがとうございます。マニュアル引き引き調べてみます。

79:デフォルトの名無しさん
08/04/28 09:10:05
コンパイル済みのsquirrelスクリプトを事前に変数かなんかに格納しておいて、後でvmに読み込む場合はどのようにすればいいのでしょうか?
リファレンスなどを読んだ感じだとsq_readclosure()辺りを使うのかと思ったのですが資料をあまり見つけることができませんでした。

80:デフォルトの名無しさん
08/04/29 15:57:18
>資料
ソースを読めばいいじゃない。
そこらのライブラリとかスクリプトのような聞き方をされると違和感をおぼえてしまう。

81:デフォルトの名無しさん
08/04/30 08:25:13
でたーソース嫁攻撃

82:デフォルトの名無しさん
08/04/30 09:27:07
そりゃあ出るだろう
ソース読むのが妥当な場面だもの

83:デフォルトの名無しさん
08/04/30 11:59:05
すべての質問は自分で調べろで片付く
ある意味最狂

84:デフォルトの名無しさん
08/04/30 12:31:55
まぁ、極論馬鹿の脳内では今回の話もそこへ繋がるんだろうな、
というのは、容易に推察できることではある。

アホくさいけど。

85:デフォルトの名無しさん
08/04/30 13:30:40
昔はハウトゥー本前提での自分で調べろって台詞だったが、
最近は面倒になりそうなのは全部自分で調べろって投げ捨てるよな

86:デフォルトの名無しさん
08/04/30 13:44:35
ソース嫁馬鹿に極論馬鹿にレッテル馬鹿の三つ巴ですかw

87:デフォルトの名無しさん
08/04/30 13:45:52
バカばっか

88:デフォルトの名無しさん
08/04/30 14:14:23
>>86
無理矢理三つ巴と思い込む暇があったら
ソースでも読んでた方がいいと思うよ。

89:デフォルトの名無しさん
08/04/30 16:55:55
ソース読まない馬鹿は死ぬべきだな。

90:デフォルトの名無しさん
08/04/30 17:32:11
春か…

91:デフォルトの名無しさん
08/04/30 17:39:41
ソースを読めば素晴らしい回答が在る、というのにお礼も言わずに、
アホなレス繰り返してる馬鹿のレベルが低いんだもの。
まぁ、読めないから回答者に喰いついてるんだろうね。

質問者は社会常識を身につけてから出直しておいで。
自分の立場を弁える常識は必要だよ?学生君。

92:デフォルトの名無しさん
08/04/30 18:16:20
ソース読んでどうにかなるレベルの奴がここで質問するわけがない

93:デフォルトの名無しさん
08/04/30 18:24:36
テンプレに追加案
【このスレは”質問スレ”ではありません】
ソースを読めば素晴らしい回答があります。
何時間掛かるかも分りませんが、まずはすべてのソースを読み理解する頃には質問の内容も解決している事でしょう。
また質問者は立場をわきまえ、回答者を崇めること。


このスレは雑談スレか

94:デフォルトの名無しさん
08/04/30 19:35:46
79の言ってることがよくわからないんだけど、
あらかじめ変数に読み込んでおいてというのは、
ファイル開いてファイルサイズ分メモリを確保して、そこにreadするということか?
それでそのバッファのポインタを渡して読み込ませたいってこと?


95:79
08/05/01 02:06:38
忙しくてレスできませんでした。
>>80
とりあえずソース読んで分からなかったらまた尋ねるかもしれません。

>>94
94さんの言うとおりファイルサイズ分メモリを確保しておいて、そこにファイルを読み込ませ、そのメモリからオブジェクトにデータをロードさせようと
思っています(do_fileやload_fileなどを使うといちいちファイルにアクセスして負荷がかかるため)。
現在はchar*にスクリプトを読み込ませておいて、オブジェクト生成時にコンパイルしていたのですが、
コンパイルにかかる負荷がバカに出来ないと考え「コンパイル済」のスクリプトをメモリに保存しておいて運用したかったのでその方法を質問させていただきました。

96:デフォルトの名無しさん
08/05/01 03:37:06
コンパイルドバッファだったと思う。
URLリンク(wikiwiki.jp) か もんしょの巣穴っていう個人さんのサイトに解説あった気がする。
違ったらヘッダをcompで検索すれば出てくると思う。
眠いからこれ以上は書けないZzzz

97:デフォルトの名無しさん
08/05/01 03:41:20
ああ勘違い、コンパイル済みスクリプトをバイナリで保存しておいて読み込みたいのね?
役に立てないZzzz

98:デフォルトの名無しさん
08/05/01 11:25:29
本人が言ってるとおりsq_readclosureでいいんじゃないのか

99:デフォルトの名無しさん
08/05/01 12:14:36
私はLuaの方の人だから見当違いかもしれないと前置き。
sq_readclosureでよさそうだけど解説があまりないから
断片的な情報とソースから推測するしかないって感じかな。
ソースはsqstdio.cppにあるsqstd_loadfileの実装が参考になりそう。

ところでsqstd_loadfileは関数を評価せずにスタックに
積むだけみたいだから、その参照を保持しておくだけで
用が足りたりしないのかな。

100:デフォルトの名無しさん
08/05/02 01:18:42
流れぶった切るけどスマソ。
Lua側の関数に引き渡した0xFFFFFFFFってリテラルが、C側からlua_tonumberで取ってくると0で返却されるのは既知?
さらに、0xFF00FFFF -> 0xFF010000なんて取れてきたりする。
どうもVC8だと起こるらしくて、gcc系だと引き渡したリテラルが正しく取れるんだけどなぁ。

101:79
08/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のスタック周りの操作についてほぼ無知であることが分かったため、もう少し勉強してからトライすることになると思います。

102:デフォルトの名無しさん
08/05/02 14:13:56
>>100
Luaは整数を小数として扱ってるからその辺りが関係あるのかなぁ。
あと、高速化のためか整数←→小数の変換には
単なるキャストを使っていたり、アセンブラ命令を直で使っていたりする。

103:デフォルトの名無しさん
08/05/02 17:37:50
>>102
luaconf.hの中のlua_number2intの定義の所ね。
_MSC_VERでifdefしてる個所もある@5.1.3
LUA_ANSIをdefineして直ったらここが原因だろう。

104:デフォルトの名無しさん
08/05/02 20:16:36
>>100
Direct3D使ってたら浮動小数点演算の精度が24bitになってる可能性あるんで
D3DCREATE_FPU_PRESERVE
を調べるといい。

ただ値の受け渡しだけはできるはずの気がするが。

105:デフォルトの名無しさん
08/05/03 16:16:35
lua_xmoveが使える条件に、「同じグローバルステートの異なるスレッド」ってあるんですが
これってどういう事なんですか?
同じlua_Stateから派生したスレッド同士なら良いということですか?

106:デフォルトの名無しさん
08/05/03 17:37:37
>>105
それを使ったことはないけども・・・
coroutine作ると新しいlua_Stateが作られるけど、それは元のlua_Stateとグローバル情報を共有してる。
だからxmoveが使えるのは、元のVMから作られたcoroutineを示すlua_State(および元のVM)間だけ、ということかと。

「スレッド」って言うとOSスレッドのように聞こえるから、混乱を招くので敢えて使いたくないんだよね・・・。

107:デフォルトの名無しさん
08/05/06 03:48:30
>>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);
}
}

108:デフォルトの名無しさん
08/05/06 11:17:07
どうにも理解しがたいので、質問させてください。
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で落ちるんですが
これはどう対処すればいいんでしょうか・・・


109:デフォルトの名無しさん
08/05/06 12:06:07
>>108
lua_newthreadはあくまでコルーチンを作る関数だから、
それで作られたlua_Stateはコルーチンの流儀でしか使えないんじゃないかな?
つまり、lua_resumeを使えと。

あとlua_newthreadはスタックにスレッド(コルーチン)オブジェクトを積むので、
使い終わったらpopするとか、グローバルに置くとか、なんとかしてやる必要がありそう。

思うに、Lua側からcoroutine使ったほうが余計なことを考えずに済むような気がするけど。

110:デフォルトの名無しさん
08/05/06 16:24:33
>>109
ありがとうございます。
そもそもこんな使い方をするものじゃない、ということですかね。
どうやら根本的に考え方がおかしかったようですね・・・

>>105も私の書き込みです。遅れましたが、>>106さんありがとうございます。


111:デフォルトの名無しさん
08/05/09 17:29:29
>>72
lua_tofunctionでググれば出てくるよ

112:デフォルトの名無しさん
08/05/13 22:54:29
Python スレに行くべきかとも思ったのですが、一応 Lua の話題なので
こちらで質問させてもらいます。

The Implementation of Lua
(URLリンク(www.jucs.org))
の5章第3パラグラフの最初に
"Most procedural languages avoid this problem by restricting lexical
scoping (e.g., Python)"
と書いてあるのですが、Python のレキシカル・スコープはどのような点が
制限されているのでしょうか?ご教授いただければと思います。

113:デフォルトの名無しさん
08/05/14 12:01:15
クロージャ関係のようだけど...

なんか今そのLuaのドキュメントのあるサイトが落ちてるみたいなので
覚えてたらまた見てみますね。

114:デフォルトの名無しさん
08/05/14 16:40:29
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 パラグラフが言いたいことはわかってるよね?

115:デフォルトの名無しさん
08/05/14 17:45:25
wikiのsquirrelのAPIリファレンスが行数オーバーとか言われてるけど


116:デフォルトの名無しさん
08/05/15 01:46:31
>>114

5章の最初のパラグラフは、add によって返される関数はその内側のスコープにない変数
(レキシカル変数?でいいんですよね)x を参照しているから、add の処理から抜けて
スタックから x の情報がなくなってもその情報も保持してないとまずくて、そのために
必要なのがクロージャですよ、って話ですよね。
僕も >>114 さんのいうように、Python にここでいうような問題点はないように思い、
質問させてもらいました。

今日も少し調べてみました。まず、以下の議論からもわかるのですが
URLリンク(groups.google.co.jp)
Python はレキシカル変数は immutable である、という制限(仕様)があるようです。

ひょっとすると、たしかに Python には制限があるものの、Figure 3 で例示されているの
は飽くまでクロージャの必要性を示すためのコードで、Python の制限を示すためのものでは
ない、ということではないでしょうか?

117:デフォルトの名無しさん
08/05/15 09:51:37
別のサンプルで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

になりますね。そういうことでいいと思います。

118:デフォルトの名無しさん
08/05/15 11:26:01
>>117

やはりそういう理解でいいんですかね。
お付き合いいただきありがとうございました。


119:デフォルトの名無しさん
08/05/17 02:34:29
You can download Squirrel 2.2.1 stable here

120:デフォルトの名無しさん
08/05/17 06:39:16
月とリス

121:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/20 04:29:05
北陸先端科学技術大学院大学情報科学研究科組込みシステムコース(博士前期課程、博士後期課程)
URLリンク(www.jaist.ac.jp)

東海大学専門職大学院組込み技術研究科組込み技術専攻(専門職学位課程)
URLリンク(www.u-tokai.ac.jp)

信州大学大学院工学研究科情報工学専攻組込み技術者育成コース(博士前期課程)
URLリンク(www.cs.shinshu-u.ac.jp)

123:デフォルトの名無しさん
08/05/20 05:43:41
>>122
組み込みの意味違うし

124:デフォルトの名無しさん
08/05/20 11:39:43
version5.1.2でluac -lしても定数やらUpvalやらのリストが
出てこないんだけど、なんでかな?



125:デフォルトの名無しさん
08/05/20 16:39:11
>>124
騙されたと思って -l 2つつけてみ・・・

バグっぽいけど。

126:デフォルトの名無しさん
08/05/20 18:21:46
>>124

ホントだ。man見てもさっぱり理由が分からなかったから
結構まいんってたんだけど・・・。

とにかくありがとう。


127:126
08/05/20 18:23:42
安価ミス失礼

>>125ありがとう


128:デフォルトの名無しさん
08/05/23 13:37:46
DLLなどなしで使えるポータブルな組み込み言語を探していてWSHに行きついたのですが、
WSHの組み込みってありなんでしょうか?

webページを検索してみてもサンプルみたいなものが全然ないのですが、
どこかにないかな・・・

129:デフォルトの名無しさん
08/05/23 14:01:07
あった・・・

Windows Script
URLリンク(www.microsoft.com)

130:デフォルトの名無しさん
08/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のメンバを呼ぶ方法って、なんかないでしょうか?


131:デフォルトの名無しさん
08/05/24 14:12:17
>>130
SquirrelFunction<void>(SquirrelVM::GetRootTable().GetValue("instance_of_B"), "member_function_of_B")("argument1", "argument2");


132:デフォルトの名無しさん
08/05/24 19:40:34
>>131
これだと、RootTable上にinstance_of_Bという名前で生成されているという情報を
C++側がつかんでないと実行できないですよね?

現状の設計だと、
ClassAのコンストラクタでstaticなClassA*のListへ突っ込むという処理を入れとく。

あとでそのリストをぐるっと回してClassAの派生Classのメンバーを呼んでいく

という処理をしたいので、
C++側ではそのインスタンスの名前とか生成されたスコープとかは掴んでないんですよね……。

と、今思いついたんだけど。
GetRootTable().GetValue()が返すのはHSQOBJECTだから、
PostConstructが動いた時点でそいつを掴んどけばいいのか?



133:デフォルトの名無しさん
08/05/24 20:24:40
class B の constructor() 内で A.constructor() を呼び出すのはどう?

134:132
08/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タイミングとかで変化したりとかしなければこれでいけっかな?


135:デフォルトの名無しさん
08/05/29 18:06:06
wikiのLuaチュートリアルのサイトでlua_dofileって関数あるけど、
これもうなくなったの?

136:デフォルトの名無しさん
08/05/29 19:55:44
luaL_loadfile 名前が変わったとかなんとか。


137:デフォルトの名無しさん
08/05/29 20:10:18
luaL_dofile


138:デフォルトの名無しさん
08/05/29 23:14:47
DSのLuaはスレチだよね?

139:デフォルトの名無しさん
08/05/30 11:10:06
>>138
URLplz

140:デフォルトの名無しさん
08/05/30 18:20:10
URLリンク(dslua.7mc.org)

起動できなかったorz..

141:デフォルトの名無しさん
08/05/30 20:09:59
そこのページにある
>NDS用のテキストエディタがあれば、NDSだけでプログラミングも可能です
とい文章に質問。NDS用のテキストエディタってどこにあるの?

142:デフォルトの名無しさん
08/05/30 20:13:51
URLリンク(7mc.org)

143:デフォルトの名無しさん
08/05/31 03:52:48
scriptsフォルダはルートに置けよ。念のため。

144:デフォルトの名無しさん
08/06/04 16:12:35
Luaって組み込みに関する日本語の解説ページ少ないよね?
Squirrelの方がまだ多い気がする


145:デフォルトの名無しさん
08/06/04 18:08:36
>>144
本家のテキストの和訳が出てないんだからまだこれからじゃないの?
Erlangだって和訳が出てから急激に増えたんだしさ。

146:デフォルトの名無しさん
08/06/05 17:27:33
Luaでバイナリ出力ってどうするんですか?

luaL_loadfileでスクリプト読み込んで
lua_dumpで出力でいいんでしょうか?

lua_dumpの解説で関数をバイナリ出力すると書いてあるので、
ファイル丸ごと出力するのはまた別にあるのかと思ったのですが、見当たりませんでした


147:デフォルトの名無しさん
08/06/05 19:57:19
>>146
luac.c調べればいいんじゃないかな

148:デフォルトの名無しさん
08/06/06 17:02:47
Luaの内部の挙動理解するの難しい…
SquirrelはVM内のデータのひとつひとつの役割とか挙動とかもわりと簡単に追えたけど
Luaのステートはメンバ変数の意味もよくわからんし、ソースも追いにくい
どうしようこれ。突破口が見えん

149:デフォルトの名無しさん
08/06/06 20:30:15
何となくわかってきたスレ汚しスマソ

150:デフォルトの名無しさん
08/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
08/06/13 14:47:05
すみません、私はキチガイでした。
なんでこれでビルド通ったんだ???


152:デフォルトの名無しさん
08/06/13 18:36:00
自分で自分を放送禁止用語で貶めなくても。

153:デフォルトの名無しさん
08/06/14 21:19:14
Luaってlua_loadfileで読み込んだ特定のファイルのデータだけ解放する方法ってありますか?
例えば自分で作成したテーブルにスクリプトを読み込ませて、それを削除する、とか。


154:デフォルトの名無しさん
08/06/15 18:03:55
グローバルに追加した物を削除してGCかければいいとは思うけど…

方法としては、ロード前にグローバルテーブル入れ替えちゃう方法もいいかも。

155:デフォルトの名無しさん
08/06/19 21:43:38
SquirrelのコンパイラがFILE*使ってるのを何とかしたいんだけど、
sqstd_fopen、sqstd_fread、sqstd_fwrite、sqstd_fseek、sqstd_fclose、
sqstd_feof、sqstd_ftell、sqstd_fflush
これ全部書き換えればなんとかなるかな?
誰か実証した人いない?




156:デフォルトの名無しさん
08/06/20 08:08:00
>>155
うちは2.2.1でそれで一応動いてるよ。squirrelの全機能の検証まではしてないけど。

157:デフォルトの名無しさん
08/06/23 01:17:20
>>154
それをやる方法がAPIで見つからなかったんですが…
ひょっとしてlua_Stateのl_gtメンバを
直接書き替えるんですか?

158:デフォルトの名無しさん
08/06/23 07:49:48
>>157
>ひょっとしてlua_Stateのl_gtメンバを
>直接書き替えるんですか?

さすがにそんなことを推奨しないよw
setfenv()使えばいいかと。
CでやるならluaB_setfenv()あたり参考に。

ただグローバルそのまま置き換えると元のグローバルにあったAPIとか全部使えなくなるわけだけど、
新しいグローバルのメタテーブルの__indexに元のグローバルでも入れとけば
なんとかなるんじゃないかなぁ。

159:デフォルトの名無しさん
08/06/26 23:40:50
URLリンク(sankei.jp.msn.com)
職務質問で勝手に手を突っ込んだポシェットの中の、ツールナイフの剥き身の刃を触ったら切れて公務執行妨害だとか
もう警察も秋葉原で事件さえ起これば何でも良いみたいだな

160:デフォルトの名無しさん
08/06/26 23:52:37
test

161:デフォルトの名無しさん
08/06/27 15:24:10
tolua++ってオワタんですか?
サイトにアクセスできないけど…

162:デフォルトの名無しさん
08/06/27 16:13:16
まだ繋がる。

プロキシを使うと接続できるという報告例あり。

163:デフォルトの名無しさん
08/06/27 16:29:25
よくわからんけどそれは串のキャッシュを見てるだけなんじゃ…。

164:デフォルトの名無しさん
08/06/28 03:29:45
あーやっぱtolua++つながらない人いるんだ。
うちも基本繋がらないんだけど、串とか携帯とかhtmllintゲートウェイとか経由すれば大抵いけるんだよね。
調べた限りではその付近のIP一帯につながらない。どっかでルーティングが狂ってそう。


165:デフォルトの名無しさん
08/06/30 12:46:37
LOVEっていうLua用?の 2D Game Engineみつけた
チュートリアルは知りたかったこと扱ってるし簡単そう!

166:デフォルトの名無しさん
08/06/30 12:49:28
URLリンク(love.sourceforge.net)

167:デフォルトの名無しさん
08/06/30 13:21:17
そういや、後輩が持ってたけどLuaの本っていつの間にでたん?

168:デフォルトの名無しさん
08/06/30 14:13:00
ググレカス

169:デフォルトの名無しさん
08/07/05 17:30:37
ゲーム向け組み込みJavaScript(まだベータ版)
CRI Script - Trac
URLリンク(criscript.com)

・ゲームへの組み込みを念頭に作られた ECMAScript の処理系
・PC と Xbox360 で動作確認
・BSD ライセンスに近い独自ライセンス
・バイトコードにコンパイルして実行 (=実行時オーバーヘッドが少ない)
・マルチスレッドサポート; resume() という言語拡張も。
・C++ との相互利用が簡単
・PowerPC, ARM に向けた最適化
・Eclipse によるデバッガ
・コンポーネントをカスタマイズ可能で、メモリ使用量が小さい
・GC のタイミングをコントロールできる
・Vector とか Matrix とか

参考URL ※箇条書きは書きサイトより引用
ゲーム組み込み用の ECMAScript 処理系 CriScript - Game Scripting Memo
URLリンク(d.hatena.ne.jp)

170:デフォルトの名無しさん
08/07/05 18:23:12
なんで60MBもあるんだよ・・・

171:デフォルトの名無しさん
08/07/05 20:44:47
boostのライブラリのせいかな? srcのほとんどがboostのヘッダだ。
リリースとデバッグのライブラリで合計400MBもある。

172:デフォルトの名無しさん
08/07/05 23:03:55
bisonとか使うなつーの

173:デフォルトの名無しさん
08/07/06 00:34:15
後発なんだったらせめてLuaあたりは軽くこえてもらわんと

174:デフォルトの名無しさん
08/07/06 01:05:39
Cから使えるJavascriptといえば
spidermonkeyはどうなんだ
yieldも使えるし

175:デフォルトの名無しさん
08/07/06 16:52:05
>>172
なんで? 使いたいの使えばいいじゃん。

176:デフォルトの名無しさん
08/07/06 17:06:10
やりたいようにやればいいじゃん

177:デフォルトの名無しさん
08/07/06 22:34:18
ライセンスは?

178:デフォルトの名無しさん
08/07/10 13:03:11
セデックでスクワラルのセッションがある

179:デフォルトの名無しさん
08/07/10 13:47:56
>>177
URLリンク(www.gnu.org)


180:デフォルトの名無しさん
08/07/10 16:50:30
luaでゲーム作る人ってやっぱりそんないないのか

181:デフォルトの名無しさん
08/07/10 22:32:01
小規模なゲームだと使うメリットがあんまりないし
使うほど大きな規模のゲームがそもそも作られない

・・・んじゃないかと思う
あと組み込み言語自体がいまいち一般的じゃないよね

182:デフォルトの名無しさん
08/07/11 00:30:14
海外ゲーはMOD改造しやすいように組み込み言語やXMLなどを使っている。
一方、日本は海外のようなMOD文化が弱い。あっても、バイナリ解析によるデータ変更や画像差し替えが主。
日本のゲームは書き換えを許容する文化でないから、汎用言語を使って間口を広げる必然がないのかも。

183:デフォルトの名無しさん
08/07/11 00:50:19
homeworldシリーズはluaだったよ

184:デフォルトの名無しさん
08/07/11 03:56:17
luaやsquirrel使ってたとしても
あえて公表する理由がない

185:デフォルトの名無しさん
08/07/11 15:15:50
>>184
luaはライセンス表記しないとダメだろ

186:デフォルトの名無しさん
08/07/11 19:17:01
luaはMIT、Squirrelはzlib

187:デフォルトの名無しさん
08/07/11 20:53:24
今気付いたんだが、MITライセンスに関するOSG-JP参考訳とWikipediaの内容が全然違うような?
URLリンク(sourceforge.jp)
URLリンク(ja.wikipedia.org)

188:デフォルトの名無しさん
08/07/11 21:57:26
>>181
DSluaおもしろそうだと思ったんだがな・・・

189:デフォルトの名無しさん
08/07/11 23:46:37
組み込み系の言語はそもそもゲーム本体作るのに向いてないしな。
アクションゲームの敵の動きや敵の配置とかをスクリプトで記述するのには向いてるけど。

190:デフォルトの名無しさん
08/07/12 00:20:11
>>182
XMLってまじっすか

191:デフォルトの名無しさん
08/07/12 01:13:13
>>190
Rise of Nationsとか思いっきりXMLだったな。
改造し放題。
AoE3も確かそうだった気がする

192:デフォルトの名無しさん
08/07/12 01:15:06
>>189
embeddedの言語はあくまでDSLだからねえ
Pythonとかのレベルになるとそうでもないんだろうけど

193:デフォルトの名無しさん
08/07/12 02:17:26
Pythonはbattery includedだが電池を作るのに向いてるわけじゃないだろ。

194:デフォルトの名無しさん
08/07/12 02:37:33
>>187
そう?
言っていることは同じで、Wikipediaは要約しているだけのように見えるけど。

ところで、このライセンスだと、ソースコードを配布しない場合も
ライセンス文を書く必要があるってことだよね?

商用ゲームだと、マニュアルの半ページくらいうはめになりそうだ…

195:デフォルトの名無しさん
08/07/12 05:08:02
>>185, >>194
著作権表示および本許諾表示を記載しなければならない、というのはソースコード等の話です(消すな、ということ)。
マニュアル等への表示義務はないです(旧BSDライセンスには宣伝条項があった)。
あとサブライセンスが許可されているから、より権利を制限する方向へのライセンス
(例えばGPLや商用ライセンス)を上からかぶせて適用することには問題がない。

ライセンス表記が必要だと思われてるとはなあ
業界でなかなかオープンソースが使われないわけだ

196:デフォルトの名無しさん
08/07/12 05:32:37
↑偉そうなこといって本当にすまんw
zlibと間違ってたみたい

197:デフォルトの名無しさん
08/07/12 16:14:21
MITの場合でも、見ようと思えば見れる場所にライセンスファイルなりを置いておけばいいでしょ。
オンラインのCREDIT表記あたりが適切か。

198:デフォルトの名無しさん
08/07/12 23:11:24
>>191
それはデータやら何やらの記述だな。

199:デフォルトの名無しさん
08/07/13 02:48:50
>>198
まさか、CDATAでスクリプトでも埋め込むのか?w

200:デフォルトの名無しさん
08/07/13 23:38:11
XMLで書かれたスクリプトってのもどこぞにあった気がする・・・

あんま書きたくないが。

201:デフォルトの名無しさん
08/07/13 23:49:03
>>200
XMLで書かれた同人ゲームを一つだけ知ってるが、
解析がえらい面倒だったな

202:デフォルトの名無しさん
08/07/14 04:31:50
>>200
BulletMLもXMLのDSLだな

203:デフォルトの名無しさん
08/07/14 11:28:11
XMLで書いてると最後に統計取れたり
解析が楽だったりするのがメリットか。
ドキュメンテーションも楽だろう。

204:デフォルトの名無しさん
08/07/14 12:34:15
S式じゃダメ?

205:デフォルトの名無しさん
08/07/14 12:40:29
セックスピー

206:デフォルトの名無しさん
08/07/14 21:17:26
Lua workshop2008もうすぐはじまるよ

@ワシントン州で

207:デフォルトの名無しさん
08/07/18 18:15:34
xtal更新とまっちまってるなあ

208:デフォルトの名無しさん
08/07/20 00:54:26
>>207
C++では行き詰まるという現実に気がついたのでは

209:デフォルトの名無しさん
08/07/20 01:00:17
つまりスクリプトをつくるための軽量スクリプト言語を


アレ?

210:デフォルトの名無しさん
08/07/20 16:41:45
わらかすなwwwwww

211:デフォルトの名無しさん
08/07/20 19:15:16
Lispでいいじゃん

212:デフォルトの名無しさん
08/07/20 19:41:13
そういや、Ruby の Matz もOOPのスクリプト作るのにOOPはむりぽ
みたいなこと言ってたな

213:デフォルトの名無しさん
08/07/20 23:37:57
>>212
なんで?やっぱり速度?

214:デフォルトの名無しさん
08/07/21 01:53:26
今時、さすがに速度じゃないと思うがw(開発速度?w)

Matz日記の過去ログにあったかもしれん。ちょっと行ってくる

215:デフォルトの名無しさん
08/07/21 02:06:29
確か、まつもと氏が混乱するとかいう理由だったような・・・・と思ったら

オブジェクト指向言語でオブジェクト指向言語を実装するというのに、脳がついていけないんだけど。
それって、僕だけ? (笑) C++ で言語作ってる人がいるけど、よくやるなぁ、とか思う。
ベース言語のクラスとか継承とかと、実装言語のクラスや継承がごっちゃになて、訳わかんなくなっちゃう。
設計して、どういう風に作ろうかなと思った時点で、もう、わかんなくなって「もういい、やめた」って。
URLリンク(jp.rubyist.net)

216:デフォルトの名無しさん
08/07/21 05:44:25
C++/CLIのことかー

217:デフォルトの名無しさん
08/07/21 16:17:08
なんだ…人間の能力の限界の話なのかよ

218:デフォルトの名無しさん
08/07/21 16:53:35
PHPもC++でエンジン書いてたが、やばいと気がつき後にむりやりCで
書き直したと聞いたことがある。具体的に何がやばかったのかは知らない。

219:デフォルトの名無しさん
08/07/21 17:24:10
俺には全く理解できん
CでいいならそのままC++でもいいじゃんと思うんだが…

220:デフォルトの名無しさん
08/07/21 17:36:48
そもそもCよりC++の方が型がこなれているんだから
OO捨ててもCより享受できるものが多いはず。

まあ、でもポータビリティ犠牲にするほどのものでもないかなあ。

221:デフォルトの名無しさん
08/07/21 18:47:24
>>219
C++ は、効率重視で、バイナリ互換とるのが極端に難しい実装ばっかりなので、
独立アプリならいいんだけど、ライブラリとして広く長期的に共有されるような
ものの記述には残念ながらあまりむいてない。

Windows はこれを COM という形で一応解決したんだけど、UNIX 系OSではその手のものが
統一的につくられることは結局なかったからね。php のような、他と組み合わせた
運用が求められるものだとこの点はわりと致命的なので、Cでかかざるをえ
なくなったんじゃないかな。

一応 Objective-C という選択はあるけど、こっちは実装が限られてるからねぇ


222:デフォルトの名無しさん
08/07/21 19:14:47
勉強になりました

223:デフォルトの名無しさん
08/07/21 21:55:19
ABIの問題ってことかな。
C++のライブラリをextern "C"してDLLやsoにしたものを、
Cとかで呼ぶとなんかまずそうなのは想像できるな。
グローバルなコンストラクタとかあったらそれはいつ呼ばれるんだろうって。


224:デフォルトの名無しさん
08/07/21 23:31:59
継承かガベージコレクトじゃね?

225:デフォルトの名無しさん
08/07/22 00:54:53
>>223
もう一度良く考えてみろ。どうにもならないことはない。単にリンカがどうするかというだけのことだ。
しかし、万人が納得する解法は無いという事も、ここからわかる。

226:デフォルトの名無しさん
08/07/24 20:18:47
Squirrel3.0alpha1リリースあげ

227:デフォルトの名無しさん
08/07/25 08:35:19
イラネ

228:デフォルトの名無しさん
08/08/02 19:26:37
hoshu

229:デフォルトの名無しさん
08/08/03 06:02:10
squirrelでsq_compile()を行うとプロシージャが一つ返ってきますが、
このプロシージャは何を表しているのでしょうか?
たえば、コンパイル元のファイルが、

function foo()
{
print("foo");
}

function bar()
{
print("bar");
}

の場合、sq_compile()が返すプロシージャはこの2つの内の一つなんでしょうか?


230:デフォルトの名無しさん
08/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
08/08/03 13:22:55
>>230
解説ありがとうございました。おかげで理解できたような気がします。
説明をふまえて、マニュアルにあらためて目を通すと、

function ciao(a, b, c)
{
}



this.ciao <- function(a, b, c)
{
}

と等価であるという説明から、「sq_call()が返すのはグローバル空間に登録するクロージャ」ということがより直感的に理解できました。

#コンパイル済みのバイナリについても悩みどころだったので説明感謝です。


232:デフォルトの名無しさん
08/08/05 01:40:07
LuaとかSquirrel使ってる人って、存在しない関数・変数の検出や、
引数の数チェックってどうしてます?

実行時にはエラーになりますが、さすがに関数の引数の数間違いで
実行が止まるのは面倒ですし、
エラーが起きるコードが普段はなかなか実行されないところに
あるものだったりするとかなり面倒ですよね。。。

233:デフォルトの名無しさん
08/08/05 02:22:21
それは環境によるのでは?
ユーザーにいじらせるようなものでなければ落とした方が間違いに気付きやすくていいと思うけど


234:デフォルトの名無しさん
08/08/05 05:15:11
誰か静的型付けの組み込み言語作ってよ

235:デフォルトの名無しさん
08/08/05 12:04:09
>>232
型チェックさえしていれば引数の数チェックは必要ない。

Luaは引数の数が違っても変数が未定義でも実行は止まらない。
存在しない変数の値はnilとして続行。
実行が止まるのは、nil以外の型が必要なところにnilが来るのが原因。

236:デフォルトの名無しさん
08/08/05 23:42:07
>>233
そうですね、僕は自分しかいじらないので、エラーの時は落とすようにしてます。
ただそうしてると、Cなどであればコンパイル時にわかる型のミスなどが、
Luaだと実行してしばらくしてからでないとわからないので面倒で…

>>235
nilが入ってたまたま動作し、エラーが発見できなかった場合に
デバッグするのが大変ではありませんか?
公開する時には実行が止まらない挙動でないとまずいですが、
作っているときは「想定外の挙動」を検出するために、
型チェックと引数の数チェックは必須だと思っています。

>>234
そ・れ・だ!

237:デフォルトの名無しさん
08/08/06 02:19:38
>型チェックと引数の数チェックは必須だと思っています

個人的には厳格な静的チェックが欲しいならCで書けばいいし、
気楽にかけて初心者に教えやすく関数がファーストクラスだったりするのが
スクリプトのメリットだと思ってる

でもまー、スクリプトの用途によって違うかもね

238:デフォルトの名無しさん
08/08/06 02:27:31
なにげにsquirrelだとC++から関数通すたびに数回は引数の数チェックに
ひっかかるけど実はデバッグのための膨大な時間の浪費を回避できてたのかな

239:デフォルトの名無しさん
08/08/06 07:07:49
関数型の組み込み言語あれば面白いかも

240:デフォルトの名無しさん
08/08/06 08:30:08
lisp系ならそこそこないか

241:デフォルトの名無しさん
08/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
08/08/07 10:06:29
なんでもないです。無かったことにしてください^^

243:241
08/08/07 11:20:04
うーんやっぱ全然分かりません。

>>241みたいな例でいうと、
c++側でgameクラスのインスタンスを生成して、
そのポインタをsqplusに渡して、
sqplus側でSetMsg()だのGetMoney()だのの関数を使う

っていう、そういうことはできないんでしょうか?
なんか根本的に用途間違ってますか?

244:241
08/08/07 11:28:49
>sqplus側でSetMsg()だのGetMoney()だのの関数を使う

sqplus側で受け取ったポインタを通して
そのインスタンスのSetMsg()だのGetMoney()等のメンバ関数を使ったり
メンバ変数の操作をしたり、ということをしたい、、、
ということです。

245:デフォルトの名無しさん
08/08/07 12:06:33
もう少しマニュアルとサンプルとか見直して出直してきたほうがいいぞー

概念的にはもちろんそういうことができるが、C++ のインスタンスの情報は
squirrel 側は当然知らないので、ポインタを渡しただけでは何もできない。
呼び出し用のラッパーを squirrel の流儀で構築する必要がある。

具体的には、C++ のインスタンスは、ユーザデータ型をつかって保持し、
メソッド呼び出しは、そのインスタンスを使ってメンバ呼び出しをする
Cのラッパー関数を、ネイティブクロージャとして、そのユーザデータ型の
オブジェクトの委譲テーブルに登録することで実現する。

sqplus はこれの記述を簡易化するためのテンプレートライブラリ。
メンバメソッドの引数から自動的にラッパーを組み上げて登録してくれる。

基本的には、登録したクラスを、squirrel 側からインスタンス化して使うのが想定されてて、
C++ 側で生成したインスタンスをはめこむのは原理的にはできるはずだけど、sqplusが
それをサポートしてたかどうかは知らない。

246:デフォルトの名無しさん
08/08/07 12:30:15
つまり、C++をはじめとする静的型付言語の問題は型システムの相互運用性でありそれが組み込み言語でユーザデータを扱う際に表面化する、というわけだな。

247:デフォルトの名無しさん
08/08/07 13:29:25
>>245
SqPlus の testSqPlus2unit/test_PassByReference.cpp
にその例があるよ

248:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/08 01:38:24
>>232
動的言語はその辺は実行しろでFAだったと思いますよ。
動的言語を使用するなら、せめて全経路を走査する単体テストくらいは書けということなのでしょう。

>>245
>基本的には、登録したクラスを、squirrel 側からインスタンス化して使うのが想定されてて、
>C++ 側で生成したインスタンスをはめこむのは原理的にはできるはずだけど、sqplusが
>それをサポートしてたかどうかは知らない。

Squirrelを直に叩いていいならば、
・sq_createinstanceでコンストラクト前のオブジェクトを得る。
・sq_setinstanceupでオブジェクトのポインタをセット
・sq_setreleasehookで後始末関数を設定

で実現できると思いますが、SqPlusには相当する機能は無いんでしょうか。
この機能、無いとFactoryMethodがあるとき困るので、無い事は無いと思うんですが…

250:デフォルトの名無しさん
08/08/08 02:42:19
>>215

251:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/12 18:06:52
お前らちょっと聞いてくれよ Squirrelなんだけどさ、


class Foo
{
val = [];
}

ってプロパティを空配列で初期化したんだけどさ、これ、インスタンス毎に
空配列を作成するんじゃなくて、インスタンス間で同じ空配列を参照するんだね。

わかんなくて3時間くらいはまったよ。なんだよもうOTL


253:デフォルトの名無しさん
08/08/12 18:41:53
うむ。みんなが通る道だ。クラス中で定義した値は、インスタンス生成時に
毎回実行されるわけじゃなくて、単にコピーされるんでそういう挙動になるようだ。
ってことで、配列と辞書はコンストラクタで初期化するのが基本。

ちなみに全部同じ空配列を参照するから、クラス変数的に使えたりする。

254:デフォルトの名無しさん
08/08/17 10:46:09
Luaのgeneric for文って、引数の個数を柔軟に扱うというLuaの特徴を生かしているのだね。

255:デフォルトの名無しさん
08/08/17 15:43:02
くわしく

256:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/17 20:18:21
>>256
なんかやたら抽象的なコードが出てきたと思ったら、
リファレンスマニュアルから引用してるのか。
URLリンク(sugarpot.sakura.ne.jp)

258:デフォルトの名無しさん
08/08/17 22:02:49
Programming in Luaにも同じコードがある。日本語訳は無いみたい。
URLリンク(www.lua.org)

259:デフォルトの名無しさん
08/08/21 23:59:39
何かよく分からないけどCからLuaに何かさせたい人とか向けな超入門用のテンプレ作ってるの見つけた
・Cからluaにグローバル変数を登録する の項だけ絶賛放置プレイされてるけどまあこのスレ見てるなら過去ログに書いてあるし
URLリンク(www2s.biglobe.ne.jp)

260:デフォルトの名無しさん
08/08/22 22:49:59
Lua 5.1.4
いつも通り、バグ修正のみ

261:デフォルトの名無しさん
08/08/25 00:18:07
Luaの質問です
Luaの関数の戻り値をC言語で受け取りたいのですが,どうもうまくいきません.

URLリンク(ameblo.jp)

このサイトの Luaのり付け講座2 - C++からLuaの関数を呼ぶ という部分のコードを丸写しして
実行したのですが,実行結果が

可算結果: 5 (5.000000)
減算結果: 1 (1.000000)

ではなく

可算結果: 1 (1.000000)
減算結果: 5 (5.000000)

とひっくり返ってしまってます.もしかして環境によって戻り値の返し方は違うのでしょうか?

262:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/30 14:26:16
Squirrelの話なんだけど、スレッド内でエラーが発生すると有用なメッセージ出力しないのは
仕様?

例えば、

local coro = ::newthread(
function()
{

264:デフォルトの名無しさん
08/08/30 14:28:53
ゴメン途中送信した、まとめてから書くよOTL


265:デフォルトの名無しさん
08/08/30 14:36:09
再送。

Squirrelの話なんだけどさ、スレッド内でエラーが発生すると有用なメッセージ出力しないのは
仕様?

例えば、

local coro = ::newthread(
function()
{
noindex = "";
}
);

coro.call();

ってコードを書くと、[the index doesn't exist]とだけメッセージが出力されて、スタック
トレースもcoro.call()の部分までしか表示してくれない。
実際のコードだと、noindex = "";の部分が原因だって特定するのが時間かかる。
ただのtypoの特定に時間かかってしまうと、コーディングのテンポが悪くて非常に困る。

Luaはそのあたりどうなのかな。コルーチンの内部にまで踏み込んでスタックトレース
表示してくれる?


266:デフォルトの名無しさん
08/08/30 15:50:15
おk自己解決した。
これ実際にコーディングする上では結構致命的だと思うんだが…

フォーラムに載ってた。

URLリンク(squirrel-lang.org)

2行書き換えるだけで、ちゃんとコールスタック表示してくれる。


267:デフォルトの名無しさん
08/08/30 15:57:35
sq_notifyallexceptions に SQTrue 指定するだけででない?


268:デフォルトの名無しさん
08/08/30 16:30:21
>>267
お、ほんとだ出るね。サンクス。
でもこれ指定するとtry/catchでくるんでるのにエラーハンドラ呼ばれるんだよね?
状況によっては困る気もする。

269:デフォルトの名無しさん
08/08/30 19:22:28
デフォルトのエラーハンドラはトレース表示するだけで catch の先自体はちゃんと動いてた
と思うから、あんま困ったことはなかったような記憶、だけどどうだっけか


270:デフォルトの名無しさん
08/08/30 20:02:35
>>269
例えばエラーハンドラが呼ばれたときはキャッチ失敗したということだから、深刻なエラーとして
ログ出力して終了する、という運用スタイルの時困る気がする。

運用方法変えたら良いだけかもしれないけど…
本当は小細工しなくても、コールスタックちゃんと表示してくれるのが一番
なんだけどね。

271:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/09/01 20:55:02
てきとうな英語と実証コードを送れば分かってくれるんじゃね?

273:sage
08/09/01 23:43:31
Squirrelでスレッド使うときって、
自分でVM切替えしてるの?


274:デフォルトの名無しさん
08/09/02 07:20:43
>>272
公式フォーラムでいいのかな?暇ができたらレポートすることにする。

>>273
自分が何を指すのかわからないけど、フレンドVMを使っていることを普通意識する必要はないよ。

275:デフォルトの名無しさん
08/09/03 15:08:48
SqPlusはいくつか変なところあるよ。
フォーラムに報告もたまにしてたけど、最近のリリースがけっこう前のものならとりこまれていないのかも。

276:デフォルトの名無しさん
08/09/10 01:33:04
スクエニの小さな王国はSqPlus使ってるってさ


277:デフォルトの名無しさん
08/09/10 21:12:07
>>276
これ?
Wiiウェアで始まった、スクエニの“小規模開発への挑戦”。「小さな王様と約束の国 FFCC」の開発事例
URLリンク(www.watch.impress.co.jp)


278:デフォルトの名無しさん
08/09/10 22:51:52
Squirrelに関して質問させてください。

LuaからSquirrelに移行しようかと、いろいろ試しているのですが
SquirrelにはLuaでいう require/module のような機能はないのでしょうか?

自前で用意すればできるのはわかるのですが、
Squirrelの作法として、
スクリプトファイルを機能ごとに複数に分けて管理したい場合は
通常どうするのが正しいのでしょうか?

よろしくお願いします。


279:デフォルトの名無しさん
08/09/11 00:50:24
特定のテーブルにロードすれば出来るのでは?
squirrelってsqstd_dofileとかでファイル読み込む直前でルートテーブルをプッシュしてるけど、
それをルートテーブルではなく、任意のテーブルを指定する
そうするとその任意のテーブルにデータが読み込まれる

ただし、使うときはtable.func();みたいな使い方をしなければならなくなる…のかな?
他にもデリゲートテーブルを使う方法もあるけど、これはファイルごとと言うわけにはいかないかな

というかLuaってrequire/moduleで機能ごとに分けて管理できるんだ…
そっち知らなかった…



280:デフォルトの名無しさん
08/09/11 21:52:26
>>279
返答ありがとうございます。

やはり、自前で用意する必要があるようですね。
とりあえず Lua と同じような形で
ルートテーブルに登録する形で実装してみようかと思います。

ありがとうございました。


281:デフォルトの名無しさん
08/09/11 22:27:49
>>279

>SquirrelにはLuaでいう require/module のような機能はないのでしょうか?
>スクリプトファイルを機能ごとに複数に分けて管理したい場合は

個別に管理、ということは
requireを使えば、いらなくなったスクリプトファイルとかを個別に解放できたりするんですか?


282:281
08/09/11 22:29:06
>>279じゃなくて>>278でした

283:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/09/14 12:10:26
「スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践」
ってのがでるらしい。

出版社のページみつかんなかったのであまぞん
URLリンク(www.amazon.co.jp)

286:デフォルトの名無しさん
08/09/14 12:44:58
あと二週間くらい?
発売日になったらとりあえず買ってこようと思う。

287:デフォルトの名無しさん
08/09/14 13:06:02
こういうのが何十冊も出ると買う気なくすが、Luaはまだまったりしていてよいです

288:デフォルトの名無しさん
08/09/14 13:17:53
赤坂じゃなくてよかったw

289:デフォルトの名無しさん
08/09/14 15:54:56
これか・・・

Amazon.co.jp: スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践: 浜中 誠: 本
URLリンク(www.amazon.co.jp)
URLリンク(images-jp.amazon.com)

290:デフォルトの名無しさん
08/09/14 23:06:46
CEDECでスクエニがSquirrel使ってるの話してたねー。

291:デフォルトの名無しさん
08/09/15 03:33:58
>>290
kwsk
どっかに資料とかあがってないの?

292:デフォルトの名無しさん
08/09/15 06:01:40
今さら知ったのかよ


293:デフォルトの名無しさん
08/09/19 23:15:44
SquirrelとLuaってどっちがつおいの?


294:デフォルトの名無しさん
08/09/20 01:08:36
Luaの方がこなれてるだろう

295:デフォルトの名無しさん
08/09/20 01:38:03
強さで言うとSquirrelのが強い。
悟空とべジータくらい違う。

296:デフォルトの名無しさん
08/09/20 01:48:54
Squirrelはバグだらけ。
自力で直せる環境にいないと使えない

297:デフォルトの名無しさん
08/09/20 02:09:42
LuaとCをいったりきたりすると演算子とか間違えるから
Squirrelのほうがやわらかい

298:デフォルトの名無しさん
08/09/20 02:25:07
速さと軽さならLua
基本的な演算とsuspendを行う処理を一億回ループさせたらLuaはSquirrelの1/3の時間ですんだ


299:デフォルトの名無しさん
08/09/20 02:26:59
てゆうかこのスレ張ってる奴けっこう多いんだな
散々過疎ってたのに燃料来たとたんこれかよ


300:デフォルトの名無しさん
08/09/20 09:58:58
Luaの方が愛されてる感はある

301:デフォルトの名無しさん
08/09/20 10:11:15
>>285
この辺がなんか不安、サンプルやらソースやら見れば解ることが山ほど載ってそう
>~人気スクリプト言語Lua(ルア)とC/C++のバインディング実例を詳細に解説。

302:デフォルトの名無しさん
08/09/20 10:30:39
サンプルやソース見てわかる人は買わなきゃいいだけだろw

303:デフォルトの名無しさん
08/09/20 10:46:06
サンプルの種類が増えるのは良い。延べ数ばかり増えるのは困る。

304:デフォルトの名無しさん
08/09/20 14:11:14
LuaとC/C++との連携では、Swigはあまり使わないものなんですか?

305:デフォルトの名無しさん
08/09/21 00:53:52
>>304
Lua本体に入ってない
LuaがC/C++との連携を単なるオプション扱いすることはない

ゆえに、Swigはあまり使わない

306:デフォルトの名無しさん
08/09/21 02:11:53
>>291

一応、CEDECのサイトで講演に使ったパワポがpdfでアップされてたんだけど、
これ会員以外に流すとなんかやばそうな・・・

まぁいろいろ言ってたよ。
コード全体の7割はSquirrelとかallocが多いのでメモリまわりの工夫をしたとか。

実際このゲームプレイしたけど、Wii環境であれだけ動いていれば、まぁ実践レベルには十分達しているといえるだろうね

307:デフォルトの名無しさん
08/09/21 02:15:41
つか、スクエニの開発スタッフ、このスレたまにはチェックしてると思う。
2chにここしかSquirrelのスレないんだもん。

クレっていったら資料くれそうな気もする

308:304
08/09/21 22:00:07
>>305
なるほど、サンクスです。「入門Luaプログラミング」を読んだんですが、
C++との連携方法がいまいち良く分からなかったので(SquirrelだとSqPlus?)、
>>285の本を見て勉強することにしてみます。

309:デフォルトの名無しさん
08/09/21 22:29:12
今週末か。レビューよろ

310:デフォルトの名無しさん
08/09/21 23:13:07
既出の質問かも知れませんが…。
CからLua関数をコールするときは、関数名、引数をスタックに積んで行うと思います。
これを以下のようにコールするのって、副作用とか問題点って何かありますか?
(実行速度とか)

sprintf( strCmd, "return add( %f, %f )", a, b );
luaL_dostring( L, strCmd );


311:デフォルトの名無しさん
08/09/21 23:34:49
速度なら試して比較すりゃいいんでないの?

312:デフォルトの名無しさん
08/09/23 14:16:38
ものすごくループする所で使うんじゃなければそんなに問題ないよ。
スタック積むのめんどくさい時はたまにやってしまう。

313:デフォルトの名無しさん
08/09/23 20:28:26
310です。
速度低下と実数が桁落ちするデメリットはすぐに分かるのですが、
マニュアルにある"tail call"形式にする影響が少々心配でした。
アドバイスありがとうございました。




314:デフォルトの名無しさん
08/09/24 15:53:01
Luaってバインダの決定版っぽいのが無い感じだけど(Activeじゃないのが多い気がする)、
皆なに使ってる?自作してるのかな?


315:デフォルトの名無しさん
08/09/24 22:18:38
Squirrel 2.2.2 stable - September 24, 2008

-fixed some behaviour inconsistencies in thread.call() and thread.wakeup() (thx Mr.Accident)
-fixed coroutine error propagation
-fixed lingering return value from native function (thx Tom Leonard)
-fixed a bug if array.sort() is given a bad sort function (thx Tom Leonard)
-fixed some minor api bug
-added sq_arrayremove() and sq_arrayinsert()

316:デフォルトの名無しさん
08/09/27 08:49:30
>>314
漏れはバインダなんてイラン派

317:デフォルトの名無しさん
08/09/30 09:20:05
>>285って誰か買った?
どっかで見てから買いたかったんだけど売ってない。
よさげor誰も買ってないならamazonで買おうかと。誰か買ってたら感想よろ

318:デフォルトの名無しさん
08/09/30 10:06:28
>>317
>ご注文いただいた商品の配送予定日がまだ確定しておりません。
<中略>
>継続して商品の調達に努めてまいりますが、調達不能な場合または入荷数の関係上キャンセルをさせていただくこともございます。

報告するようじゃないけど、初めてkonozamaメール貰った。\(^o^)/



319:317
08/09/30 15:07:52
konozama食らうくらいなら探すべ、と思ったらヨドにあったんで買った。
結構いろいろ書いてあるっぽいんで楽しみ。

320:デフォルトの名無しさん
08/09/30 15:48:15
おれもさっきこうてきた
大学の書店に普通においてあったよ


321:デフォルトの名無しさん
08/09/30 17:11:38
参考Webサイトにこのスレがwww

322:デフォルトの名無しさん
08/09/30 17:23:42
記念ぱぴこ

オール・ハイル・ぅあ!

323:デフォルトの名無しさん
08/09/30 19:18:24
bccで使う方法がようわからんのだけど

324:デフォルトの名無しさん
08/09/30 23:25:37
bcc用のlib付属してないんだっけ。
bccについてるimplibでdllからlibファイル吐かせてリンクすればいけんじゃね?

何がわからんのだかわからんから適当言ってるが、的外れなこと言ってたらスマン

325:デフォルトの名無しさん
08/10/01 02:25:52
つーかBCBならともかくbccなんざ捨てろ

326:デフォルトの名無しさん
08/10/01 09:14:48
そしてIDEだけ残ると

327:デフォルトの名無しさん
08/10/01 16:14:35
vcのexpressあるからなあ。
無料で使えるってことで以前は定番だったけども。

328:デフォルトの名無しさん
08/10/02 09:11:38
無職なのに、欲望に負けて>>285の本を買ってしまった…orz。
C/C++とのバインディングは、パッと見でtolua++とかいうのを使っているみたい。

329:デフォルトの名無しさん
08/10/03 23:03:56
今のうちにgoluaを登録商標にしとかないと

330:デフォルトの名無しさん
08/10/04 11:09:33
自作のLuaラッパにApolloって名づけようとしたけど
RubyのDelphiバインディングに使われていた

331:デフォルトの名無しさん
08/10/04 11:36:59
「バインダ」てyaccと同じにおいがする
使うと勝ち組になれるような気がするぜ

332:デフォルトの名無しさん
08/10/04 14:04:24
amazonからやっと本が届いた
tolua++便利だな
まだ使っても無いけど

333:デフォルトの名無しさん
08/10/04 18:27:26
またLua入門売り切れてる
URLリンク(www.amazon.co.jp)

334:デフォルトの名無しさん
08/10/04 22:41:43
lua最高!

335:デフォルトの名無しさん
08/10/05 01:25:06
luaはAlgol系schemeのうまくいった例という感じがする

336:デフォルトの名無しさん
08/10/06 08:29:45
DSのLuaってどうよ?

337:デフォルトの名無しさん
08/10/06 11:28:58
>>285の本のサンプルダウンロードサイトって落ちてるのかな?
tolua++のソースとかSDLとかSConsとかダウンロードしたいやつが結構ある。
できればCD-ROM付きの方が良かったかも…。

338:デフォルトの名無しさん
08/10/06 14:05:06
落ちてるっぽいな。
まあCD-ROMは邪魔だわ更新されないわで嫌いだから気長に待つが。

339:デフォルトの名無しさん
08/10/06 20:23:00
lua5_1_3_Win32_mbenc.zip にコンパイル済みの lua5.1.lib が入ってないと
81ページ付近で少し困るような気がする。

ついでに59ページ。counry

340:337
08/10/06 22:52:20
なんかサイトがダウンしてたみたいで、いろいろダウンロードできた。
4章まで読んだところでは、4.10のLuaの文法:クラスのところが、Lua入門の方で
よく分からなかったとこなんで役に立ったかも。
5章から手動かしながら読んでくべ。

341:デフォルトの名無しさん
08/10/08 23:26:54
Lua最高!

342:デフォルトの名無しさん
08/10/10 02:24:17
Lua melhor!

343:デフォルトの名無しさん
08/10/11 09:13:45
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ Lua!!
 彡、   |∪|  /
/ __  ヽノ /
(___)   



344:デフォルトの名無しさん
08/10/11 18:21:28
クマでもわかるLuaプログラミング 第5版

345:デフォルトの名無しさん
08/10/11 19:09:26
スクリプト言語 Kuma

346:デフォルトの名無しさん
08/10/11 19:20:07
Kumaで書かれた>>343のスクリプトを実行すると「(_●_)Lua!!」と表示されます

347:デフォルトの名無しさん
08/10/11 20:00:24
ぅぁあああ!

348:デフォルトの名無しさん
08/10/11 20:52:59
インタプリタ書いてみた
io.open(arg[1]):read("*a"):gsub(([[
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ KUMA
 彡、   |∪|  /
/ __  ヽノ /
(___)]]):gsub("[^%a]","%%%1"):gsub("KUMA","(.-)"),
function(s)io.write("(_●_)",s,"\n")end)

349:デフォルトの名無しさん
08/10/12 08:47:37
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ Lua!!
 彡、   |∪|  /
/ __  ヽノ /
(___)   




350:デフォルトの名無しさん
08/10/12 11:17:47
なんだクマスレか

351:デフォルトの名無しさん
08/10/12 14:08:31
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ Lua!!
 彡、   |∪|  /
/ _ヽ  ヽノ ノ/
(___)\/ 
  Urso de lua 「和名: ゥアノワグマ」

352:デフォルトの名無しさん
08/10/12 15:11:20
さすがにうざいだろこれは…

353:デフォルトの名無しさん
08/10/12 15:53:21
他に話題も無いしなあ

354:デフォルトの名無しさん
08/10/12 18:57:56
つ翻訳

355:デフォルトの名無しさん
08/10/13 19:16:01
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ Lua!!
 彡、   |∪|  /
/ __  ヽノ /
(___)   


356:デフォルトの名無しさん
08/10/13 20:58:57
Lua 5.2とか機能追加候補とか。
URLリンク(lua-users.org)
URLリンク(lua-users.org)

個人的にはHash計算しない文字列(バッファ目的)とか
標準にほしいような。LuaSocketとかでそれなりのサイズの
通信行うと、ゴミがたまるので精神衛生上良くない。


357:デフォルトの名無しさん
08/10/13 21:50:07
そういう部分は後で少しずつCで書き直すわけにはいかないのかな
CとLuaの比率をなめらかに変化させるのが理想的だと思う

358:デフォルトの名無しさん
08/10/14 23:07:14
ところでここはAngelScriptやGameMonkeyの話題はOKなの?

359:デフォルトの名無しさん
08/10/14 23:24:21
組み込み系言語総合だからおk

360:デフォルトの名無しさん
08/10/15 00:36:47
やたら懐かしい名前が出てきたなw

361:デフォルトの名無しさん
08/10/15 01:44:37
AngelScript使っているひといないの?
結構良さそうなんだけど

362:デフォルトの名無しさん
08/10/15 01:53:26

        (´\r-、     ┼         +     /`/`)    +
     ┼   (\. \!              *     // ,/)  *
  +     * (ヽ、   \ +  *          /   /)   +
      ⊂ニ      )        *   +  (     ニ⊃
  *  +  ⊂、     (   ∩___∩   ノ     ⊃   +  *
         (/(/   ヽ  | ノ     ヽ /    、)ヽ)  ┼
    +        (/ (⌒ヽ. ∨  ●   ●レ /⌒) 、)ヽ)
     *       (/'\ \|   ( _●_) ミ'  /、)、)´       +
         +      `ヽ彡、   |∪| ノ /    Lua!!
     +            〉    ヽノ  /  *      +
       ┼        /      /      +
           +     /    /\ \   *        +
  +         *  /  / ┼ )  )       +
            / / +  (   \          *
    *     +   (_/      *   \_丿   ┼

363:デフォルトの名無しさん
08/10/15 02:56:46
流れぶった切るが
ゲーム系で問題になるluaのreallocの問題って
 1) OSのreallocは排他等高コスト
 2) 拡張時のコピーが高くつく
 3) メモリ断片化
のどれだろう。また、その代替案として以下は正しい?
1) 2)
=>インタフェース変えずにカスタムlua_Alloc作成だけでOK?
3)
=>stl::vector ->stl::dequeみたいに配列サイズ追加しても
allocが呼ばれない配列管理に変更


364:デフォルトの名無しさん
08/10/15 03:07:13
>>361
あー、おれも興味あるんだ
文体C++風味で型の扱いが静的というところに魅かれる



365:363
08/10/15 03:08:37
ちょい修正
1)
=>インタフェース変えずにカスタムlua_Alloc作成だけでOK?
2) 3)
=> 配列サイズ増加時にallocは呼ぶが、stl::deque
のような再配置をなくした配列管理にし、また、追加される
メモリブロックは固定長に出来るので固定長メモリアロケーター
で済む。故にメモリ断片化が防げる。

366:デフォルトの名無しさん
08/10/15 05:05:38
>>363
ここで聞くほど問題が見当たらないなら
 4) そもそも実は問題ない
という結論にならないかね?

malloc/free が OK で realloc がダメとかおかしいだろ、普通に考えて。

367:デフォルトの名無しさん
08/10/15 18:05:36
AngelScriptはC++みたいで個人的に大好きなんだが漠然と遅い気がする。
まぁちょろいテストアプリを作っただけなんで作り込んだらいい線いくかもしれないが。

368:デフォルトの名無しさん
08/10/15 18:48:39
何だかんだで速度が気になってLuaに戻って来ちゃうんだよなあ。
PythonとかRubyとかちょっと組み込んでみたいんだけども。

369:363
08/10/15 20:32:14
反応薄いな。366の言うとおり実は問題にしてる人少ない?

本当にリサイズが発生するのって配列サイズの増加と
テーブルのハッシュ再計算時と文字列結合ぐらい?
lua自身の配列サイズの増加も倍々方式だし、realloc自体も
同様の最適化されてるので、コピーはそんなに発生しない。

ある程度の大きさのランダムアクセス配列が必要なら、
配列サイズの事前割り当ても可能だし、配列自体の
使いまわしも出来る。

ガベコレはだめだ、参照カウンタがいいってんなら理解できるが。

370:デフォルトの名無しさん
08/10/15 21:22:06
そもそもシビアなゲームとかならalloc呼び出す、みたいな設計はしない。

371:デフォルトの名無しさん
08/10/16 02:28:44
AngelScriptはホスト側のインターフェイスは好みなんだけどなあ・・

372:デフォルトの名無しさん
08/10/16 02:34:17
AngelScriptにはJITみたいなのないの?

373:デフォルトの名無しさん
08/10/16 20:54:50
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ Lua!!
 彡、   |∪|  /
/ __  ヽノ /
(___)   


374:デフォルトの名無しさん
08/10/18 10:50:51

どなたか教えてください。


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の関数に渡せるの?

375:デフォルトの名無しさん
08/10/18 11:33:42
>>374
lua_pushlightuserdata()
メンバ変数をLua側に公開するなら他にも色々必要だろうけど

376:デフォルトの名無しさん
08/10/18 15:46:17
>>375
ありがとうございます
色々って、たとえばアクセス用の関数を準備するとかですか?
ほかになにか手はありますかね。

377:デフォルトの名無しさん
08/10/18 22:31:06
>>376
その関数とデータを一つのテーブルにまとめるとか
メタテーブルを使うとか

メタテーブルの説明はマニュアルにある
何に使うかは自由

378:デフォルトの名無しさん
08/10/21 10:50:36
SQDEVでSquirrelの自作スクリプト&プログラムのデバッグをやってるんだが、
SquirrelスクリプトにSJISの文字列リテラルを書いてたら
Eclipseで毎回コンパイルエラーがでるのは俺だけ?

Eclipseの起動前にスクリプトを一時的に削除したりして面倒。
デバッグ用に動かす分には問題ないっぽいんだが。
\

379:デフォルトの名無しさん
08/10/21 15:56:12
ヒント:SJIS

380:378
08/10/21 18:22:22
>>379
今確認したが、UTF-8でスクリプトを用意して
bin/squでシンタクスチェックをさせるようにしても、
やはり日本語のリテラル部分でEclipseのエラーメッセージが表示される。
(もちろんsqu -c では問題なし)

381:デフォルトの名無しさん
08/10/22 07:47:34
ヒント:UTF-8

382:デフォルトの名無しさん
08/10/22 12:58:16
Eclipseスレでどうぞ

383:デフォルトの名無しさん
08/10/22 21:17:49
とりあえず、SQ-DEVでインストールの仕方を教えてくれ、うまくいかない。

384:378
08/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ページの通りでよい

385:デフォルトの名無しさん
08/10/25 17:03:25
ヒント:UTF-16LE/BE

386:デフォルトの名無しさん
08/10/25 19:14:16
まず、素のSquirrelはマルチバイド考慮してない
本体のコンパイル時にUNICODE対応させるオプションがある。
内部のUNICODE=UTF-16

だけど確か、読み込み時に標準ライブラリを使ってロードする時はいくつかのUNICODEに対応していたはず、
(UTF-8N,UTF-16のLE,BEあたりだったような)
この辺はソース読んでみて、確かめてみて簡単だから

387:378
08/10/25 20:10:22
>>386
Squirrelソース本体はまさにその通りですね。どうもありがとう。

ところがSQDEVに関しては、どうやらSQDEV自体でSquirrelスクリプトの構文解析をやってるっぽいんだ。
(pluginのJavaソースコードを入手して眺めてみた)

このJavaで独自に実装された構文解析器で文法チェックしてるのか、
SQDEVのオプションで指定するインタプリタで文法チェックさせてるのかはまだ調べてない。

残念ながら俺はJava界隈はあまり詳しくないので、どう直したらSJIS対応の構文解析器に改造できるのかがわからん。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch