[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 04/15 10:52 / Filesize : 210 KB / Number-of Response : 911
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

プログラミング言語 Lua  その3



1 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 13:13:52 ]
だれか サポ−ト 頼む。
前々スレ pc5.2ch.net/tech/kako/1034/10341/1034182349.html
前スレ pc8.2ch.net/test/read.cgi/tech/1063711237/
本家 www.lua.org/
lua-users lua-users.org/
LuaForge luaforge.net/
Lua 5.1 リファレンスマニュアル(日本語訳)
sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html

849 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:28:01 ]
>>847
マニュアルの「C言語のAPIからSquirrelの値への強参照の維持」のところ以降を参照

以下使い方の例の一つ:複数のsquirrelのクロージャをC側で保持して任意に呼び分け

前準備
1. スクリプトをコンパイル
2. スタック上のクロージャを、sq_getstackobject でHSQOBJECT として参照保持
3. スタック上のはとりあえず必要ないので sq_pop で解放
4. 必要な分だけこれを繰り返す

使う場合

1. スタックに HSQOBJECT として参照してるクロージャを sq_pushobject で積む
2. sq_call でそのクロージャを呼びだす

LUA でおなじようなことをしようとすると、なにかしら名前をつけてグローバルのテーブルか
レジストリにいれとくとかして、それをいちいちスタック上で取り出すような処理が必要なはず。
squirrel だと、任意のオブジェクトに対する参照をC側でもてるので、
(強参照なので、参照されてる限り消えない)、使うときだけまたスタックに積む、という使い方ができる。
値を set するにはスタック介さないとダメだけど、get だけならAPIで直接ぬくこともできる。

制御の本体を C 側でおこなってる場合でも、この機構があるおかげで、Squirrel 側のオブジェクトの
とりまわしがすごい楽にできる。
sqplus を使うと、このあたり関連の処理が SquirrelObject としてラッピングしてあって、
値の代入から配列/辞書としての操作まで、全部 Cからのメソッド呼び出しで
簡単にできるようになってる。

850 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:09:18 ]
>>849
>LUA でおなじようなことをしようとすると、なにかしら名前をつけてグローバルのテーブルか
>レジストリにいれとくとかして、それをいちいちスタック上で取り出すような処理が必要なはず。
ここ以外はLuaと機能の差がないという解釈でOK?
Luaでもちょっとした(数行の)関数かけば解決しちゃうような。
もちろんその手間はかかるけど。

>強参照なので、参照されてる限り消えない
Luaでもレジストリに保存されている限り消えない。

>get だけならAPIで直接ぬくこともできる。
もうちょっと詳しく書いていただけると助かります。

>SquirrelObject としてラッピングしてあって
luabind::objectでも同様にしている。


851 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:22:14 ]
luaL_ref() とやってることはあんまり変わっていないような。

852 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:54:33 ]
>>851
なんだって! そんな便利なものがあったのかよ!


853 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 01:27:20 ]
>>850
まあラッピングすればねー。
SqurrelObject は例示としてはよくなかったね。

Cの名前空間との関連を管理するコードを自前で書かないと
いけないってのはちょっとうれしくないぁと。
それをしなくて良い分親和性が高いってのは納得いただけるかと。

>getだけなら
sq_objbool とかそのへん

あと、話はそれるけど、言語文法もかねw>C言語との親和性
begin/end がどうしても慣れなかった……

854 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 04:54:19 ]
SquirrelもLuaも使ってみておもったけど、もう少し簡単に組み込めるようにはならんのかな?
スタック操作とか、参照カウンタとか頭こんがらがってくる
C++じゃなかったからtemplate library 使ってないせいもあるんだろうけどさ。
みんなやっぱりその辺のbinding使ってるの?**Plusとかみたいなの

>>849
強参照ってそんなときに使うのか・・・

855 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 07:57:01 ]
Lua最高!

856 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:13:32 ]
↑うるせーよダボがすっこんでLua!

857 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:34:16 ]
>>856
うまいこといったつもりか!



858 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:42:34 ]
>>854
スタックはややこしいよね……。
テンプレートは使ったり使わなかったりかな。単純な関数呼び出しぐらい
なら、普通に書いたほうがわかりやすいので。

859 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:37:04 ]
Lua用のラッパーライブラリ自作したけど、
結局スタック操作から逃れられなかったなあ。
操作をできるだけ簡略化しようとして変態的になっていく不思議。

スタックの取得とかはこんなん。
lua_Var var = Lua.peek(-1);
↑Luaが扱うオブジェクトなら何でも入る共有体クラス

関数呼び出しはこんなん。
( Lua.global()["object"]["setPosition"] << 1.0 << 12.3 << 0.4 )(3, 0);

860 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:10:39 ]
luabindが二年放置(最終更新2006-01-24)の状況なのが厳しいですね。
luaのバージョンも進んでいるうえ、VS2008も販売された今では、
サポート放置されたライブラリには手が出しにくいです。

861 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:29:40 ]
sqplus使おうぜ

862 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:44:46 ]
スタック操作が煩雑になってきたら、ラッパー使って誤魔化すよりも
最小限の関数だけエクスポートして積極的にLua側に
ロジック追い出すように練り直した方が良いと思うけど。

863 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:46:58 ]
>>860 svn版使おうぜ
code.rasterbar.com/luabind/wiki

864 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 08:56:59 ]
きちんと高専とかで勉強したやつらはスタック型好き多いからね

865 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 09:32:40 ]
>>859
変態っぽいw
でも関数呼び出し面白い

>>864
スタックは仕組みがわかってても、日常のプログラミングでつかわないから疲れる
で、Squirrelは基本ライブラリですらスタック周りのバグがあったりして、
ソースみながら理解しようとしても信用できずに不安(もちろんパッチなげたけどさ)

866 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 09:33:45 ]
DMonkey、Wolfyによる更新キタ━━━━━━(゚∀゚)━━━━━━ !!!!!












DMonkeyもスレ違いじゃないよね?

867 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:09:03 ]
>>859
<< 1.0 << 12.3 << 0.4ってのは何を渡してるの?(3,0)は関数呼び出しって分かるけど。

>>865
バグについてkwsk

確かにスタック操作は煩雑だよね。特に開放。忘れたらリソース食いつぶすって点で
new-deleteに通じるものがある。

Squirrel使う予定なんだけど、やっぱりスタック操作の理解を深めるためにバインダは
自作したほうがいいかな。




868 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:22:28 ]
スタック操作の理解を深めるためには
情報処理試験の勉強をするのがよいとおもう。

869 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:43:45 ]
> バインダは
> 自作したほうがいいかな。

Squirrel Wikiのバインディングを一通り試してみてからでも遅くはないと思う。
wiki.squirrel-lang.org/

どっちにしろ、1から書くには大変だと思うので。

>>867
バグkwsk覚えてない。SqPlusのバグだったかも。
>>867も言うような pop忘れだったと思う。
俺が見た時は、安定版にパッチが取り込まれてなかった。
大分前、去年の話だけどね。

他にも似たようなところがあるかもしれない。

870 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:48:13 ]
そういう意味じゃないって('A`)
まぁ車輪の再発明もいいところだが、バインダ作るよ。できたら公開するぽ

871 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:51:39 ]
あ、>>870>>868に対して。

>>869
とりあえずSqPlusのソースを読み始めたところ。SqPlusと似たインターフェイスになりそう。
名前空間何にしよう。とりあえずsqbindでいいか。

872 名前:859 mailto:sage [2008/03/01(土) 12:34:57 ]
>>867
ストリームみたいな感じで引数3つスタックに積んでる。
あくまで例なんで、数値に意味は無い。

873 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:13:31 ]
>>872
ストリームみたいにしたいなら
gcall<<"object"<<"setPosition"<<arg<<1.0<<3.0<<-2.0<<end;
みたいにマニュピレータつかった方が見やすいと思うけど

874 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 14:17:15 ]
もといマニピュレータです

875 名前:859 mailto:sage [2008/03/01(土) 14:20:12 ]
ああ、元々ストリームを意識して作ったわけじゃないから
その辺は考えてなかった。

876 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 14:59:38 ]
C++のストリーム演算子?はよく知らんだが、
a << 1.0 の戻り値はどんなオブジェクトになっとるの?
a と同じオブジェクトを返しているのですかね。
ということは、メソッドチェーンみたいなのでも可能か・・・

a.push(1.0).push(12.3).push(0.4).call(3, 0)

みたいな

877 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 15:59:30 ]
バインダの名前sqppに決定。
SqPlusを読んで勉強中。

SquirrelObjectのコピーコンストラクタだけど、以前保持していたオブジェクトへのハンドル
はsq_releaseしなくて平気なんだろうか。

operator=ではちゃんとsq_releaseしてるし、バグだよなぁ・・・やっぱり。



878 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 17:21:12 ]
って何を血迷ってるんだコピーコンストラクタにreleaseいるわけ無いじゃんOTL
アホス つってきまつ

879 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 02:02:22 ]
binderなんていらないね
なんでもいいけど一行でcallできるのと
一行でnative closure登録できるようにしとけば
他はほとんどつかわんよ

880 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 06:28:46 ]
>>879
それを人はバインダと呼ぶ

881 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:54:53 ]
Lua5.1.3のlstrlibのSJIS化してみたので置いときます
ttp://colon.nsf.jp/lua/
MSVC用なんで需要なさそうだけど^^

882 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 12:48:58 ]
>>881
ソースコードのほうはいいけど、test.luaのほうの文字コードがぶっ壊れてるように見えるんですが。

str = "\\5爐!Eェ殉\\}柔檻5\"xさぜ\"ェ殉柔爐さ檻Exぜ!}"
pat = "[^檻]*"
testf( 1, str, pat, "xさぜ\"ェ殉柔爐さ" )

これってテスト用だからわざとだったりします?
でも、SJISじゃないって警告が8箇所出てたりもします。

883 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:13:04 ]
すいません。わざとです。
漢字コードの境界部分を多く含むようにしてあるので
フォントによっては表示すらできません

884 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:01:30 ]
SquirrelのGCは参照カウンタ型か・・・
GCの負荷を分散するわけだからどうしても重くなるよね。
やっぱLuaかな・・・

885 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:17:15 ]
>>884
つ ベンチマーク
って、ゲームとかの組み込みだろうから、単純計算しても参考にならんわな。

実際の簡単なゲームの比較ベンチマークでもあれば、いんだろうけどね。

886 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:35:37 ]
なんでマイノリティの参照カウンタ型採用しちゃったんだろ?
当然参照カウンタ型のデメリットも把握してたはずだが・・・
一般的なLua型にもデメリットはあるが今現在
決定的なアルゴリズムはないのだからとりあえず一般的な型(Lua型)
にしときゃよかったのに。

887 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:14:03 ]
んー。確か、Squirrelを作った理由に、LuaのGCの挙動にブチギレたってのも合ったはず。
どっかに記事なかったかな。



888 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:17:21 ]
ゲーム用途に組み込む人は解放のタイミングが確実な参照カウンタのほうを好む気がする

889 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:28:28 ]
マシンはどんどこリッチになるしな
特にPCは

専用機(コンソール)だと各世代の寿命と段差が大きいが

890 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 16:46:14 ]
大体Squirrelはマーク&スィープGC積んでるんだから、それでもあえて
リファレンスカウントを選んだのはちゃんと理由はある。
wiki.squirrel-lang.org/default.aspx/SquirrelWiki/LuaComparedToSquirrel.html

俺がSquirrelを使ってる理由はリファレンスカウントだから。理由は>>888
巨大なリソースを組み込みスクリプト側で扱う設計にしてるなら、リファレンスカウント
のありがたみが分かるはず。
折角GCつき言語採用してるのに、リソース開放のためにdispose()とかダサいよ。

891 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 16:55:03 ]
luaにネイティブ整数型がないのはときどき困る。

892 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 20:00:03 ]
チラシの裏。

Squirrelバインダ製作中。とりあえずC++からSquirrel呼び出しは、

SquirrelVM vm;

int value = sq_cast<int>( vm.getRootTable()[ "foo" ] );
vm.getRootTable()[ "bar" ] = "BarString";
vm.getRootTable()[ "setPosition" ]( 1.0f, 2.0f );

vm.beginCall( vm.getRootTable[ "setPosition" ] )
.param( 1.0f )
.param( 1.0f )
.endCall();

みたいな感じに。
SquirrelからC++呼び出しが面倒くさい。Sqplusみたいにテンプレートを駆使した
バインダにするか、それともネイティブクロージャを楽に登録できるようにするだけに
するか、悩みどころ。

893 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 07:50:12 ]
>>890
まあ「俺の好みだからほっとけ!」いわれればもうなにもいうことないけど
リファレンスカウント型には毎度のカウンタ操作による負担が重いという弱点があり
そこを嫌われてマイノリティなのは事実だから仕方ないよ。

894 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 08:58:58 ]
>>893
マイノリティか?海外で大人気のPythonは参照カウント&GC式だぞ。Squirrelと同じ。
Pythonのスタックレス版はどっかのネトゲのサーバーに使われてたはず。

>毎度のカウンタ操作による負担が重いという弱点
これそのままメリットなんだよね。マーク&スイープGCは回収している間プログラムが
とまるって事実は忘れちゃいけない。参照カウントはGCのコストをちょっとずつ払って
いるから、止まることは無い。

一般的に嫌われてるってのはただ単に>>893の個人的な感想じゃないか?
両者のメリット・デメリットを把握して運用するのが重要だと思う。

895 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 09:44:53 ]
>>894
PHPとかIoもやね。あとObjective-Cも。

896 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:17:30 ]
ちょうどそんな話題がPythonスレに出てたよ
ttp://pc11.2ch.net/test/read.cgi/tech/1203611273/182

897 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 14:32:21 ]
>>896
凄くみにくい言い争いに発展してるんだがwww



898 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 19:00:16 ]
>>896
参照カウントにも利点があることが分かったよ。なんとなく。

あと、英語が読めないと開き直ることに、利点がないのも分かった。はっきりと。

899 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 20:15:59 ]
チラシの裏。

Squirrelバインダ製作中。ただ、作ってるうちにSqPlusへの理解が深まったせいで、SqPlus
使えばいいんじゃね?みたいな雰囲気に。もうだめぽ

とりあえず

DefineClass< SampleClass >( "SampleClass", vm )
.constructor()
.method( "testFunction", &SampleClass::testFunction )
.method( "testFunction2", &SampleClass::testFunction2 );

のようにバインドできるようにしたけど、これから作りこんでいくかどうか悩んでる。

メンバ関数ポインタの配列をsq_get/settypetagを使って設定してるけど、
使い方間違ってるぽ\(^o^)/オワタ

900 名前:デフォルトの名無しさん mailto:881 [2008/03/04(火) 00:46:02 ]
日本語変数名つかえるようにしたのと入れ替えました
さらに需要ないんだろうなあ

901 名前:881 mailto:sage [2008/03/04(火) 00:50:25 ]
すいません。間違えてあげちゃいました。
メール欄に881ってw

902 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 07:56:42 ]
>>894
うーん、この辺が入門としてはお勧めかな。
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-13308-7
割と大きい図書館ならおいてあるよ。
マーク&すいーぷの欠点はそのとおり。

903 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 08:42:52 ]
Squirrelのバインダなんだが、C++からエクスポートするときのインターフェイスに悩んでる。
どっちがいいかな?とアンケート。

1.
void foo( cpp_ptr<TestClass> arg )
{

904 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 08:45:23 ]
xtal使いやすいよ。

905 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 08:55:51 ]
うわ途中で送信しちまったい。

1.
void foo( cpp_ptr<TestClass> arg )
{
/*なにか処理*/
}

2.
void foo( TestClass* arg )
{
/*何か処理*/
}

//ヘッダファイルのどこか
SQPP_DECLARE_CLASS( TestClass );

2はSqPlusと同じ方法。1は代替案って感じ。
基本型以外は全部C++のクラスと仮定してエクスポートしてもいいんだけど…
(そうしたらSQPP_DECLARE_CLASSいらない)


906 名前:デフォルトの名無しさん [2008/03/04(火) 13:18:02 ]
参照カウント式が特段優れたものではないということは確か。
というか逃げられない(GCしないという選択肢がない)分、有害ですらありうるな。

907 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:31:54 ]
話が盛りあがっているところ申し訳無いのですが
GC一般の話題は専用スレがあります。
過疎スレですからそちらを使って頂けないでしょうか。

Garbage Collection (GC)について語るスレ
pc11.2ch.net/test/read.cgi/tech/1141646850/



908 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:47:30 ]
>>905
1

909 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 14:15:57 ]
>>906
GC使わないようなコード書くなら、組み込み言語使う意味が大幅に薄れるような。
そんな涙ぐましい努力をするくらいなら最初からC/C++で書くよ。

俺も参照カウントが優れた方法だとは思わないが、こと組み込み向けならば
メリットがあると個人的には思うよ。

910 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:08:52 ]
LuaのインクリメンタルMark&Sweepの実装も
マジックナンバーばっかで何を根拠に調整してんのか
よくわからんしなぁ。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<210KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef