- 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
- 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 とできるからそのほうが安全・・・ってのが 使いどころなのかな?
|

|