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


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

【Lua】組み込み系言語総合 その2【Squirrel】



1 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 09:11:41 ]
LuaやSquirrelなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
wikiwiki.jp/lua/

その他の参考URLは>2から

■前スレ
【Lua】組み込み系言語総合【Squirrel】
pc12.2ch.net/test/read.cgi/tech/1205208141/

■過去スレ
その3 pc11.2ch.net/test/read.cgi/tech/1160799232/
その2 pc8.2ch.net/test/read.cgi/tech/1063711237/
その1 pc5.2ch.net/tech/kako/1034/10341/1034182349.html

673 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 17:42:19 ]
最近Squirrelを始めた者です。
今、C++のクラスをバインドしているんですが、分からないことになりました。
あるクラスAがあってそのクラスのインスタンスからgetB()でクラスBのインスタンスを取得できるとします。
で、そこまでは
a<-A();
b<-a.getB();
とすることでbには[instance]が入っているのを確認できました。クラスBもバインド済みです。

しかし、そこからbにたいしてBのメンバを呼ぼうと思っても呼び出せません。以下がエラーです。
AN ERROR HAS OCCURED [the index 'draw' does not exist]
バインドするときに戻り値が何型であるかを設定する方法があるんでしょうか?

674 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 20:37:30 ]
バインドの方法がおかしいんだろう。クラスインスタンスを返す場合は、その返したいクラスに対して sq_createinstance
して squirrel のインスタンスとしての構造を作ったものに sq_setinstanceup したものを返す必要があるんだがそうしてるかい?

675 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 21:07:46 ]
>>674
してませんでした。> createinstance
使い方が分からん・・・

676 名前:デフォルトの名無しさん [2009/12/15(火) 22:40:50 ]
こんなコードにしてみましたが、違うんでしょうね・・・。だって、動かなかったですしね・・・。

static SQInteger bitmap_getgraphics(HSQUIRRELVM v){
  Bitmap *b;
  sq_getinstanceup(v,1,(SQUserPointer*)&b,0);
  sq_setinstanceup(v,1,&b->getGraphics() );
  sq_createinstance(v,1);
  return 1;
}


677 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:30:53 ]
Cの組み込みでLuaって速度的にどれぐらい出る?
ゲーム作ってるんだけど、1fps≒16msの間にpcall呼びまくったりしても大丈夫かな。
ざっと3000回ぐらい。

678 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:43:58 ]
ソース読んでたけど、よくわからん?

sq_getclassでクラスをスタックに
sq_createinstanceでそのクラスのインスタンスを作成し、スタックへ
sq_setinstanceupでユーザーポインタをインスタンスにセット

と思ったんだが、最初のsq_getclassでどうやれば返り値のクラスを取得できるんだ・・・

679 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:56:21 ]
bzr

680 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:57:02 ]
間違えたぜ

681 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 01:05:04 ]
>>678
主要なバインダには該当コードあるんだからそれを探して読もうよ。

sq_getclass はインスタンスのクラスを取得するもの。sq_createinstance をする場合に
参照するクラスはあらかじめわかってるんだから、C側で参照を保持しておくか、
あるいは global から名前指定しで取り出して使う




682 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 10:10:40 ]
>>672
それはどうやれば良いですか?

noparser.c でググったのだけど
ファイルサイズが削れるだけの説明ばかりで

683 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 14:42:20 ]
>>670
PCのスペックも環境も書いてないのにそんな話しても無駄だが、
最近のPCで本当にただpcall呼ぶだけなら3000回くらい平気じゃないかね。

684 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 14:43:41 ]
>>682
コンパイル済みのスクリプトしか読ませないの前提でパーサ削除しろって話じゃないかね。

685 名前:デフォルトの名無しさん [2009/12/16(水) 17:03:32 ]
今更だと思うけど、luaとsquirrelのスピード測ってみたんで貼っておく
(CentOS 5.3 64bit)

処理内容の擬似コードは

ans=0
for(i = 0..10000) { ans+=i;}
for(i = 0..10000) { ans-=i;}

これを更に10000回


lua 5.1.4   10000 times ( 3.176293)
squirrel 3.0 10000 times ( 8.569499)
ruby 1.9.1 10000 times ( 20.318498)
cpp     10000 times ( 0.197799)

squirrelも十分速いと思うけど、lua速え、ルbywww

ちなみに組み込んだ際の処理系サイズ
lua 188k
squirrel 371k
ruby 5.2M

686 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:10:52 ]
意味無いことを

687 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:18:42 ]
下手をすると、Cでは変数が後で利用されていないと、
最適化でごっそり無かったことにされるから気をつけろ。

688 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:33:31 ]
コンパイル時に計算済ませていきなり即値代入して終了とかな。

689 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:44:46 ]
>>687
あるあるww
最初測ったら0秒だったよ
今回はLuaの1/15くらいだからこんなもんでしょ


あと、rubyをコケにしてるような書き方になってしまった
あれは便利さ重視だからスピードは二の次
rubyユーザーごめん
引き合いに出したのは、自分がよく使ってて、一応組み込めるから。

690 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 17:48:38 ]
オブジェクト生成するからな。
とにかく意味が無い例であるのはたしか。

691 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 20:15:55 ]
>>676
たぶんこんな感じかな。テストしてないので動作するか分からないけど
static SQInteger bitmap_getgraphics(HSQUIRRELVM v){
  Bitmap *b;
  //Bitmapのポインタを得る
  //Bitmap_tagはBitmapクラスを登録したときのタイプタグ
  if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&b,(SQUserPointer)Bitmap_typetag))) return 0;
  //Bクラスのインスタンスの作成
  //B_handleはBクラスを登録したときのハンドル
  sq_pushobject(v,B_handle);
  sq_createinstance(v,sq_gettop(v));
  sq_remove(v,-2);
  sq_setinstanceup(v,-1,&b->getGraphics());
  
  return 1;
}

BitmapとBのクラスはすでに登録されているものとしします。
ちなみにクラス登録時はこんな感じ
//クラス登録
//class_nameにクラス名
sq_pushstring(v, class_name, -1);
sq_newclass(v, SQFalse);
//クラスハンドルの獲得
//class_handleに用意したクラスハンドルへのポインタ
sq_getstackobj(v,-1,class_handle);
//クラスハンドルタグの設定
//class_tagにクラスのタイプタグ
sq_settypetag(v,-1,class_tag);




692 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 20:57:00 ]
>>691
作りにもよるけどたいていは sq_setreleasehok 処理も必要

693 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 21:08:29 ]
>>692
ん?sq_setreleasehookってコンストラクタの中じゃないの?


694 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 21:46:22 ]
>>693
sq_createinstance はまさに構築済みの C++オブジェクトをラップして返すために
あるもので、squirrel のコンストラクタをよばない。

普通のコンストラクタは中で C++のインスタンスを new してるから、
呼んでしまうと余分なC++インスタンスがつくられる上に、さらに
別のインスタンスを sq_setinstanceup した時点でリークしちゃうからね。

で、よばれないから、たいていコンストラクタでやってるはずの
sq_setreleasehook は別途必要になる






695 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:27:12 ]
>>694
おおっ、なるほどな。
良く見たら自分のメモリ開放できてなかったわ^^;)


696 名前:デフォルトの名無しさん [2009/12/17(木) 00:22:06 ]
>>691うおぉぉぉ 本当にありがとうございます!しかし、こんな風に書くとは全く思ってませんでした・・・
勉強になりました。が、Squirrelは使いづらいなと思いました・・・。

>>694
ちなみにですが、691にはどんな追記をすればいいんでしょうか?
自分は下のようにやったんですが、プログラム終了時にあぼんいたしました。
Bitmap *b;
if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&b,(SQUserPointer)&SQBitmap)))return 0;//環境オブジェクトからBitmap*を取得
sq_pushobject(v,SQGraphics.getSQClass());//Graphicsクラスのクラスハンドルをスタックに乗せる
sq_createinstance(v,sq_gettop(v));//そのクラスのインスタンスを作成(Graphics自体のインスタンスは作られない)
sq_setreleasehook(v,-1,graphics_releasehook);//一番上のインスタンスに解放関数を持たせる?わからない
sq_remove(v,-2);//クラスハンドルを削除している?
sq_setinstanceup(v,-1,&b->getGraphics() );//実際にインスタンスにGraphics*をセットする

なんか、他の部分も怖くなってきました。リファレンスだけじゃわかりませんね。


697 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:34:19 ]
>>685-689
Rubyて感覚的には30分走らせる代わりに10分でコード書く。C言語は1時間でコードかくかわりに1分で走らせるとか、比喩があったなw

698 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 09:54:34 ]
C言語と30年戦う代わりに1年で味方につけるべきだったな。

699 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 10:16:12 ]
AngelScript|Д゚)ジー

700 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 11:05:57 ]
>>696
記述自体はそれであってるけど、sq_setreleasehook するのは sq_setinstanceup が成功したのを確認した後でしょう。

終了時あぼんは、そりゃどっかプログラムが悪いんだろうとしか言えない。
その b->getGraphics() でとった Graphics が勝手に独自に解放されて大丈夫な構造で作られて
ないのなら setreleasehook してはダメ、って、&つけてるってことはメンバ変数か。それはダメかも

C++で管理を単純化するために、親が責任もって解放してるので、子オブジェクトは
ポインタ参照したあともそのまま放置したのでOK、という書き方は実際よくあって、
そういったものをsquirrel に移すときは、子オブジェクトにポインタ渡してオブジェクトとして
作るけど sq_setreleasehook はしないという書き方にする必要がもちろんある。

親が先に死んだ状態で子をさわるとポインタ腐ってるのでクラッシュするけど
それはそういうもの。squirrel は機構は提供してくれるけど、自動で判断してくれるわけでは
ないから、あくまで C++ 的に破綻しないように注意して書く必要がある。

そういうのいやならオブジェクトを全体的にリファレンスカウント
方式とかで管理するようにするしかない。
そして循環参照トラップにはまるw

701 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 11:44:13 ]
循環参照嫌うなら弱参照系ないしはGCの実装が必要

もっとも、squirrel 自体がリファレンスカウントもGCも弱参照ももってるから、
既存ライブラリを持ってくるのではなく最初から書くのなら、C++ 側を
squirrelの機構にべったりのっかるように書くという考え方もある。

個別のオブジェクトはごく単純にバインドするようにして、C++ 側でオブジェクトの親子構造を持つ場合は、
C++そのもののポインタではなく、squirrel のオブジェクトを一旦作ってそれを HSQOBJECT で持つようにする。
さらには、配列や辞書が必要なら、STL とかを使うのではなく、squirrel の array / dictionary を使う。

C++ 側で元のオブジェクトを参照する場合にも squirrel の機構を経由する必要があるので一手間増えるけど、
squirrel に値を返す時は持ってる HSQOBJECT を sq_pushobject するだけになるからとても簡単になるし、
オブジェクトの寿命管理も squirrel 側になるから、いつ誰が破棄しても安心



702 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 14:23:49 ]
>>700
あー、やっぱり、新しくインスタンス作ってるんじゃないんならsetreleasehookはいらないんですね。
なんか中で気持ち悪いことやっててGraphicsインスタンス作ったつもりはないのに解放関数与えないとダメなのかと思いました。
(ソース読んだ限りではそういう記述が無かったので、疑問には思ってましたが・・・)

あとは、終了時あぼんの原因を探れば動きそうです。ありがとうございました。

ていうかBCC5.5ってテンプレートが弱いからSqPlusとか使えないんですね・・・。メチ不便

703 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 15:54:55 ]
xtalの新verが出てる。
デバッガー早くできるといいな。

704 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 16:06:30 ]
Squirrelの演算子一覧に => ってあって
え!? と思ったら単なるtypoだった・・・

705 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 16:07:52 ]
ぅあ

706 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 19:09:29 ]
squirrelで
{};hoge
をコンパイラが受け付けないのには何か理由があるの?
疑似BNF見る限り許容されそうなものだけど
ワンライナーだとついテーブルコンストラクタに ; 付けてしまう

707 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 13:49:00 ]
nscryptみたいな軽量な物で小数点も扱えるのあればなぁ
luaとかは無駄な部分が多すぎて

708 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:00:18 ]
他の部分がNスクで十分なら、多分Nスク作者に要望を投げてみるのが、
その要望の解決にはいちばんいいと思う。

709 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:17:21 ]
>>708
出来るならそうしたいけど
nScript作者はここ最近活動休止中みたいで
そのスクリプトも含め更新と言う物が一切されてないから期待出来ない

だから自分で実装しようとしてるけど
元々Cのみで書かれてないから移植作業がまず大変

710 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:40:00 ]
はてな日記見てみたけど、なんか次世代エンジンに注力してるみたいね。
そのへん追いついてなかった。

711 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:46:52 ]
あ、あと、どう使うつもりか知りませんがライセンス大丈夫ですよね?
Nスクのライセンスは全く見ずに言いますが。



712 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:47:50 ]
>>711
個人利用のみだから問題ないはず、と思う

713 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:48:14 ]
nScriptってWWWCの作者のだよな?
NScripterと話がごっちゃになってね?

714 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:51:05 ]
突っ込もうと思ったら怒涛の勢いでレスが・・・
確かに混同してるな

715 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:53:30 ]
>>713
このことです
ttp://www.nakka.com/soft/ns/

716 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:55:29 ]
あれ、ソースみてるけどフルCでね?
windows.hに依存してるのはあるかもしれんが

717 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:02:33 ]
パイソンとかルビーをゲームに使ってる人はいますか?

718 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:07:10 ]
>>716
フルCに見えるけど一部Winの機能使ってて
手直し必須だと思う

719 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:37:08 ]
スクリプト実行する根っこの部分でWinの機能つかってるから
一部と言うより根本的な修正が必要だなこれ

720 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:09:35 ]
ところでお前ら、この手のスクリプトエンジンに手直し入れる場合、どのぐらいまで手を入れますか?
基本命令や文法とかまで変えたりする?

721 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:10:05 ]
>>717
ノシ IronPython使用中。
1週間ほどあればスクリプト部分はcPythonにも移植出来るかな。
特に問題ないよ。
スクリプト内でマルチスレッド化が普通にできるのが強みだな。



722 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:58:46 ]
>>720
本家バージョンアップの度にパッチ当てるの面倒だから基本的にそのまま
作業を楽にする目的で文法いじるとしたらプリプロセッサとかトランスレータを間にいれるかな
文法変えずに必要な機能が実現できないなら言語の選択に問題があるかと

ライブラリレベルならアーカイブが透過的に扱えるようIOを自作のに差し替えてる

723 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 02:05:39 ]
誰か>>715のnScriptをCのみで動かせるように
手直ししてくれる人いません?

メモリ管理や足りない型の再定義とかはなんとかなるけど
マルチスレッド処理には詳しくないから
同期処理とある部分の代用関数が分からない


724 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 02:28:47 ]
そもそもCにスレッドなんて無いような

725 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 04:55:19 ]
TCP使えるネットワークライブラリでC汎用なのも無いきが

726 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 14:10:06 ]
luaはどうも記述が冗長になる・・。
if ~ then ~ endとか。

「関数先頭でリソース割り当て。割り当て成功してたら
終わりで開放。」見たいなコード書くとフラグ使って
最後でif文みたいな感じになるけど、
C#のIDisposable見たいな機能があると便利かと。
割り当て・開放のコードが集約できるから見やすそう。


727 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 16:26:27 ]
Cでそういうの書けばいいねん

728 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:54:01 ]
・テーブルに関数をpushする
・テーブルが空になるまで関数をpopして呼び出す
の2つを簡単に出来るようなライブラリを作ればいいと思う

729 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:55:48 ]
>>728
で、それが種々のbinderになるわけですが何か。

730 名前:726 mailto:sage [2009/12/20(日) 18:18:19 ]
きっと欲しいのはこんな感じ
do
 local resource=...
 finaly
  finnalize(resource)
 end
 :
 :
end -- ここでfinalyの内容が自動で呼ばれる。

自動で呼ばれるとなると言語サポートは必須かと。
metaluaあたりで作れるかな?

731 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:25:56 ]
何のためにGCがあると思ってるんだろうか



732 名前:726 mailto:sage [2009/12/20(日) 18:28:56 ]
javaのGCじゃリソース管理できないから
C#はIDisposable入れたんじゃないの?


733 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:33:54 ]
>>732
違うよ。
本来的にアンマネージドなリソースの管理はGCじゃなくてプログラマの責任だから、
プログラマが明示的にDispose()かける仕組みになってるんだよ。

734 名前:726 mailto:sage [2009/12/20(日) 18:44:32 ]
え?
C#はかじった程度しかしらんのでうそ言ってるかもしれんが、
usingとIDisposabeなクラス組み合わせると
リソース開放漏れが(ファイルのクローズとか)が防げますよー
って使い方するんじゃないの?(C++のRAIIみたいな)


735 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:46:57 ]
これでどうだ

call_with_finally = function (block)
 local t, n = {}, 0
 block(function (f)
  n = n + 1
  t[n] = f
 end)
 for i = n, 1, -1 do t[i]() end
end

call_with_finally(function (finally)
 local resource = ...
 finally(function ()
  finalize(resource)
 end)
 :
 :
end)

736 名前:726 mailto:sage [2009/12/20(日) 18:57:38 ]
>>735
よく思いつきますな。理解するのに
上下のブロックを10回ぐらい往復しましたよ・・・。
ただ、複雑になったらそのコードを一年後理解しなす
自身がないかも。

ついでにmetaluaでよろしく ノシ (冗


737 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 19:04:56 ]
>>734
IDisposableを継承したクラスはusing構文で使うことが推奨されているわけだが、
当然この構文が使えない使い方があるわけで。
(using構文を使うと実用上スタックに載せているのと同じなわけで、ヒープに置きたい場合だってあるだろう、という話)

で、ユーザーが手で作ってホールドしているIDisposableなインスタンスは当然自分で明示的に破棄しないといけない。

738 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 03:50:01 ]
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ AngelScript 2.18.0!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ

739 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 15:13:06 ]
AngelScriptが2.18.0になってるな

740 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 15:16:21 ]
ASの本だれか書いてくれ

741 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 15:39:12 ]
ActionScriptなら



742 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 16:54:21 ]
仮想マシンをいくつもopenするのって良くないですか?

743 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 17:13:43 ]
同時に動かす必要が無いなら良くないんじゃない

744 名前:デフォルトの名無しさん [2009/12/21(月) 19:21:29 ]
良くないですね

745 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 21:23:01 ]
>>740
まずは2.18.0のShiftJIS対応版だ…

746 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 00:10:03 ]
sjis対応なんて激変してない限りいつも同じ手順だろうに

747 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 00:38:06 ]
AngelScriptはこまめに更新されるから、結構手間なのよ。


748 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 07:10:33 ]
ShiftJIS<->UTF-8の変換を間に挟むだけなんだから、
一度書いたら別に毎度手間がかかる訳じゃないだろ。

749 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 07:53:25 ]
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ Lua!!
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ



750 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:25:42 ]
>>748
AS_DOUBLEBYTE_CHARSETで有効になる部分に、そのままだとビルドエラーになる部分があって、
そこを毎回毎回直さなきゃならないんだ。

公式に知らせたほうがいいとは思うが英語が苦手でね…

751 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:12:37 ]
とりあえずdiff 取って投げれないの?



752 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:37:03 ]
>>735
こういうの、JavaScriptとかRubyとかやってると思いつくよなw

753 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:38:18 ]
毎回なおすってまさか手でなおしてるんじゃ・・・
バージョン管理してパッチ吐いたりして、どうしてもパッチあたらないときは手で直すとかしたらどうかと

754 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:34:26 ]
>>751
自分がいじったファイルをリポジトリにコミットって事?

>>753
まさかの毎回手直し。
あと、
>バージョン管理してパッチ吐いたりして、どうしてもパッチあたらないときは手で直すとかしたらどうかと
ってのは、TortoiseSVNの「パッチを作成」「パッチを適用」を使えって事?

質問ばかりですまん。

755 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:01:22 ]
>>754

公式は svn かな。それなら

1. 公式から任意のバージョンをエクスポートしてきて、それで自分の手元で自前の svnレポジトリを作る
2. 自分の更新はそこに任意にコミットする
3. 公式の svn から適当なタイミング(リリースがあった時とか)で更新を「マージ」する

これでおおむね安全に手元作業できるはず

svn は以前は外部レポジトリからのマージができなかったので、
手元のレポジトリに「ベンダーブランチ」として公式の内容をまるごとコピーして、さらにそこからマージする
必要があったんだけど、今のは普通に外のレポジトリからマージできるのでこの手の作業は楽になった

あるいは最先端技術でいくなら、bazaar のような、svn プロトコルに対応した分散構成管理ツールをつかうという手もある。
svn のマージはわりとややこしいし、ログの類もマージ作業に依存してしまうので、こっちのが構造的にははるかにスマート。
この場合、自分の変更分はローカルコミットとして維持する形になる

756 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:26:40 ]
>>755
詳しい説明d。
ただ、AngelScriptはWIPのみsvnを公開してるみたいなので、

>手元のレポジトリに「ベンダーブランチ」として公式の内容をまるごとコピーして、さらにそこからマージする

というやり方になりそう。
ちょっと試してくる。

757 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:38:19 ]
>>756

WIPってなにかと思ったら work in progress か。
まあ、そりゃ svn ってのはそういうものだから^^;

えーと、任意のリリースバージョンならタグうたれてるみたいだから

ttps://angelscript.svn.sourceforge.net/svnroot/angelscript/tags/

からとれるかと。
バージョン間でのマージ処理したければ、ここのツリーの差分をひろってくればいい

758 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 16:40:58 ]
そもそも
英語が苦手とか駄々こねてんじゃねえよクソが
死ねばいいのに

759 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:24:49 ]
ごめん誤爆してた

760 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:30:59 ]
>>759
ということにしたいんですね

761 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:34:46 ]
メインラインにマージしてもらえば今後そのケースで悩む必要は無いというのに
英語が出来ないからというそれだけの理由で一生無駄な作業をしつづけるんだろうな
英語が出来ずともパッチ送るだけで十分なのに



762 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:39:17 ]
そういうのはそう思う人がやればよろし。おしつけはおーぷんそーすの精神に反するのでいくない

763 名前:762 mailto:sage [2009/12/22(火) 17:39:53 ]
ごめん誤爆した

764 名前:762 mailto:sage [2009/12/22(火) 19:33:50 ]
>>763
人を騙るな。まじ気にしなくていいよ>パッチ送るとか

765 名前:762 mailto:sage [2009/12/22(火) 19:38:59 ]
お前こそ誰だよ

766 名前:762 mailto:sage [2009/12/22(火) 20:51:42 ]
何で俺こんなにいるん?

767 名前:762 mailto:sage [2009/12/22(火) 23:13:59 ]
>>762の人気に嫉妬

768 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:16:08 ]
4800円もするpython入門書が古い版でしかもC組み込みについて全然触れてなかったでござる

769 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:33:42 ]
何も文章書かずにパッチだけいきなり送るとか、どんだけ失礼なんだよ。

770 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 02:41:15 ]
お歳暮だって何も文章書かずにいきなり送りつけてくるだろ。

771 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 02:58:59 ]
最近お歳暮という日本の習慣を覚えたばかりの外国人の方ですか?



772 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 07:42:11 ]
つまりパッチにoseiboって書いて送れと

773 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 07:56:22 ]
おう、てめーらサンタさんディスってんのか

774 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:52:13 ]
サンタさんはいい子にしかこないけど、
いい子以外にもパッチを送りつけるような真似はいかがなものかと。

775 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 15:55:19 ]
ASが悪い子だと

776 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:46:07 ]
>>769
gitなんかdiff形式のメール生成して送る機能なかったけ?w

777 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:48:17 ]
まーでも、こういうときってgithubとかbitbucketみたいなサービス使って欲しくはある。
forkして変更して、変更を相手に送る(pullリクエストする)というのがシステムに組み込まれているから、
パッチ送るのも気軽なんだよね。

778 名前:デフォルトの名無しさん [2010/01/04(月) 14:49:54 ]
コムラッドのタカネ終わってるな
namidame.2ch.net/test/read.cgi/venture/1260791115/l50
set.bbspink.com/test/read.cgi/sm/1246009466/l50
set.bbspink.com/test/read.cgi/sm/1249183350/l50

779 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 15:51:39 ]
オイ俺のコピペ脳、まで読んだ。

780 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 09:15:42 ]
Lua について相談なんですが、
メタテーブルの __newindex を使えば、
テーブルに新しい key を追加するときにフックをかけることができるけど、
同じような感じで、テーブルの既存の key の値を変更するときに、
フックをかけることってできないかな?


781 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 10:36:17 ]
メタテーブルの__indexは調べた?



782 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 11:26:52 ]
__index は調べたんですが、
キーがすでにテーブルにある場合は __index はなにもしないですよね。
Metatable の index の擬似コードから抜粋:

local v = rawget(table, key)
if v ~= nil then return v end ← キーが存在するならその値を返す。

www.lua.org/manual/5.1/manual.html#2.8


783 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 11:52:07 ]
単純に、テーブル本体は何も仕事をしないでメタテーブルにすべて丸投げしたい
と考えれば簡単なことなんだけどな。
空のテーブルにメタテーブルを持たせて key が何も無い状態を維持すれば良い。

いったんメタテーブルに丸投げするが、データを保持する仕事はテーブル本体でやる
と考えるとややこしくなるよな。

784 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 12:20:51 ]
確かに! 間に空テーブルをかませばいいんですよね。
ありがとうございました。

785 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 00:41:10 ]
Lua 5.2.0 work1 出てるね
ファイナルもうすぐかも

786 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 18:50:02 ]
> ファイナルもうすぐかも
それはない

787 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 01:12:00 ]
環境周りが結構変わったのかな?
- lexical environmentsの導入(in EXP do BLOCK end)
- setfenv/getfenvがなくなった(debugのはある?)
- 全thread(コルーチン)で環境はひとつのみ?
自作ライブラリは結構見直さないとなー


788 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 03:37:11 ]
こうですか?わかりません
local x = 1 do
 local y = 2 do
  ・・・
 end
end

in {x = 1} do
 in {x = x, y = 2} do
  ・・・
 end
end

789 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 10:13:28 ]
lexical environment は、ECMAScript (JavaScript) の with みたいなもんかな。
set/getfenv は関数に対して破壊的な操作をしてしまうので、新しいやり方のほうがきれいに書けるかも。


790 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 11:19:29 ]
空テーブルをsetfenvするモジュールシステムに慣れてる人なら、
もともと空っぽの環境を破壊されてもほとんど困らないけどね

791 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 21:19:47 ]
破壊的なのは「グローバルな関数の環境を変えてしまう」って
とこじゃないの?setfenvする場合たいてローカル関数
をつくったうえで行う場合がほとんどだし。

function global_f() ~~~ end

に対してglobal_fの挙動を変えたいがために(たとえば
global_f内で呼び出しているprintの挙動を変える)
setfenv(global_f,~~)とはやるのは危険だし。
(ほかスレッドでの呼び出しも影響を受ける)

in { print=function(...) ~~ end } do
 global_f()
end

とできるからそのほうが安全・・・ってのが
使いどころなのかな?





792 名前:791 mailto:sage [2010/01/13(水) 00:53:12 ]
ごめん激しくうそ言った。
791の例でprintはglobal_fが作られた時点で固定化されているので
一番最後の方法では挿げ替えはできないね(orz

793 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:02:20 ]
Tropico3という箱庭(miniスケープの方の)ゲームでlua使われてた。
なんかzlib圧縮(?)されてるから.luaファイルみてもわからんけど

794 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 09:45:12 ]
>>792
それであってるんじゃないかな?
print が global_f の外側で local で宣言されていれば global_f が作られた時点で固定化される(レキシカル変数として)けど、
そうでなければグローバル変数として参照されるので、
環境を変えればその影響を受ける。

795 名前:791 mailto:sage [2010/01/13(水) 19:13:03 ]
実際にビルドして試したので「間違い」で正しいかと。
本質的にはスレッドに対するsetfenvと同じで
>94の勘違いと同質な問題。
子供の関数の呼び出しまで影響を受けるとなると
危険極まりないのも事実だし。(トレードオフではあるが)

それよりもpcalやCスタック先からyield可能になったのは大きい。


796 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 07:28:39 ]
あ、ごめんなさい。勘違いしてた。
関数が定義された場所の環境をそのまま引き継ぐってことですよね。
だから、スクリプトファイルを読み込むとき(dofile とかで)に in ... do を使うと、
以後、そのファイル内で定義された関数はサンドボックス環境で実行されるわけか。

797 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:43:54 ]
Luaって

table =
{
element1 = 3
element3 = "str"
func element2() ...... end
}

みたいなことできませんか?

798 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:52:44 ]
事故解決しました。。。。ごめんなさい

799 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 06:58:28 ]
Lua 5.2 work2キタ━━
ファイナルもうすぐかも

800 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 08:28:47 ]
URLください

801 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 11:27:15 ]
lua5.1.dllがノートンでウィルス扱いされるな



802 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 11:46:33 ]
なにそれこわい

803 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 18:24:53 ]
そういやShiftJIS対応Lua5.1.3もノートンでウィルスありと判定されてたな。
誤検出なのかな?

804 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:46:56 ]
皆luaスクリプトの暗号化はどうやってるん?
リファレンスマニュアル探したけど、それらしい物が無かったんだが…

805 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:53:24 ]
Luaってシリアライズできなかったっけ

806 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 01:12:18 ]
lua_load/lua_dumpで自前で暗号化するくらしかできんよね

807 名前:デフォルトの名無しさん [2010/02/03(水) 08:55:04 ]
暗号化したファイルを読み込んで復元し、文字列にする>luaL_loadbufferやluaL_loadstringにその文字列を渡してコンパイル
って手順ではダメ?

808 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:27:02 ]
Python人気ねーな。luaより断然コード書きやすいのに。遅いけど

809 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 12:43:27 ]
>>808
>>4

810 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 12:46:04 ]
Luaがもうちょっとキモくない文法ならいいんだけどなぁ

811 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 12:49:10 ]
文法だけ変換するプリプロセッサかトランスレータのようなものを作ればいいんじゃないだろうか



812 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 13:02:55 ]
たった数十kbくらいのサイズで
Cライクな文法が使える超軽量な組み込みないかな
LuaとかPawnも、小さい部類だろうけど不要な物が多すぎる

813 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 18:35:51 ]
asじゃあかんの

814 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:16:11 ]
Win版でUTF8とUTF16を相互変換するようにLuaを改造したけど需要ないかしら
たとえばSDLとか

ところで、Windows x64向けにビルドしてみたけど
> print(2^63 - (2^63+1))
でなぜか0が返ってくる

> print(2^31 - (2^31+1))
なら1になるけど

ちなみにlua_Integerの実体ptrdiff_tは8バイトになってる
どこがおかしいのかわからん

815 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:57:11 ]
整数も浮動小数点で計算するからだそうだ‥‥
64bit integerに対して64bit doubleじゃ精度足りないっての

パッチがあったからつっこんでみるが、ちゃんと動くか心配だ

816 名前:804 mailto:sage [2010/02/03(水) 21:57:40 ]
>>805->>807
アドバイスありがとう。
luaL_loadbufferやluaL_loadstringを使うという発想は思いつきませんでした。

817 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 15:53:15 ]
>>811
Euphoria, t3x, moto, JavaなどCトランスレータを実装している言語は探すと色々あるものの、
トランスレート後に吐いたCソースとハンドコードしたCソースとのリンク方法が
文章化されてなかったりするするんだよな。

>>812
小さくはないが...elastiCは?
ttp://www.elasticworld.org/

818 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 19:12:28 ]
Luaスクリプトってバインダなしで使い物になるレベル?

819 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 19:41:20 ]
何らかのバインダ及びグルーが無いと、スクリプトの意味が無い気が。

820 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:35:40 ]
mingw ,gcc を前提としてるバインダが多い様な気がして
lua手を出しにくいのです。。。

821 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:52:42 ]
lua51.libとlua5.1.libって何が違うんだろう



822 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:53:06 ]
それは気のせいないし思い込みでは……

823 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:57:42 ]
.so を makefile でつくる、という事例にちょくちょく
遭遇しまうまう・・・orz

824 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 22:02:22 ]
バインダはLuaではなくバインダという言語である!!


825 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 22:04:46 ]
$(CC) を $(CL) とか代えて、pkg-config はそのままでも
nmake -f makefile でビルドできるもんなんだろうか・・・

826 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:11:51 ]
pkg-configはシェルスクリプトだからmsysなりcygwinなり要るだろ

827 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:39:23 ]
nmakeには、一から書き直して食わしてる
必要なobjぐらいなら写せるだろ

828 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:52:13 ]
それ全然lua関係ないじゃん

必要なc/cppファイルひろって Makefile 書き直すなり
Visual Studio でプロジェクトファイルつくるなりぐらいやりなされ。
そんな難しいもんじゃない。

829 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 11:59:44 ]
>>828
こういう問題を回避するためにSquirrelのソースパッケージをCMake対応にして
フォーラムに投げてみたら、いらないって言われた……。

830 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 18:05:55 ]
オレはCMakeで固まろうとした

831 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 12:14:44 ]
luaのuserdataとlightuserdataの違いって

userdata
・lua側でアロケート
・lua側でデアロケート(GC)
・Cには参照のみが渡される
・Cからは寿命が分からない

lightuaserdata
・C側でアロケート
・C側でデアロケート
・luaには参照のみが渡される
・luaからは寿命が分からない

これ以外になんか有りますか?
それとluaとCでuserdata、lightuserdataの寿命を同期させる方法は有りますか?



832 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 12:41:41 ]
meta tableの有無も違ってたかも

833 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:15:34 ]
>>831
これは心の贅肉をそのまま箇条書きにしたみたいで面白いな

考え方としてはとりあえず
lightuserdataは無くても整数値で代用できる、と割り切ってしまうほうが簡単
そうすると、整数とuserdataを比較するのは無意味だとわかる

834 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 21:32:49 ]
|Д゚)<バインダが面倒な人向けにいいもの置いておきますね
|Д゚)つ[AngelScript]
|ミ サッ  [AngelScript]

835 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 21:47:45 ]
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ AngelScript!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ

836 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 23:25:21 ]
>>832,833
レスどうもです
メタテーブルの有無は重要ですね
いろいろいじってようやくユーザークラスをLuaに公開できるところまでこぎつけました
しかしlightuserdataは使い道がわからず・・・

837 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:50:27 ]
lightuserdataはCからのポインタの入れ物として使うのが想定されているらしい。

838 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 14:36:10 ]
lightuserdataは、スクリプトで操作したいクラスのインスタンスとか放り込むんじゃないの?
ゲームとかだとひとつのスクリプトで複数のオブジェクトを制御する必要があるし。

839 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 15:41:29 ]
C++のオブジェクトとLuaのオブジェクトが混在するのか・・・
C++/CLIならもっとすごいことになるな

840 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 17:14:33 ]
C++のオブジェクトをスクリプトで操作する感じかな。
例えばスクリプトで

SetSpeed(1,20)

とかいうような関数があった場合、C++側でlightuserdataを取り出し、

//lightuserdataからObjectのポインタを取り出す
Object *lpObject=(Object*)GetLightUserData(L);

//Objectを操作する
lpObject->SetSpeed(x,y);

って感じの処理をするグルー関数を用意する。

841 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:22:00 ]
lightuserdataでC++/Luaのインスタンスを協調させてみようかと頑張ってるんだができないorz
userdataでやれば上手くいくんだけどlightuserdataのほうが軽いらしいし・・・

C++側で
tableを作る
tableにインスタンスへのポインタをlightuserdataで格納
tableに各種メソッドを格納(メソッドはself(第一引数)tableからインスタンスへのポインタを取り出してクラスのメソッドをコールする)

さらにtableを積んで__gcフィールドにデリータを格納
最初のテーブルにメタテーブルとして設定

最初のテーブルを返す

という感じでやってるんだけどLua側で__gcが呼ばれてくれない
mt = getmetatable、mt.__gc(hoge)とすればちゃんとデリータを呼んでくれるのに・・・

こっちがDLL
codepad.org/5CuryxGE

こっちがLua
codepad.org/BON62sBh



842 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:44:41 ]
userdataとlightuserdataは全く別物。用途が違う。
パソコンでできることがケータイではできないと嘆いているようなもんだぞ?

843 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:23:56 ]
>>841
そういうことができなくなってる分軽いわけなんだが……



844 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:31:07 ]
じゃあlightuserdataは何に使うんだろう
コールバック的な使い方でしょうか

845 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:44:12 ]
だから主にC側で作ったインスタンス(のポインタ)の受け皿だって

846 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:51:50 ]
>>844
てか、マニュアルにもCのポインタそのものだって書いてあるだろう。
Cでよくあるハンドルスタイルやコールバックスタイルの構造を直接扱うためにある。
例えば fopenの帰り値の FILE* を void* にキャストして lightuserdata として持ってそのまま使う。

処理する時には、必ずCの関数をいちいち呼び出すのを前提として、
「LUA側は持ってるだけで何もさわらないデータ構造」として準備されてる。

これの使い方が直感的にわからない人がいるってのが驚きだった^^;

847 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 20:54:46 ]
わからない人というか、深読みする人もたまにいるな。
ひどくなると「それはただの××だよ」と言われると反論してくる。
「お前はそうやって分かったつもりになってるだけだ」とか。

848 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 21:05:07 ]
lightuserdataはテーブルのキーとして使う。
自前のオブジェクトのアドレスや、OSから渡されるハンドルをキーにしてテーブルを参照すれば、同じアドレスやハンドルに同じuserdataを対応させることができる。
ちなみに、この時のテーブルはweak tableにしておくといい。

ということを初めて知った時は目から鱗だった。

849 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 22:40:47 ]
何かLuaって面倒くさいな(´ω`)

850 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 23:14:16 ]
ひたすら軽量さが売りの言語って感じだなあ。

851 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 23:22:51 ]
ところで848のテクニック?のサンプルソースとかどっかでダウンロードできないかな?



852 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 23:50:34 ]
>>841みたいにuserdataの方にクラスのインスタンスのポインタを格納して
Luaから呼ばれるC++側の関数で取り出して使ってるんだけど、>>831
みるとuserdataはLua側でGCかかるの?

853 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 00:40:38 ]
codepad.org/8Z7d8J62

うーんこんな感じですかね?
ポインタをキーにという発想はすごい便利そうな予感がしますね
しかしグルーコード内のエラー処理とかってどうすればいいんだろう
C++例外を投げるべきなのか、関数内でもみ消してlua_errorするべきなのか

854 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 07:40:28 ]
>>852
「C++側」と「Lua側」をきっちりと分離したいんだな。
組み込み言語は、そういう幻想にうんざりしてる人のためにあるんだと思うけどな。

855 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 10:48:05 ]
Luaって速度が同じぐらいで、文法が素直な組み込みスクリプトが作られたらあっという間に駆逐されそう

856 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 11:02:47 ]
>>855
作られてないから駆逐されてない訳で

857 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 11:04:23 ]
もともとマイナーな分野なのに亜流が既にいくつも出ていてそれができないってことは
実際のところLuaのバランスが優れているってことでしょ

858 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 12:13:32 ]
罠を避けるのが上手い。
静的型 クラス メタプログラミング 並列処理 遅延評価 参照透明性 ・・・

859 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 12:58:59 ]
文法重視で速度気にしてない人は squirrel 使ってるし普通に棲み分けになってんじゃね?

860 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 13:04:33 ]
自分がLua選んだ理由は日本語の資料が一番多かったからだな。
次点の理由はスタティックリンクできたから。

861 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 19:55:29 ]
文法が嫌いとかいうやつって、
自分の英語ができないのは分法を教えるからって口だろ



862 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 20:54:28 ]
まぁ855の言うことが真ならSquirrelによってあっという間に駆逐されてるはずだな。

863 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 20:56:42 ]
>>861
逆だよ。
文法ができないから英語できないんだよ。

864 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:00:44 ]
>>863
>861が何を言ってるのか分かってるの?w

865 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:12:14 ]
俺スクリプトをLuaのVM用のバイトコードにコンパイルすればいいじゃん

866 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:19:01 ]
yieldをライブラリとして提供するのは実装の幅を狭めてると思う

867 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:28:24 ]
>>862
>>347みる限り速度はでLua>>>>Sq

868 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:34:53 ]
はじめて日が浅いけど L とか -1 が乱舞する
C拡張に馴染む日はくるんだろうか俺・・・

869 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 23:37:30 ]
>>868
俺は2日で拡張できるようになったぞ

870 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 09:34:09 ]
>>347では速度がLuaより早いにも関わらず日本ではあまり使われていないGameMonkey。
ざっと見た感じは文法も特に変な感じじゃないから、使いやすそうな感じはするんだけどね。

日 本 語 資 料 皆 無 だ け ど な

871 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 11:26:11 ]
>日本語資料
月並みなことを言うと
因果関係ではなく相関関係ならあるかもしれない



872 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 11:32:07 ]
Pawnも文法はシンプルに見えるが流行らないのはやっぱり何かが足りないんだろうな

873 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 14:25:57 ]
足りないというよりはLuaの情報量や実績やユーザ数を
代えられるほどのものではないということだろう

874 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 16:13:12 ]
Luaってゲーム以外で使われてますか?

875 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 16:40:55 ]
>>874
SciTEとか

876 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:04:31 ]
apacheとかwiresharkの拡張に地味に使われてたりする
もともとゲーム向けってわけじゃないしね

877 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:50:35 ]
Schemeが以外と流行らなかったな

878 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:56:04 ]
>>874
TextAdept
caladbolg.net/luadoc/textadept2/manual/1_Introduction.html
半分以上 Lua で記述され、また Lua で拡張可能なテキストエディタ
iconv で読み書きし内部は UTF-8 なので、日本語も使用可

879 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 21:54:30 ]
>>874
tokyotyrantでLua知ったよ

880 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 14:33:21 ]
dev.pocoo.org/projects/pygments/browser/pygments/lexer.py
www.frykholm.se/files/markdown.lua
coderay.rubychan.de/

プロジェクト管理ツール を作ろう
Redmin, Retrospectiva, Trac

基本組み込み用途だよね、とツールを作る用途で
移行する気が起きない理由はこの辺にありそうだとさっき気がつきました・・・

881 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 17:47:01 ]
lua5.1のDLL版を使ってるんですが、グルーコードの呼び出し規約は__cdeclでいいんでしょうか?
それとも__stdcallにしたほうがいいですか?



882 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:55:07 ]
>>881
たぶん__cdeclだけど仮に間違っていたとしても
name manglingの違いで簡単に見分けられるような気がする

883 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:57:16 ]
DLLを使う側の言語の規約に合わせるんだ
Cでしか使わないのなら目的にもよるがどっちでもいいと思うがな

884 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 22:45:42 ]
>>882
>>883
thxです
さっきluaのヘッダ見たところ呼び出し規約は書いてなかったので多分C言語デフォルトのcdeclでよさそうですね

885 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 14:50:36 ]
Programming in Lua携帯するにはしんどいな
PDFで売ってくれりゃいいのに

886 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 15:59:41 ]
ばらして持ち歩けよ

887 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 16:49:25 ]
組み込んで歩けよ

888 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 18:52:41 ]
lua で連想配列形式のテーブルの要素数を調べる方法ある?
配列形式だったら #tbl で、出来るみたいだけど・・・。

889 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 20:14:39 ]
userdata型に型情報を与えて
BOOL isHoge(lua_State *, index);
の形で使いたいんですが
luaのほうで予め提供されてる方法はありますか?
それとも、自分で独自にマップするものなんでしょうか?

890 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 20:46:48 ]
>>888
pairsやnextかな

891 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 21:04:58 ]
nextだとnilが設定されたフィールドでハマるので
pairsを使った方がいいんじゃまいか



892 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 23:23:44 ]
luabashがすばらしすぎる。

bashにluaインタプリタ機能追加してbashの拡張ができる&
bashが生きている間luaインタプリタも生きているのでlua変数を
保持し続ける。これ重要。

ファイル操作が多いとやっぱりシェルスクリプトが楽だけど
コマンド間の結果の連携を環境変数orファイル書き出しで
実装するのはかったるい時に大活躍な予感。


893 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 01:40:15 ]
組み込み用途以外でLua使おうなんて思わんな
汎用的に使うには標準ライブラリ貧弱だし
thenとかdoとか書くの面倒だし

894 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 02:40:47 ]
低レベルな質問で申し訳ないのですが
wxFormBuilderから追加したイベント宣言を定義するのはどうしたらいいのでしょうか?

Generateで書き出した.hファイルにある
virtual void OnButton1( wxCommandEvent& event ){ event.Skip(); }
の{ event.Skip(); }をコメントアウトすることで
出来なくも無いのですが
ヘッダファイルの行頭に
// PLEASE DO "NOT" EDIT THIS FILE!
とありますし後々修正があったときに困りそうです。

// Virtual event handlers, overide them in your derived class
このコメントが鍵のような気もするのですが正直意味が分かりません・・・

895 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 03:09:57 ]
誤爆ってる、失礼しました

896 名前:デフォルトの名無しさん [2010/02/14(日) 11:30:21 ]
   /ヽ /ヽ
  ':' ゙''"  `':,
  ミ   ・ω・ ;,
 :; . っ     ,つ Lua!
  `:;      ,;'
   `( /'"`∪


897 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 16:13:25 ]
自作型で__gcでC側のリソースを開放してるんだが
__gcをうっかり書き換えてしまわないように
メタテーブルを隠蔽あるいは変更不可にすることはできるだろうか?

898 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:19:53 ]
__gcということはユーザーデータか。ならばスクリプト側からはメタテーブル自体の変更はできない。
さらにメタテーブルに__metatableを追加しておけば隠蔽も可能になり、メタメソッドの変更、追加を防止できる。
ただしこれらはC側やdebugライブラリには効果がないし、制限する手段も(多分)無い。


899 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:52:18 ]
C++でRAIIをうっかり忘れてしまうレベルだ
初期化以外でsetmetatable()を使うのか?

900 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:33:58 ]
>>898
__metatableというのがあったのか
というかユーザデータはもともと変えられないって知らなかったorz
レスthxでした

>>899
metatableをうっかり書き換えるのはクライアントで、クラスじゃない
RAIIをうっかり忘れるのとmetatableをうっかり書き換えるのは別次元の問題
そのクライアントのついうっかりを封印して出来なくしてしまえれば安心して寝れる

901 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 23:37:24 ]
>>900
なにが別次元だ
ファイルを読んだり書いたりdllをロードしたりする、普通の言語じゃないか



902 名前:デフォルトの名無しさん [2010/02/19(金) 02:15:03 ]
(◞≼◉ื≽◟◞౪◟,◞≼◉ื≽◟ )

903 名前:デフォルトの名無しさん [2010/02/19(金) 20:31:33 ]
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ Lua!!
 彡、   |∪|  /
/ __  ヽノ /
(___)   


904 名前:デフォルトの名無しさん [2010/02/21(日) 15:46:38 ]
(´・ω・`)

905 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 16:32:07 ]
LuaInterface 使ってる?

906 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 16:55:48 ]
(`・ω・´)

907 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 17:51:50 ]
ルアのmodule(name)のnameが被ったらどうなるの?


908 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:06:58 ]
name ru houkei

909 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 02:06:10 ]
local foo = function ()
  local c = 0

  return function ()
    c = c + 1
    return c
  end
end


f1 = foo()
f2 = foo()

この場合f1とf2に渡される情報はcと関数の参照だけ?
それともcを含めて関数まるごとコピーされちゃったりする?

910 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 08:44:16 ]
クロージャとしては別々だけどコードはもちろん共有

911 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 08:54:10 ]
UpValとProtoの参照
それとenvの参照



912 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 02:47:27 ]
なんかロベルトさんがLua5.2のグローバルとか環境まわりの仕様変え始めたような。lua-l参照。

913 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 14:12:12 ]
バージョンアップは無能レベルに到達するまで止まらない
でも5.2はまだリリースされてないから止めようと思えば止められるけど

914 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 04:05:04 ]
イエルサリムスキー教授の翻訳本にuserdataのメタテーブルはLuaからCを出しぬいて手出しすることはできないから安全、みたいなことが書いてあるんだけど

ud = create_ud()
getmetatable(ud).__gc = nil

のようにごくごく普通にアクセスできるように思えるんですが・・・これは本の間違いじゃないですかね?

915 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 08:33:03 ]
>>914
保守的GCって知ってるか
解放すべきかどうか疑わしいときは、解放しないほうが安全

916 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 11:12:19 ]
>>915
今ググって知りました
しかし、保守的GCの話は>>914の話とは関係ないように思えるのですが、実は何か関係があるんでしょうか?

917 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 11:20:30 ]
Squirrelに興味があるやつは見ておけ。
よく考えられてるサンプルだと思う。
ruriko.denpa.org/201002c.html#23

918 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 18:44:23 ]
>>914
userdataはsetmetatableはできないがgetmetatableはできる。
よってその例のようなアクセスはできる。
禁止したいなら__metatableを適切な値に設定するといい。

919 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 19:47:36 ]
安全とは禁止することと見つけたり・・・

920 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 11:27:59 ]
coroutineの利点がいまいちわかんね
state:update()の戦略の方がコスト低いしわかりやすいと思うんだが

921 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 12:48:09 ]
利点がわかんないなら
君には不要って事なんだよ
無理して使う必要ない



922 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 15:01:14 ]
自分の理解している範囲の外に利点があることだって普通にあると思うけど。

923 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 15:08:48 ]
複数回に分けて動かさないといけない処理を継続的な処理として実装可能になる。
結果として同期処理の不要な軽量スレッド的な実装ができるようになる。

924 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 15:46:16 ]
コルーチンは、ゲームで「アイテムを取った直後に一定時間白くなる」という処理を書くときとか便利だな。


925 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:04:54 ]
>>921
むちゃくちゃな論理展開わろた^^

>>922
ですよね

>>923
複数回に渡って処理を分割するのってstateパターンでも普通にできることだと思う
コルーチンじゃないとどうしてもできない、あるいは明らかに優れてるっていう要素が自分には見えないんすよね

926 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:07:46 ]
Stateパターンが「普通」?
Stateパターンのような回りくどいことをしないといけないのがおかしいとは思わない?

927 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:23:51 ]
>>925
どうしてもできないから、で使ってる人はいないよ。
機能的にすぐれてる部分は全く無い。ぶっちゃけコルーチンも、
全状態保持を言語側が担ってくれてるだけのおおがかりな state だから。

State パターンで何個もあったり、さらには個数が変動したりするオブジェクトの複雑な
挙動のからみあいとか、考えたくもないけど、コルーチンだとわりとすっきり書ける。

最初に仕様にあわせて組んでいくだけなら State でもいいんだけど、
後から見直す時とか、細かい修正に対応する時とか、コルーチンのが圧倒的に読みやすいし記述も楽。
遷移図をそのまま if や while やら使って書き起こすだけだけになるからね

コルーチン切り替えのコストは、固定で組まれた State 切り替えよりかなり大きくなってしまうけど、
表記の楽さがそれを上回る、と判断した人が使うもの。あらゆる状態遷移を頭の中だけでさくさくくめてしまえるので、
State のが簡単だよって言う人は知り合いにもいるけど、それ、凡人には無理ですからー


928 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:36:19 ]
そもそもオブジェクト指向におけるデザインパターンというのは、
言語側でサポートしきれていないニーズを無理やり克服するためのバッドノウハウのようなものだ。

929 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 18:44:20 ]
>>925
例えばFizzBuzzの通常版が既に完成していて
function fizzbuzz(n, print) for i = 1, n do ... print("FizzBuzz") ... end

後になってState版が必要になったときに使う。
co = coroutine.create(function() fizzbuzz(100, coroutine.yield) end)

930 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:20:25 ]
コルーチンの便利さは、記述が簡単になるって点だな。

931 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:34:16 ]
coroutine.create(function (a, b) showMessageDialog(a, b, "Hello! World!") showMessageDialog(a, b "byebye")end) とか
lua-users.org/lists/lua-l/2009-11/msg00214.html
>Run Lua in a separate thread and somehow stop it if it takes too long. とか

おつかい行って来てよ、と丸投げしまう簡便さ
でもちゃんと帰ってこれるのかな・・・的不安



932 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 08:18:34 ]
>>930
コルーチンは記述が簡単なだけに非同期対応が面倒に感じるんだよな
>>924みたいな単純な処理ですら、アイテムを連続で取るとキャラが白くならなかったり、
直後にゲームクリアしてもキャラが白いままだったり、直後にキャラが変身するとハングしたりとか
Stateパターンならちゃんと回避できる人がコルーチンだと回避し忘れるのはありがちなこと

933 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 14:56:36 ]
(何言ってんだコイツという眼差し)

934 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 23:06:08 ]
>>932
他の人はコードで例を示しているんだから、君もコルーチンよりStateパターンが明らからに優れているという例をコードで示したら?
そうでないと、ただの知ったか君と区別つかないよ

935 名前:デフォルトの名無しさん [2010/03/08(月) 23:32:20 ]
>920の「state:update()の戦略」が良く判らん……トランザクションのこと?

936 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 00:01:37 ]
Stateパターンを理解してりゃ、そこは判らない文脈じゃないと思うけど。

937 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 00:07:39 ]
switch(state) { case WALK: … case WAIT: … case ATTACK: … }
をちょっと格好付けただけ
コルーチンと比較されるような使い方の場合は特にメリットもない

938 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 00:47:56 ]
>>936
ハイハイ、逃げないでコードで示してね
それともやっぱり、知ったか君だったのw

939 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 01:02:11 ]
そもそもコルーチンと組み込み系言語って何か関係あるの?

940 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 01:15:03 ]
このスレで話題になることが多い lua と squirrel が搭載している、以上のものではないかな
他何が搭載してたっけ

941 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 01:20:31 ]
よくわかんないけど状態遷移するたびにStateインスタンスを破棄、生成してれば
切り替わるタイミングが明確になって後片付けとかが確実になるとかそういうことなんじゃないの



942 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 02:34:51 ]
ちなみに型が厳密な言語でコルーチンを扱うと複雑になるか、制約が大きくなる
どのみちオブジェクト指向が好きならJavaとかC#とかで正解なんだよ

943 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 02:43:45 ]
小規模だとコルーチンのがキモチイイけど、遷移が複雑になってくると機械的に遷移図からコードに直せるステートのほうがいいかなって感じる


944 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 03:03:14 ]
画面遷移処理とか、ADV的な演出の逐次制御とかはコルーチンがいいかんじにはまるね

945 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 09:40:22 ]
コルーチン=呼び出すと区切りの部分まで実行してくれる関数オブジェクト
みたいな感じで理解してるな。
Luaの場合、coroutine.resumeで呼び出すと、次のcoroutine.yieldの部分まで実行してくれる。

946 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:51:46 ]
10回繰り返し、という処理を、途中でイベントを受け取ったりしながらでも、
for (i = 0; i < 10; ++i) ですらっと書けるのがコルーチン。

947 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:59:05 ]
cでcoroutineを自作しようと思ったら難しかったでござる。

948 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:26:47 ]
奇怪で制約の多いマクロを組むか
sjljでコンテキストを書き換えるかの二択だな

949 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 17:11:31 ]
その話題までいくともう組み込み言語まったく関係ないな。

950 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:01:13 ]
マルチスレッドで済む処理まで凝るーチン

951 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 13:54:54 ]
ルアってなんであんなテーブルマンセーなの?



952 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 14:17:35 ]
シンプルだからじゃない?
このテーブルひとつで普通の配列も連想配列も
オブジェクトまでも扱えるから...
でも無理やりオブジェクト指向マネるくらいなら
ほかのスクリプト言語を検討するよ

953 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 15:10:04 ]
Luaは初心者向けに見えて
実は玄人向け

954 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:48:04 ]
違うな
M向け
マニアとマゾ

955 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:37:58 ]
AngelScript|Д`)<呼ばれたので飛んできました 
GameMonkey|Д`)<俺もー
CRIScript|Д`)<俺もー

956 名前:デフォルトの名無しさん [2010/03/10(水) 18:51:20 ]
         \   l´⌒\⌒\ \\ \
           \ ヽ   )  )   \\ \\   
              (   \ \∩___∩ \\ 
           \   \  ⌒⌒| ノ      ヽ  \\      
              \ \   /  ●   ● ト、\ \\\ 
               \  Y |    ( _●_)  ミ\  \\\  
               \ / 彡、_  |∪| ノ   \  \\\
                 (____)―ヽノ' ヽ      ̄ ̄ ヽ\\
                                \,  j  l l .l }
                         Lua!   l (_ノノノノ



957 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 18:29:44 ]
過疎

958 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 18:55:01 ]
コルーチンのAAください

959 名前:デフォルトの名無しさん [2010/03/14(日) 19:23:00 ]
●)(●):::\ .\ ::::::::::::::::::::::::::::::::::::::::::::::::
(__人__)./ ̄ ̄ ̄\::::::::::::::::::::::  / ̄ ̄ ̄\ コルーチン
::` ⌒´./  ⌒  ⌒ ヽ:::::::::::::::  /  ⌒  ⌒ ヽ
:::::  ./   (●)(●) |::::::::::::  /  ( ●)(●) |
\  |    (__ / ̄ ̄ ̄\  |    (__人__) }  コルーチン
  \/、.     /  ⌒  ⌒ ヽ/、..    ` ⌒´  .ヽ
    \    /   (●)(●) |             |
  \  \  |     (__ / ̄ ̄ ̄\.      | /
   |\   \/、.     /  ⌒  ⌒ ヽ──┐ |丿 コルーチン 
  | .\  \    /   (●)(●) |──┤ | 
  |  |\  \   |    (__人__) }──┤ |
  |  |  \  \/、.    ` ⌒´ ヽ\



960 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:37:44 ]
   /ヽ /ヽ
  ':' ゙''"  `':,
  ミ   ・ω・ ;,
 :; . っ     ,つLua
  `:;      ,;'
   `( /'"`∪


961 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:50:30 ]
lldebugみたいな感じのデバッガって、他のスクリプト言語にあるんだろうか?
JavaやPythonとかだと余裕でありそうだけど、SquirrelとかAngelScriptとかにはなさそうだ…








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

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

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