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
634 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 23:20:52 ] >>632 怖いものみたさor言われるままに蓋を開けて 自分の足を撃つのがITの正道
635 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 12:43:40 ] >>630 テンプレートでほら、関数型言語っぽいプログラミングも可能になる!!! とか言われてもぶっちゃけあれキモいんだけど実際のところどうなの?
636 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 12:51:44 ] boost spiritとかboost lambdaは、使う使わないは別として、 キモいと思わない人はいないんじゃないかと。
637 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 13:51:30 ] C++をメインで使ってるけど、ぶっちゃけDirectXやライブラリの対応が いいネイティブの別言語ができたらそっちに乗り換える。
638 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 13:57:23 ] >>637 そういうのは、ラッパーライブラリひとつで解決できる話なのさー。(他言語対応) ただし動作検証用のコードは一部C++で用意しとかないといけないと思うが。
639 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 14:01:28 ] その使い勝手のいいラッパーが無いという話をしているんだろう。
640 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 15:47:16 ] boost::lambdaを使いこなしてない奴はC++を理解していない(キリッ
641 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 20:17:26 ] >>636 あれはその、なんていうかキモかわいい。
642 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 21:15:09 ] Brainf**kやろうぜ!
643 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 21:42:40 ] コンパイルにかかる時間が可愛くなさすぎる。
644 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 21:54:01 ] その視点で見るとGoは実に可愛らしい
645 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 05:14:24 ] Goって組み込めるの?
646 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 08:05:54 ] \ l´⌒\⌒\ \\ \ \ ヽ ) ) \\ \\ ( \ \∩___∩ \\ \ \ ⌒⌒| ノ ヽ \\ \ \ / ● ● ト、\ \\\ \ Y | ( _●_) ミ\ \\\ \ / 彡、_ |∪| ノ \ \\\ (____)―ヽノ' ヽ  ̄ ̄ ヽ\\ \, j l l .l } Lua! l (_ノノノノ
647 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 11:00:26 ] >>637-638 お前、なにかよさげなライブラリある度にラッパー作ってたDelphi使いの俺をなめるなよ。 さすがにもう嫌になってDelphi使ってないわ(´・ω・`) 昔は良い言語だったんだが
648 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 09:36:15 ] ああ、次はDelphi用Lua、Delphi用Squirrel、Delphi用AngelScriptだ…
649 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 02:30:59 ] ぶった斬りすいません luaでテキストから文字を読み込んで使いたいのですが、 そのあとに文字入力のために同じ関数(io.read)を使うと文字入力できなくなってしまいます。 文字読み込みのio.readと、キーボード入力のio.readの区別をつけるにはどうすればいいのでしょうか? よろしくお願いします。
650 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 02:34:20 ] >>649
651 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 05:21:19 ] テキストってテキストファイルのこと? それとも標準入力?
652 名前:>>649 mailto:sage [2009/12/12(土) 21:22:55 ] >>651 レスありがとうございます。 テキストファイルから文字を取り出してluaの配列に入れています。
653 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 14:27:50 ] >>504-505 これってコンパイル済み(.amx)ではなくて 普通のPawnファイル(.p)も実行出来ます?
654 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 15:13:42 ] と思ったらPawnはコンパイル済みのしか実行出来ないみたいですね スレ汚しすみません
655 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 19:25:17 ]
656 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 19:26:52 ] Luaファイルって、配布するときに隠すことできる? Cの組み込みで使おうと思っているのだけれど、Cはコンパイルすれば自動的にソースは見えなくなってくれるからおk。 けど、Luaファイルで記述した部分がもろばれになってしまうので、どうにかならないかなぁということです。
657 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 19:43:00 ] 隠すというのがコンパイル後のバイナリでOKというなら、Luaもバイナリ出力することができるよ。
658 名前:656 mailto:sage [2009/12/14(月) 20:47:13 ] まじか。 blog.dlixia.com/index.php?UID=1243877250 こんな感じなのか。 なんとなくだけど、Luaは簡単にリバースエンジニアリングできそうな予感がするな。。。 まぁ及第点はあるよね、きっと。 ありがとう!
659 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 23:07:40 ] javascriptを組み込んだらいいんじゃね? ユーザー多いし、資料多いし。 って思ったら、処理系実装が軒並みLGPLとかMPLとか・・・・
660 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 00:00:39 ] スクリプト言語から離れるが、自作のファイルアーカイブクラスでメモリにスクリプトやコンパイル後のバイナリを読み込み、 そのメモリの内容をコンパイル、もしくはバイナリ読み込みするようにすればいいと思う。
661 名前:デフォルトの名無しさん [2009/12/15(火) 00:34:42 ] >>659 CRIScriptとかはどうなんだ? BSD風ライセンスらしいが
662 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 00:35:06 ] さげわすれた・・・・
663 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 02:36:52 ] CRIScriptね。 どうなんだろ、使用感を聞いたことがない。 あれ、主開発者がApple行っちゃったけど大丈夫かな、CRIなのにww いや、すごく期待はしてるんだよ
664 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 03:14:13 ] SpiderMonkeyかな
665 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 05:28:35 ] >>652 はじめ言っていることが良くわからなかったんだけど、いまわかった。 www.lua.org/manual/5.1/manual.html#pdf-io.input When called with a file name, (略), and sets its handle as the default input file. つまりいちど io.read でファイルを読み込むとデフォルト入力ファイルが変更されるので、 それ以降は io.read では同じファイルをさらに読み込もうとするみたい。 標準入力(キーボード)から読み込みたいときは、 io.stdin:read() を使えば良いんじゃないかな?
666 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:54:38 ] あー、もう!Pawn性能いいから組み込もうとしたけど ソース汚くて処理系によってはエラー続出で修正必須、もうやだ int main(int argc, char *argv[]) { extern AMX_NATIVE_INFO console_Natives[]; extern AMX_NATIVE_INFO core_Natives[]; extern AMX_NATIVE_INFO string_Natives[]; AMX amx; cell ret = 0; if (aux_LoadProgram(&amx, "test.amx", NULL) != AMX_ERR_NONE) exit(1); if (amx_Register(&amx, console_Natives, -1)) exit(1); if (amx_Register(&amx, core_Natives, -1)) exit(1); if (amx_Register(&amx, string_Natives, -1)) exit(1); if (amx_Exec(&amx, &ret, AMX_EXEC_MAIN)) exit(1); printf("%ld\n", (long)ret); aux_FreeProgram(&amx); return 0; } 悪銭苦闘しながらもコンパイラ、amx 実行側のビルド完了まで行ったから試しに サンプルコード(examples/cards.p) をコンパイルして実行してみたけど aux_LoadProgram のところでメモリエラー起きて落ちる もうPawn意味が分からない、資料少なすぎ助けて・・・・
667 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:57:56 ] 追記 Pawn ファイルで include <###> をしていない物は正常に実行出来た
668 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 12:14:25 ] ドキュメントが全てpdfだったり、インストールが実行形式だったり 変なところで敷居上げてる気はするな 敷居を下げる配慮をした結果なのだろうとは思うが
669 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 12:47:31 ] PawnはFloat使おうとして挫折した。なんで組み込み型じゃないんだよ。。。。
670 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 14:54:37 ] スレタイにある「Squirrel」の読みはアメリカ英語で「スクワール」で、 イギリス英語だと「スクウィール」のようです。
671 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 15:21:23 ] Luaのライブラリを最小限のサイズにしたいのだけど 削っても動作に影響ないファイルとかあります?
672 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 16:48:46 ] >>671 パーサー部分は削った? 参考→Lua書庫内etc/noparser.c
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みたいな)