【Lua】組み込み系言語総合【Squirrel】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/03/11(火) 13:02:21使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/
その他の参考URLは>2から
■過去スレ
その3 http://pc11.2ch.net/test/read.cgi/tech/1160799232/ (前スレ)
その2 http://pc8.2ch.net/test/read.cgi/tech/1063711237/
その1 http://pc5.2ch.net/tech/kako/1034/10341/1034182349.html
0002デフォルトの名無しさん
2008/03/11(火) 13:02:49Io Language
http://pc11.2ch.net/test/read.cgi/tech/1201100624/
2 part forth
http://pc11.2ch.net/test/read.cgi/tech/1073673931/
●●●●TCL/TKなら俺に聞け 2●●●●
http://pc11.2ch.net/test/read.cgi/tech/1177998764/
ECMAScript デス 3
http://pc11.2ch.net/test/read.cgi/tech/1190160481/
各種ライブラリ紹介スレ2(ゲ制作)
http://pc11.2ch.net/test/read.cgi/gamedev/1177886529/
【Perl,PHP】LLバトルロワイヤル【Ruby,Python】
http://pc11.2ch.net/test/read.cgi/tech/1188997302/
「コンパイラ・スクリプトエンジン」相談室12
http://pc11.2ch.net/test/read.cgi/tech/1188688416/
Garbage Collection (GC)について語るスレ
http://pc11.2ch.net/test/read.cgi/tech/1141646850/
0003デフォルトの名無しさん
2008/03/11(火) 13:03:54■Lua
ttp://www.lua.org/ (本家)
ttp://lua-users.org/ (lua-users)
ttp://luaforge.net/ (LuaForge)
ttp://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html(5.1マニュアル和訳)
Lua言語の紹介
ttp://staff.aist.go.jp/yutaka.ueno/lua/docsjp.html
入門Luaプログラミング
ttp://www.amazon.co.jp/dp/4797342722/
■Squirrel
ttp://www.squirrel-lang.org/ (本家)
ttp://sourceforge.net/projects/squirrel/
ttp://sourceforge.net/projects/sqplus/ (SqPlus)
ttp://sourceforge.net/projects/squirrelsh/ (Squirrel Shell)
ttp://wikiwiki.jp/lua/?Squirrel_Lang%2Ftoc(wiki内2.1マニュアル和訳)
0004デフォルトの名無しさん
2008/03/11(火) 13:05:27The Pawn language(だれも使ってなさそうな、組み込み言語)
ttp://www.compuphase.com/pawn/pawn.htm
NullLogic Embedded Scripting Language
ttp://sourceforge.net/projects/nesla/
Xtal(ゲーム向け。スタックを意識しなくていい?)
ttp://d.hatena.ne.jp/xtalco/
ttp://code.google.com/p/xtal-language/
ttp://blog.livedoor.jp/dankogai/archives/50836939.html
※テンプレ以上※
0005デフォルトの名無しさん
2008/03/11(火) 15:59:210006デフォルトの名無しさん
2008/03/11(火) 16:07:260007デフォルトの名無しさん
2008/03/11(火) 16:40:28return 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})
0008デフォルトの名無しさん
2008/03/11(火) 17:10:27なんでTCLなの?
組み込みのIDEとかでよく使われてるけど
0009デフォルトの名無しさん
2008/03/11(火) 18:47:390010デフォルトの名無しさん
2008/03/11(火) 21:17:18Perlはさすがにやったことないが、できないこともないだろう。
0011デフォルトの名無しさん
2008/03/11(火) 22:39:02組込みに向いてるってのはコードサイズまたは外部への依存の少なさと
言語機能のバランスが取れてるって意味にではないのかと。
0012デフォルトの名無しさん
2008/03/12(水) 01:23:20そういう比較的大きな言語の組みこみの話も
多少は許容することが前スレで同意されていたはず。
でも一応Luaスレの続きだからその辺は空気読んでねと。
0013デフォルトの名無しさん
2008/03/12(水) 01:25:10>>1 乙curry
0014デフォルトの名無しさん
2008/03/12(水) 06:04:560015デフォルトの名無しさん
2008/03/12(水) 11:24:25二年前からのスレだから当然かwww
0016デフォルトの名無しさん
2008/03/12(水) 11:48:00LuaのGCはマーク&スィープ方式を組み込み言語向けに改良したインクリメンタル方式。
SquirrelのGCは参照カウント方式。
マーク&スィープ方式の欠点:
GCの処理に時間がかかるとハングアップした感じになる。その欠点を克服すべく、
少しづつ分割してGCの処理を行う(インクリメンタル方式)、
マルチスレッドで平行してGCの処理を行う、などの進化型が現在の主流。
参照カウント方式の欠点:
参照カウンタの更新処理によるオーベーヘッドにより処理速度が低下する。
循環参照への対処が必要になる。
過去の方式である感は否めない。
0017デフォルトの名無しさん
2008/03/12(水) 12:41:27GCの比較は余計なお世話というのが前スレの結論じゃなかったか?
0018デフォルトの名無しさん
2008/03/12(水) 12:50:09[名](複 〜s, 1で((集合的))〜)
1 《動》リス:肉は食用になる.
2 [U]リス類の肉[毛皮].
3 ((米俗))変なやつ. ━━[動](〜ed, 〜・ing;((英))〜
0019デフォルトの名無しさん
2008/03/12(水) 13:34:15/ \ /\ キリッ
. / (ー) (ー)\
/ ⌒(__人__)⌒ \ <過去の方式である感は否めない。
| |r┬-| |
\ `ー'´ /
ノ \
/´ ヽ
| l \
ヽ -一''''''"〜〜``'ー--、 -一'''''''ー-、.
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
____
/_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ だっておwwwwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)
| / / / |r┬-| | (⌒)/ / / //
| :::::::::::(⌒) | | | / ゝ :::::::::::/
| ノ | | | \ / ) /
ヽ / `ー'´ ヽ / /
| | l||l 从人 l||l l||l 从人 l||l バ
ヽ -一''''''"〜〜``'ー--、 -一'''''''ー-、 ン
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) バ
ン
0020デフォルトの名無しさん
2008/03/12(水) 14:28:03欧米じゃリスを食うのか…
0021デフォルトの名無しさん
2008/03/12(水) 15:27:030022デフォルトの名無しさん
2008/03/14(金) 19:35:260023デフォルトの名無しさん
2008/03/19(水) 07:50:550024デフォルトの名無しさん
2008/03/20(木) 12:59:11local 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
こうなっちゃうのうちだけでしょうか?
0025デフォルトの名無しさん
2008/03/20(木) 16:05:190026デフォルトの名無しさん
2008/03/20(木) 17:56:02Squirrel書いたことないので見当違いしてたらごめん
0027デフォルトの名無しさん
2008/03/20(木) 19:55:260028デフォルトの名無しさん
2008/03/20(木) 20:55:19>>26さんの言うように最後までマッチするはずなんですよ
秀丸と、Luaで試してみましたが最後までマッチします。
>>25さんのところでも同じ結果がでますか?
うちで何か失敗してるのかなぁ?
0029デフォルトの名無しさん
2008/03/21(金) 13:54:40不満なら直すか、他から持ってくるしかないんじゃなかろうか。
0030デフォルトの名無しさん
2008/03/21(金) 14:28:25ab
で終了だろw
0031デフォルトの名無しさん
2008/03/21(金) 14:35:24* は 0 個もありだよな
ってことで、バグ認定でいいんでね?
0032デフォルトの名無しさん
2008/03/21(金) 22:11:460033デフォルトの名無しさん
2008/03/21(金) 22:33:32ありがとうございます
どうもバグみたいですね
英語苦手だけど、なんとかレポート送っときます
0034デフォルトの名無しさん
2008/03/22(土) 17:43:400035デフォルトの名無しさん
2008/03/31(月) 20:28:400036デフォルトの名無しさん
2008/04/02(水) 00:55:25swig + lua の組み合わせを最近多用している。
luaからswigで公開する型や関数のメタ情報を取得ってできる?
例えば関数の引数や戻り値の型名とか。
構造体のメンバ変数の一覧ならメタテーブル経由で取得できるけど。
0037デフォルトの名無しさん
2008/04/06(日) 18:28:21luaは動的言語だから、戻り値や引数の型の分からんでしょう。
型は変数じゃなくて、値にくっついてる。
0038デフォルトの名無しさん
2008/04/07(月) 02:55:50辺りだけ組み込んで、最小構成にするとどれだけ小さくなりますか?
100kByte以下とかできる?(linuxのELFで)
0039デフォルトの名無しさん
2008/04/07(月) 10:05:330040デフォルトの名無しさん
2008/04/07(月) 17:48:010041デフォルトの名無しさん
2008/04/08(火) 01:21:25ICEとかじゃだめなの?言語に依存する内容じゃないように思うけど・・・
0042デフォルトの名無しさん
2008/04/08(火) 01:41:170043デフォルトの名無しさん
2008/04/08(火) 02:00:170044デフォルトの名無しさん
2008/04/08(火) 08:50:27004540
2008/04/08(火) 20:26:03ヴィジュアルデバッグは造語かもしれません。
GDBじゃないVisualStudioのような環境のことを指しています。
あと、「組み込み」は小型機器への組み込みではなく、
C++プログラムに対する組み込みの意味です。
いろいろ、すみません。
>>43
その組み合わせは非常に使えそうなので、ちょっと試してみます。
ありがとうございました。
0046デフォルトの名無しさん
2008/04/08(火) 23:53:240048デフォルトの名無しさん
2008/04/12(土) 22:34:43は作れますか?
0049デフォルトの名無しさん
2008/04/13(日) 02:03:48char 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から呼ぶ方法がわかんない。
0050デフォルトの名無しさん
2008/04/14(月) 01:20:39scite-debugを使えば、C/Luaプログラムを同じ環境でデバッグできるはず
使ったこと無いけど
0051デフォルトの名無しさん
2008/04/15(火) 23:22:53luaから乗り換えた。
つか作者はドキュメント整備してくれんかのぉ。
0052デフォルトの名無しさん
2008/04/15(火) 23:24:02マニュアル嫁
0053デフォルトの名無しさん
2008/04/16(水) 09:57:040054デフォルトの名無しさん
2008/04/16(水) 12:28:27ゲーム重視だからパフォーマンス重視なんだろうけれども。
Xtalはお手軽に制御構文が書けてかつパフォーマンス重視ってところがいいのかな?
0055デフォルトの名無しさん
2008/04/16(水) 21:36:25ちょまて Xtalってバーチャルマシンがスレッドセーフでできてんのか?
0056デフォルトの名無しさん
2008/04/18(金) 09:32:440057デフォルトの名無しさん
2008/04/18(金) 10:52:19005856
2008/04/18(金) 11:05:190059デフォルトの名無しさん
2008/04/18(金) 20:29:27たしか、naughty dogがlispなんだよね
0060デフォルトの名無しさん
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が呼び出されたときにポインタにキャストするようになっています。
何かいい方法はないでしょうか? もしくはセオリーなどを教えていただけませんか?
0061デフォルトの名無しさん
2008/04/21(月) 03:12:370062デフォルトの名無しさん
2008/04/21(月) 03:13:140063デフォルトの名無しさん
2008/04/21(月) 03:19:010064デフォルトの名無しさん
2008/04/21(月) 08:12:31スタック操作で単純にミスしてるだけな気がするよう。
0065デフォルトの名無しさん
2008/04/21(月) 11:04:50オブジェクトをIDで管理すればポインタを持たなくても
IDでやり取りできるんじゃない?
0066デフォルトの名無しさん
2008/04/21(月) 19:30:36そのC++オブジェクトをSquirrelのオブジェクトとして登録してみるのは?
0067デフォルトの名無しさん
2008/04/22(火) 08:12:100068デフォルトの名無しさん
2008/04/22(火) 11:19:04まあ正直聞いててスクリプトでやるようなことじゃないと思ったわ
0069デフォルトの名無しさん
2008/04/22(火) 22:55:42スタック操作確認して怪しいところ修正したら動きました。
本当にありがとうございました…。
>>65
次改造するときに試してみます。
>66
そんなこと出来るのでしょうか? Squirrelのクラスについてもう少し学んでみようと思います。
>68
たしかにそうかもしれません…。
0070デフォルトの名無しさん
2008/04/22(火) 22:57:50こんなんはどう?
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;
}
0071デフォルトの名無しさん
2008/04/23(水) 19:09:00ホストのポインタをvm内に格納するばあい
userpointer型を使うとかsqclassのインスタンスにsq_setinstanceupするのが適当
0072デフォルトの名無しさん
2008/04/24(木) 02:39:32luaスクリプトからコールバックを登録して、Cから適宜呼び出す、ということをしたいのですが。
0073デフォルトの名無しさん
2008/04/24(木) 08:27:31LuaのC APIを使って、Lua VM内のグローバルにある関数を(値として)スタックに積むことはできる
スタックに積まれた関数をLuaのC APIから実行することはできる
でOK?
この手の話題ってC側なのかLua側なのか、表現が難しいな。
上のSquirrelのやつもそうだが
007472
2008/04/24(木) 16:15:42ありがとうございます。Cの値として保持しておくことはできないんですよね。
それだと、Luaから渡された関数を適当なタイミングで呼びだすには、
関数を一旦スタックの深いところに置いておいて、必要な時にインデックスを使って呼び出す、という形になるのかな…。
0075デフォルトの名無しさん
2008/04/24(木) 17:42:07LuaからCに関数名を渡せばあとでCのほうから探索できる。
関数を保持しとくのは無理かな、たぶん。
0076デフォルトの名無しさん
2008/04/24(木) 20:17:040077デフォルトの名無しさん
2008/04/24(木) 22:39:23それが一番質問者の期待しているものに近そう。
75に似た方法で呼び出す関数名を決め撃ちするのもあり。
0079デフォルトの名無しさん
2008/04/28(月) 09:10:05リファレンスなどを読んだ感じだとsq_readclosure()辺りを使うのかと思ったのですが資料をあまり見つけることができませんでした。
0080デフォルトの名無しさん
2008/04/29(火) 15:57:18ソースを読めばいいじゃない。
そこらのライブラリとかスクリプトのような聞き方をされると違和感をおぼえてしまう。
0081デフォルトの名無しさん
2008/04/30(水) 08:25:130082デフォルトの名無しさん
2008/04/30(水) 09:27:07ソース読むのが妥当な場面だもの
0083デフォルトの名無しさん
2008/04/30(水) 11:59:05ある意味最狂
0084デフォルトの名無しさん
2008/04/30(水) 12:31:55というのは、容易に推察できることではある。
アホくさいけど。
0085デフォルトの名無しさん
2008/04/30(水) 13:30:40最近は面倒になりそうなのは全部自分で調べろって投げ捨てるよな
0086デフォルトの名無しさん
2008/04/30(水) 13:44:350087デフォルトの名無しさん
2008/04/30(水) 13:45:520088デフォルトの名無しさん
2008/04/30(水) 14:14:23無理矢理三つ巴と思い込む暇があったら
ソースでも読んでた方がいいと思うよ。
0089デフォルトの名無しさん
2008/04/30(水) 16:55:550090デフォルトの名無しさん
2008/04/30(水) 17:32:110091デフォルトの名無しさん
2008/04/30(水) 17:39:41アホなレス繰り返してる馬鹿のレベルが低いんだもの。
まぁ、読めないから回答者に喰いついてるんだろうね。
質問者は社会常識を身につけてから出直しておいで。
自分の立場を弁える常識は必要だよ?学生君。
0092デフォルトの名無しさん
2008/04/30(水) 18:16:200093デフォルトの名無しさん
2008/04/30(水) 18:24:36【このスレは”質問スレ”ではありません】
ソースを読めば素晴らしい回答があります。
何時間掛かるかも分りませんが、まずはすべてのソースを読み理解する頃には質問の内容も解決している事でしょう。
また質問者は立場をわきまえ、回答者を崇めること。
このスレは雑談スレか
0094デフォルトの名無しさん
2008/04/30(水) 19:35:46あらかじめ変数に読み込んでおいてというのは、
ファイル開いてファイルサイズ分メモリを確保して、そこにreadするということか?
それでそのバッファのポインタを渡して読み込ませたいってこと?
009579
2008/05/01(木) 02:06:38>>80
とりあえずソース読んで分からなかったらまた尋ねるかもしれません。
>>94
94さんの言うとおりファイルサイズ分メモリを確保しておいて、そこにファイルを読み込ませ、そのメモリからオブジェクトにデータをロードさせようと
思っています(do_fileやload_fileなどを使うといちいちファイルにアクセスして負荷がかかるため)。
現在はchar*にスクリプトを読み込ませておいて、オブジェクト生成時にコンパイルしていたのですが、
コンパイルにかかる負荷がバカに出来ないと考え「コンパイル済」のスクリプトをメモリに保存しておいて運用したかったのでその方法を質問させていただきました。
0096デフォルトの名無しさん
2008/05/01(木) 03:37:06ttp://wikiwiki.jp/lua/?Squirrel か もんしょの巣穴っていう個人さんのサイトに解説あった気がする。
違ったらヘッダをcompで検索すれば出てくると思う。
眠いからこれ以上は書けないZzzz
0097デフォルトの名無しさん
2008/05/01(木) 03:41:20役に立てないZzzz
0098デフォルトの名無しさん
2008/05/01(木) 11:25:290099デフォルトの名無しさん
2008/05/01(木) 12:14:36sq_readclosureでよさそうだけど解説があまりないから
断片的な情報とソースから推測するしかないって感じかな。
ソースはsqstdio.cppにあるsqstd_loadfileの実装が参考になりそう。
ところでsqstd_loadfileは関数を評価せずにスタックに
積むだけみたいだから、その参照を保持しておくだけで
用が足りたりしないのかな。
0100デフォルトの名無しさん
2008/05/02(金) 01:18:42Lua側の関数に引き渡した0xFFFFFFFFってリテラルが、C側からlua_tonumberで取ってくると0で返却されるのは既知?
さらに、0xFF00FFFF -> 0xFF010000なんて取れてきたりする。
どうもVC8だと起こるらしくて、gcc系だと引き渡したリテラルが正しく取れるんだけどなぁ。
010179
2008/05/02(金) 02:27:06sqstd_loadfileの中には外部から読み込んだファイルがバイナリであるかテキストであるかを判定する文があり、
バイナリの場合はコンパイルせずにそのままsq_readclosureによってスタックに読み込んでいることが分かりました。
そこで、sqstd_loadfile冒頭のsqstd_fopen(fopenと同じ働き)を削除し、loadfileの引数のファイル名の変わりに(FILE*)型のポインタを
渡してやるようにし、また、(テキストファイルは扱わないため)テキストであった場合の分岐を削除してみました。
これは成功すると思ったのですが(おそらく)こちらのコーディングミスでメモリ関係のエラーが出てしまいました。
こちらを直して正常に動作するようならまた報告したいと思います。
>>99
スタックトップに積むようなので、sq_move(dest, src, -1)といったように設定してやればいいんですかね? 試してみます。
ただ今回の件でSquirrelのスタック周りの操作についてほぼ無知であることが分かったため、もう少し勉強してからトライすることになると思います。
■ このスレッドは過去ログ倉庫に格納されています