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
463 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 08:14:53 ] >>462 できました! ありがとうございます
464 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:04:14 ] Luaのテーブルってキーを使ってアクセスするようになってますが、 キーが分からない場合に全ての項目を調べたい時のサンプルってありますか?
465 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:14:26 ] for k,v in pairs(t) do hoge(k,v) end
466 名前:463 mailto:sage [2009/11/21(土) 09:49:37 ] >462 でグローバル環境を空にはできましたが、 これだけだと再使用ができないような? このあとlua_openlibsを使っても標準ライブラリが使用できません。 Lua_Stateをcloseせずに再使用するのは大変みたいですね。
467 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:09:26 ] >>465 thx pairsやnextでなめれるんですね
468 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:14:16 ] lua_openlibは副作用でレジストリにも変更加えるからじゃね? 走らせたいチャンクを一旦スタックに積んで そいつの環境を置き換えるのはどう?
469 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:56:34 ] >>468 具体的なやり方が今一思いつきません。 load〜で積んだあとに空の環境に置き換えるって意味じゃないですよね?
470 名前:469 mailto:sage [2009/11/21(土) 11:03:04 ] そもそもスクリプト側で使ったグローバル"変数"だけ初期化して ライブラリ等のテーブルは使いまわせたらlua_Stateの再構築の コストを減らせて、細かいスクリプトの連続呼び出しに良いのではと 考えていたんですが、Luaは変数も関数もその他色々もテーブル分けて ないので、選択的に変数だけで消すのに無理がある気が・・・
471 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:04:51 ] 何でデフォの宣言がglobalなんだろうかね・・・
472 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:52:21 ] >>469 いや、そういう意味。走らせるチャンク毎に独自の環境を差し込む。 luaL_openlibsに関しちゃ対象がグローバル環境決め打ちのサポート関数でしかないんで どのみち使えないんだけど、そこはチャンクの環境に差し替えるテーブルの__indexにフックかけて グローバル環境に委譲してしまうって感じでどうか。 これならlocalをつけない変数宣言はチャンク毎の独自の環境に登録されるだけなので グローバル環境の汚染も防げる。やってることはmodule関数と大体いっしょ。 コード書いて検証したわけじゃないのでうまくいくかは知らんw
473 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 13:01:22 ] --ライブラリ等のテーブル_Gと、スクリプト側のenvironmentを分ける local metatable = { __index = _G } local chunk = loadfile(filename) local environment = {} setmetatable(environment, metatable) setfenv(chunk, environment) --Cを使えばなんでもできるので、ダイナミックリンク禁止 environment.require = function() end environment.package = {} return chunk()
474 名前:469 mailto:sage [2009/11/21(土) 13:11:20 ] >>473 なるほど、こうやるのですか。 ありがとう!
475 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 10:32:35 ] ゲーム内にN個のオブジェクトが存在する。 それぞれのオブジェクト固有の状態を保存するために、Cプログラム側でN個のテーブルを用意する。 オブジェクトの行動を定義したluaファイルをロードしてlua_Stateインスタンスを作る。 オブジェクトはN個だが、このインスタンスは1つしか作らない(みんな行動パターンは共通なので) で、個々のオブジェクトの状態を更新するときに、そのオブジェクトに対応するテーブルを引数にして lua関数を呼び出し、テーブルを更新させる。 というのをやりたいのですが、N個のテーブルを作るのが「?」です。 テーブル作ってスタックに積むのはいいんですが、なんせスタックに積むわけですから、 どこかの操作で勝手にPOPされたり、消えたりしませんかね??
476 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 12:35:08 ] >>475 そういう用途のためにレジストリとリファレンスの機構が存在する。 1. 任意のオブジェクト(この場合はテーブル)を作る 2. int table = luaL_ref(state, LUA_REGISTRYINDEX); でレジストリに該当テーブルを格納してリファレンスを取得。 オブジェクトはスタックからは解放されて、レジストリテーブルでのみ保持された状態になる。 リファレンス値は全体でユニークで、C 側でそのままオブジェクトを区別しつつ単純保持するのに使える 3. 使いたい場面(この場合は引数として渡す時)では、 lua_rawgeti(state, LUA_REGISTRYINDEX, table) としてレジストリからスタックに取り出してきて使う 4. 最後破棄する場合は luaL_unref(state, LUA_REGISRYINDEX, table) として解放させる N個つくるならこんなかんじで // テーブル確保 int table[N]; for (int i=0;i<N;i++) { lua_newtable(state); table[i] = luaL_ref(state, LUA_REGISTRYINDEX); } // 例えば table[0] をわたして関数を呼ぶ lua_getfield(state, LUA_GLOBALSINDEX, "func"); // 関数取得 lua_rawgeti(state, LUA_REGISTRYINDEX, table[0]); // 引数としてつむ lua_call(state, 1, 0); // 引数1戻り値無し // テーブル解放 for (int i=0;i<N;i++) { luaL_unref(state, LUA_REGISTRYINDEX, table[i]); } ちなみに squirrel だとオブジェクトのリファレンスを、直接C側から HSQOBJECT としてスタックから取得して 保持できる。概念としてはこっちのがシンプル。
477 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 03:18:07 ] ぶった切りすいません luaは組み込みに最適だと思うんですが、 lua単独でGUIを表示してゲームを作り、実行ファイル(exe)に変換はできるのでしょうか? もしできるなら、教えてください。 ぐぐっても探すことができなかったので・・・
478 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 04:22:36 ] 自前で組み込むの前提の言語でそういうもの作ってもあまり嬉しくないのでだれも作ってないと思います
479 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 05:02:50 ] 言ってることが良く分からないが、Lua単独ではGUIは無理だと言っておく そもそもこのスレで紹介されてる言語は、用途を特定しないスクリプトであって組み込んでどのように動かすかはその人次第 そういう用途なら○○ツクールやHSPにしておきなさいな
480 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 08:23:05 ] 厳密には単独ではないけど、Luaのモジュールか何かでSDL使うのとか無かったっけ?
481 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 09:34:33 ] 自分でGUI処理の組み込み部分を作り、スクリプトリソースをリンクすれば、 単独exeに出来るだろ。
482 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 10:12:43 ] >>477 その用途なら、Pythonじゃね?
483 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 12:08:15 ] I think so.
484 名前:477 mailto:sage [2009/11/23(月) 16:28:01 ] みなさん、レスありがとうございます。 どうしてもluaでゲームを開発しなくてはいけない状況なのです。 ウィンドウの表示がわからないため、苦戦しています。 どの参考書を読んでも書いてなくて。 別の言語にウィンドウを作らせて、動作はLUAだけで、などでできますでしょうか?
485 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:30:06 ] >>484 なんでできないと思うの?
486 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:38:15 ] >>485 レスありがとう みんなやってないし、コマンドプロンプト上か ほかの言語に組み込むだけのものかと思いまして・・・
487 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:46:43 ] aims.dna-softwares.com/ こことか見てみ Luaを主体にしたゲームエンジン作って、このサークルのソフトは殆どLuaで作られてる それにしても、その知識量からどうしてもLuaで作らなきゃいけない状況が発生するなんて いったいどんな大見得切ったんだよ
488 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:53:23 ] 参考書読んだのなら、Luaを使っている人がどのような目的と仕組みで走らせるのかは理解した? あくまで組み込みスクリプトなんだよ? ウィンドウズを表示するという関数を組み込んでもらって、 Luaにインターフェース提供してもらわないとprintやscanすらままならないよ ゲーム開発でスクリプタとして働くのならLuaの言語仕様を覚えるのと、PGからバインドした関数一覧もらってこれば良いよ
489 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:00:01 ] レスありがとう 正直、大学のゼミでこの言語を使うということに決めたんです いくつもある言語から選んで、luaを選んだのは自分だけ。 頼る人もいないので、本とネットで勉強してるかんじです。 >>487 サンプルをdlして参考にしていますが、難しい。 もっとじっくり読んでみます。 >>488 用途は理解しているつもりですが、これをメインにしてプログラムを組んでいかなくてはいけなくて・・・ やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。
490 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:11:31 ] 明日、学校でごめんなさいして もっと詳しくて質問できる奴のいる言語で 最初からやり直す方がましのような気がする。
491 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:13:36 ] >>490 それはしたくないというか、結構この言語は気に入っているので辞めたくないんですよ
492 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:17:17 ] それでここきてなんとかしようなんてあますぎる
493 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:18:29 ] C側とのデータのやり取りがめんどいから余り良い言語とは・・・
494 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:26:23 ] >>489 > やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。 Lua を使うと言って、こういったバインド系の作業はしたくないとか、意味がわからん。 もともとそうやって使う言語だろうに。 「みんなやってない」とか言ってるが、何個のプロジェクトを見て言ってるのか怪しいもんだ。
495 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:26:36 ] Luaの言語を理解して使えるようになる手間を1とすると、 ゲーム用のC/C++ライブラリを組むのが最低10倍〜ぐらい手間も時間かかるよ Win32APIからDirectXかOpenGLまで使えるようにならないと話にならない ゲームライブラリは既存のものでいいならC素人ならDXライブラリを組み込むのが多分もっとも最短だと思う ゼミテーマが「組み込みスクリプト研究」で実例として「ゲーム」を選んだのなら、外部ライブラリにどっぷり頼っていったほうが幸せだとは思う
496 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:27:39 ] 怒られたくなくて嘘を付いている幼児じゃあるまいし 無理せず諦めておけよ
497 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:33:10 ] >>493 つまりAngelScriptがいいって事ですね。 わかります。
498 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:42:29 ] 自分の実力より遙かに上の事をやろうとしても無駄になるだけだぞ ちょっと上ならともかく分不相応すぎ。諦めろ
499 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:48:07 ] Luaじゃ宿題スレも使えないしねえ。 (答える奴はどうせこのスレも見てる)
500 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 18:23:45 ] HSPスレに逝けよ
501 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:35:31 ] とりあえず、この本みてみて、何とかなるか考えてみたら。 スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践 www.amazon.co.jp/dp/4797348550 サポートページ lua.mine.nu/w/LuaBookSupport どうなんだろうなあ。
502 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:46:36 ] ttp://en.wikipedia.org/wiki/Category:Lua-scriptable_game_engines Luaでルーチンいじれるゲームとかゲームエンジンとかあるけど 日本語の資料があんまりないと思う
503 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 10:46:49 ] Lua for Windows: A batteries included Lua installation on Windows. luaforwindows.luaforge.net/ これいっこダウンロードしてインストールすれば、 GUI から OpenGL から DB 接続までなんでもはじめから入ってるよ。 ウィンドウ作る程度なら、サンプルそのまま使える。
504 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 07:48:34 ] Pawn始める人への組み込みメモ(修正版) // .amxファイル(コンパイル済みPawnバイナリ)を実行するための最小コード。 // 必要ファイル: amx.c/h amxaux.c/h amxcons.c/h amxcore.c osdefs.h #include "amx.h" #include "amxaux.h" #include <stdio.h> AMX_NATIVE_INFO console_Natives[]; AMX_NATIVE_INFO core_Natives[]; int main(int argc, char *argv[]) { 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_Exec(&amx, &ret, AMX_EXEC_MAIN)) exit(1); printf("%ld\n", (long)ret); aux_FreeProgram(&amx); return 0; }
505 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 07:49:39 ] // Pawnコンパイラの最小プロジェクト // 必要ファイル: libpawnc.c lstring.c/h memfile.c/h sc1.c〜sc7.c sc.h sc5.scp sc7.scp scexpand.c sci18n.c sclist.c scmemfil.c scstate.c scvars.c svnrev.h // それに加えて ../amx でアクセスできる場所に osdefs.h amxdbg.h が必要 // 実行時にsc1.cのsetconfig()あたりでNULLエラーが発生するなら[プロジェクトの設定->構成プロパティ->全般->文字セット]でUnicodeを無効にしておく #include "sc.h" int main(int argc, char *argv[]) { return pc_compile(argc, argv); }
506 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 14:11:52 ] luabindを使っていて気になったのですが、 //cpp struct A { int x; }; A *ptr; A& ref() { return *ptr; }; A a; luabind::module(L) [ luabind::def("ref", &ref), luabind::class_<A>("A") .def_readwrite("x", &A::x) ]; ]; --lua v = ref() v.x = 1 --参照なのでC側のaにアクセスできる クラスのインスタンスの参照を渡すときに、上の様に一度staticかglobalな変数 (上の場合ptr)を経由させる方法しか思いつかなかったのですが、ダイレクトに 渡す方法は無いものでしょうか?
507 名前:506 mailto:sage [2009/11/25(水) 14:14:17 ] 訂正 A a; ptr = &a; luabind::module(L) [ luabind::def("ref", &ref), luabind::class_<A>("A") .def_readwrite("x", &A::x) ];
508 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 17:56:07 ] Lua詳しくないんでアレだが、lua_pushlightuserdataではダメなの?
509 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 09:43:19 ] Luaで実行状態を全部ファイルに保存して、また復帰するようなことは可能ですか?
510 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:10:30 ] >>509 Lua側でioで記録、読み込みするコード書くしかないかも
511 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:18:51 ] Smalltalkなら可能です
512 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 11:32:21 ] >>509 言語機能としてはないので、無理やりやることになる。 一応こういうのはあるけど、安定してるかどうかは不明。 lua-users.org/wiki/PlutoLibrary
513 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:19:28 ] >>508 試してみましたが、luabindではligthuserdataではなくuserdataを使用して 独自の型ID等を付加してチェックしているようで、無理でした。 luabindのソースを追ってみたところ、luabind::detail::convert_to_luaで C++側の変数の参照をluaのスタックに積めることが分かったので、 これでどこかのテーブルに置くとか引数で渡すとかの方法が使えそうです。 luabindのドキュメントにもサンプルにも、こういったスタックを使う方法が 記載されていないので、本来の使い方とは違う気もしますが。
514 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:24:32 ] >>513 通常、スクリプトにはC++クラス型のインスタンスのポインタを渡してポインタで操作させる。 C++の参照はC++固有の機能なので他の言語では使えないと考えたほうがいい。 別の変数に代入した瞬間(参照で無く実体のコピーとして)にコピーコンストラクタが発動したって文句言えないぞ。 まあバインダがエラー吐いてコンパイルの段階で失敗すると思うが。
515 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:29:57 ] 休止モードを呼び出せばいいんだよ。
516 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 14:09:30 ] >>514 bind側に参照を渡した場合は、ポインタに変換して管理してるみたいですね。
517 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 08:47:27 ] >>510 >>512 ありがとうございます。 Pluto調べてみます。
518 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 09:36:22 ] LuaでGUIムリだろと思ってたら、意外とバインダが出てくるもんだなw お前ら優しすぎw
519 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 10:21:52 ] 小学生に方程式ムリだろと思ってたら、意外と鶴亀算が出てくるようなもんだな
520 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 11:31:33 ] 最近はメインループのかなりの部分まで組み込みスクリプトで作っちゃうのが主流になりつつあるのかな。
521 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:02:53 ] Luaだと入力補完のあるエディタが無いから 逆にやり難いと感じる俺
522 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:11:48 ] >>520 大半を組み込み言語化した結果、パフォーマンスの壁にぶちあたって 機能分離可能なところはどんどんC++化していく、ってのが定番だとオモ サンプル:俺
523 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:45:05 ] まあ通常、動的(型付け)言語はネイティブコードと比べて10倍以上は遅いからな。 オレもスクリプトでゲーム開発環境を一通り書き上げたところだが、 60フレームまわしたらそれだけで意外にCPU食ってしまうので、ちと困ってる。 最低ラインがPentium 4 2.4GHzくらいになった。
524 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 14:49:37 ] JIT付き静的型付けスクリプト言語 穴場だから誰か作れば 有名になれるかもよ
525 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 15:10:52 ] >>524 すでにあるっちゅうねん。 .NET Framework向けだがな。
526 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 15:54:13 ] >>.NET Framework向けだがな。 駄目じゃん
527 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 16:18:55 ] 作りたいと本気で思ってる俺が来ましたよ もし作るならスクリプトで定義したクラスのインスタンスがC++から簡単に作れて、マルチスレッドとか使って同時に複数のインスタンスを参照してもおかしくならない仕様にしたいな
528 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 16:46:03 ] つAngelScriptJIT ただしやり方は不明。
529 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 18:52:02 ] LuaJIT ってなかったっけ?
530 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 19:09:51 ] Luaは静的じゃないでしょ
531 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 19:18:30 ] ああごめん、静的を見落としてた
532 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 13:59:21 ] luaのlua_pcallのerrfncが呼ばれたときに、元のエラーメッセージとは 別にソースファイル名、行番号を収集する場合なんですが、 lua_getstackのレベル指定で、1から++しながら順にたどって 最初にcurrentlineの値が-1以外になったレベルがソースファイルの 階層と判断して問題ないでしょうか?
533 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 15:45:53 ] メンバアクセスの:と.ってどう違うの?
534 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 17:27:09 ] .が通常のメンバアクセスで、:でアクセスする場合は v.(v ,〜 に展開される。 例: v:open(arg) -> v.open(v, arg)
535 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 17:53:43 ] d
536 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:04:12 ] >>17 問題1 使用言語: R f <- function (n) {substr("abcdefghijklmnopqrstuvwxyz",1,n)} > f(6) [1] "abcdef" > f(30) [1] "abcdefghijklmnopqrstuvwxyz"
537 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:06:04 ] すみません。 書くところを間違えました。 ごめんなさい。
538 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:06:48 ] 聞かれてないけどついでに補足すると.は[]に展開される v:member(arg) -> v.member(v, arg) -> v[menbe](v, arg)
539 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:09:23 ] v['menber'](v, arg)
540 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:17:00 ] へー じゃあメンバアクセスのたびにマップ検索してんのか 遅くならないのかな
541 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:28:37 ] 空想具現化プログラミングというところから落としたlua5_1_3_Win32_mbenc_a2.zipを展開したところbin2c5.1.exeにウイルス検知ソフトが反応したんですが、これは大丈夫なんでしょうか?
542 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:31:42 ] >>540 そりゃ勿論遅いだろうさ
543 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:41:44 ] メンバだけの話じゃないだろうし。 変数名からなにから全ての識別子の判定で毎回どこかのテーブル見てるはず。
544 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:59:47 ] >>541 カスペルスキー系の誤検出のはず。 bin2cとか別に普段使うものでもないから削除しておいても良いかと。
545 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:20:09 ] >>543 ローカル変数は実行時はテーブル見ない。例えば、 local a = b * c + d を local a = b * c a = a + d に変えても速さは変わらない。
546 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:37:56 ] >>544 ありがとうございます安心しました
547 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 23:33:25 ] 静的型付けならPawnいかがかな?
548 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 22:05:16 ] ちょっと確認したいんですが lua_registerで登録した関数を呼び出すときには新しいスタックが毎回生成される、したがって Glue関数内部ではlua_gettopでスタックの数を確認する必要なしにスタックの1番目が最初の引数、2番目が・・・としてよい 同様に、返り値もスタックの1番目が最初の返り値、二番目が・・・としてよい(何も考えずにスタッククリアして返り値を積めばいい) これは正しいですか?
549 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 00:52:46 ] うむ
550 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 06:17:28 ] >>524 ActionScript 3.0 がそっちのほうを目指しているんじゃないかな。 いちおう Flex SDK はオープンソースらしいから、 自分のプログラムに組み込むこともできるかも。 >>540 Lua Performance Tips www.lua.org/gems/sample.pdf for i = 1, 1000000 do local x = math.sin(i) end runs 30% slower than this one: local sin = math.sin for i = 1, 1000000 do local x = sin(i) end
551 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 21:46:34 ] Luaについて質問です。 10進数で書かれた文字列、たとえば「\130\160\130\162\130\164」は Lua上で「あいう」となりますが、外部ファイルに記述したものを io.linesで取り出したものだと、コード列が返ってきてしまいます。 これを通常の文字列に変換したものとして使いたいのですが、どうしたらいいのでしょうか。
552 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 21:50:08 ] >>549 ありがとうございます
553 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 22:20:40 ] >>551 多分C側でバイナリに変換しないとダメじゃないだろうか。 Luaの標準ライブラリでももしかしたら出来るかもしれないが、 Cの方がてっとり早いだろう。
554 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 23:27:17 ] SquirrelのほうがLuaよりゲーム向けなんかな? どっちも知識なしだったらSqから勉強でいいのだろうか
555 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 23:54:06 ] >>554 どちらも汎用スクリプトだから処理系単体ではどちらがよりゲーム向けということはない。 周辺ライブラリやバインダの入手性や使い勝手の差はあると思うけど。
556 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 01:51:00 ] >>554 速度がLua>Sqで結構大差あったりするんで ttp://ja.wikipedia.org/wiki/Squirrel のLuaとの違いに強い魅力を感じるんでなければLuaがオススメ。 特に知識なしなら、Luaのほうが日本語資料が充実してるんで勉強しやすいかと思う。
557 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 02:00:16 ] lua は文法がな……
558 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 08:15:39 ] 日本語は文法がな・・・
559 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 09:41:13 ] AngelScript|Д゚)ジー
560 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 11:48:28 ] >>551 loadstring をつかえばできるよ。 local str = "\130\160\130\162\130\164" -- io.lines で取り出した文字列 local decode = loadstring("return \"" .. str .. "\"") print(decode())
561 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 15:29:08 ] >>449 コンパイラがOSロケールに依存してるから英語にしましょうなんて愉快すぎるわ 他のロケール依存アプリ全部道連れにする方法なんぞ万人に薦められんだろ
562 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 16:39:37 ] 問題が起こるのはShiftJISを決めうちして作っている一部の馬鹿アプリだけだろ。 なぜ全部とか間抜けな話になるのか、頭の悪い奴の考えはさっぱり分からん。
563 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 16:40:53 ] バカアプリの代表が Visual Studio って話じゃないのん?
564 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 18:39:01 ] そんな事よりお前ら、GameMonkeyについて語るんだ。
565 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 18:47:34 ] winアプリにスクリプト組み込む場合、メッセージ(WM)処理どうしてる? 自分はマルチスレッドにしてるんだけど、WM_CLOSE受けたときに スクリプトが走ってたら、スレッド他殺していいものなのかどうか。
566 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 18:57:22 ] 保存したいデータがあるかどうかで判断しね?
567 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:00:15 ] データ保存しない場合はどんなタイミングで落としても問題無いってこと?
568 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:16:24 ] スクリプトを複数スレッドで別々に動かす状況がわからんな… Luaだと、Lua_yieldでスクリプトの処理を一時停止させて次のスクリプト、という感じではダメなの?
569 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:43:49 ] それだとスクリプト書く側に停止を意識させないとダメですよね?
570 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 22:23:10 ] スクリプト側にメインループを置いて処理してるの?
571 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 00:38:27 ] winmainでメッセージループ、別スレッドでスクリプト。 スクリプトは入力待ち(マウス等)で関数無いで停止することがあって、 その間にメッセージループ側にWM_CLOSEとか来た場合にどうやって 終了させるかで色々迷っている、と。 スクリプトで割り込みを意識するような書き方は手間なので、 スレッドごと落とせると楽なんだけど、lua_Stateってスレッドごと 落とした後にlua_closeに渡して大丈夫なのか?ってのが疑問な わけですよ。 lua_call系にステップ実行があると良かったんですがね。 ステップ数も指定できたりするのが。
572 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 09:26:27 ] >>571 スレッドを強制終了したら、基本的に何が起こってるか不明というか たとえばガベコレの途中だったりしたら(その他でもあらゆる不明な原因で) 異常な状態になるからやめたほうが良い。 手段としては、別スレッドのほうの処理をコルーチンで構成しておいて、 コルーチンがyieldしたタイミングでコルーチン呼び出し側のコードで 終了チェックするようにする。 あとウエイトが絡む関数については、待ちループで終了チェックをするようにして、 終了フラグが立っていたらyieldを起こすようにする。 とかそんな感じじゃないの。
573 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 09:30:46 ] >>571 無限ループ防止という観点では、デバッグフックで1行実行ごとに関数呼ばせて、 その中でカウンターアップしていって、カウンターが一定の数になったらyieldとかいう手もある。はず。
574 名前:デフォルトの名無しさん [2009/12/03(木) 11:24:54 ] スクリプト側の待ちループの中でlua_yieldを呼び出すグルー関数を呼びだすようにしておき、 メッセージ処理の待ちの間、具体的には MSG *lpMes=&m_Msg; ZeroMemory( lpMes, sizeof(MSG) ); while(lpMes->message!=WM_QUIT) { if(PeekMessage(lpMes,NULL,0,0,PM_REMOVE)) { TranslateMessage(lpMes); DispatchMessage(lpMes); } else { 〜〜〜 } } の、〜〜〜の部分で1回目はlua_call、2回目以降はlua_resumeでスクリプトを呼び出せばいいような気がする。
575 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 11:28:06 ] >>565 他のスレッドはいきなり殺したらあかんでしょ。 メインスレッドからフラグたてて、よしなに自殺
576 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 11:29:49 ] てか、この辺のマルチスレッドの話ことってLua関係なくないか?
577 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 11:44:10 ] >>571 (before) 入力待ち(マウス等)で関数内で停止する (after) yieldを使い、外で停止する 入力が来たらresumeで関数内に戻る WM_CLOSEが来たらresumeしないまま終了
578 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 12:59:28 ] lua関係ないよな。普通にC++だけで書いてても全く同じだ。 まあ、lua (ないしは squirrel) なら、yield のタイミングで同期を とるようなコードにしておくのが無難ってのはその通りだと思われ
579 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 20:42:03 ] >>573 なるほど、それならステップ実行できますね。 >>他のレスくれた方々 具体的に書いた例だとマルチスレッドになってるけど、根本は WindowsでLua使うときにメッセージ処理をどうしてるかって話ですから。 避けて通れないだろうから、実際に組み込んでる方々はどう対処してるかが 気になったもので。
580 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:32:02 ] >>579 シングルスレッドモデルで組んであれば処理の流れ的に問題になるようなことは別にない あとはオブジェクトをどう管理してるかの問題。 ウインドウのインスタンスを lua 配下にしてある(生成もlua側から)なら、それぞれのウインドウの メッセージ処理部から、lua でのインスタンスの適当なメソッド (onCloseとか) をイベント的に callback させて閉じるかどうかをスクリプト側に判定させればいいだろう ウインドウのインスタンスがグローバルなら、lua 側も同様に グローバルメソッドをイベントとして呼び出して判定させるように組めばいい
581 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 18:14:29 ] Luaのスタックとか文法とかにいまいち馴染めないからエンゼルスクリプトをやってみようかと思ったが日本語資料がなさすぎて泣いた
582 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 18:28:07 ] >エンゼルスクリプト なんか可愛いな
583 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 18:39:34 ] つ英文マニュアル 結構読みやすいよ。 あと、WIPのtest_featureに入ってるサンプルもわかりやすい。
584 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 20:37:59 ] エンゼルスクリプトって速度どれくらい?
585 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:19:06 ] >>584 >>347
586 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:19:32 ] >>584 >>347
587 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:20:21 ] おい、結婚するか
588 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:46:45 ] そうだな。結婚すると良いよ。
589 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:49:36 ] じゃあ俺が息子になろわ
590 名前:551 mailto:sage [2009/12/04(金) 21:52:36 ] >>553 ,560 回答が遅くなってすみません。 >>560 さんの方法で望みの動作になりました。 お二方とも、本当にありがとうございました。
591 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:34:54 ] >>581 tolua++を使えばいいと思います。 ttp://lua.mine.nu/w/LuaBookSupport
592 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:36:01 ] 日本語資料が無いから辛いと書いてるのにそんなの勧めるなよw
593 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:46:07 ] Pawn何で人気ないん?
594 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:49:03 ] Luaの入門書読み終わったけどユーザーデータについてあんまし書いてなかったぜ ポインタ渡せないとオブジェクトの操作ができないジャマイカ
595 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:49:50 ] Luaの入門書ってどれのこと?
596 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 00:06:50 ] 入門Luaプログラミングというやつなんだけど、ちょろっと1Pくらいしか説明がなくてわかりにくかった
597 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 00:21:15 ] luaといえば、下の二つのスクリプトを順に実行すると、 --a.lua local v = 1 local function f() print(v) end fv = f --b.lua fv() 結果 1 感じになるんだが、関数の実体もガベコレされてるのかな? 関数内で使ってるlocal変数もコピーかリファレンスを持つことになると?
598 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 00:32:19 ] >>597 Luaはよく知らないが、単にグローバル変数を 2つのスクリプトで共有してるだけなんじゃね?
599 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 05:19:56 ] >>597 fv が f をつかんでいる間はつねに f のなかから v が参照可能だよ。 Lua の関数も参照されなくなればもちろんガベコレされる。 > 関数内で使ってるlocal変数もコピーかリファレンスを持つことになると? Lua ではこういう変数のことを upvalue と呼んでますが、 必要に応じてスタックからヒープへコピーされるみたい。 www.lua.org/docs.html ここにある The implementation of Lua 5.0 っていう論文に、 イラストつきで説明があります。
600 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 06:44:46 ] >>599 完全な回答をありがとう。凄くすっきりしました。 この辺の仕様はとても良くできてるなと思いますね。
601 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 07:34:58 ] closureみたいなもん?
602 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 08:39:50 ] >>601 そう。レキシカルクロージャです。
603 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 11:28:25 ] すっきりとした仕様だね。 Schemeライクというか。
604 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 12:22:26 ] squirrel だと同等のものは「Free variables」と呼ばれててこちらは対象の明示指定が必要だね
605 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:12:22 ] 未踏ユースにLua高速化が採択されているんですね。 スクリプト言語Luaの高速化と省メモリ化 (2009年度上期未踏ユース) www.ipa.go.jp/jinzai/mitou/2009/2009_1/youth/gaiyou/sk-3.html hogelog/lua (ソースコード) github.com/hogelog/lua [lua]記事一覧 - hogeなlog (開発者ブログ) d.hatena.ne.jp/hogelog/archive?word=*%5Blua%5D
606 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 15:06:08 ] >>605 エエー、あんな古臭い言語を今更高速化するのが予算つくのか。 LuaJITだってあるのに。
607 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 15:20:44 ] ヒント: 電気通信大学
608 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:15:48 ] >>606 ところがLuaJITのGCにはあんま手が入ってはいないんだ。
609 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:41:58 ] こんなんで採択されるのかよw ローカルなスクリプト言語 高速化してたら切りが無いぞ
610 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:43:19 ] 本家と連絡取らずにやってるんなら残念な結果になる可能性が高い気がする。
611 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:45:53 ] よーしじゃあパパAngelScriptを高速化しちゃうぞー
612 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:56:48 ] C言語そのままスクリプトにしたようなのってありますか?
613 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:10:43 ] >>612 文法のことならSquirrelとかPythonがある程度近いと思うがそのまんまってのはたぶんない
614 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:14:43 ] >>612 csl.sourceforge.net/csl.html
615 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:17:18 ] >>612 C++だけど、CINT
616 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:16:35 ] クロージャとコルーチンさえあればもうCでいい気がしてきた俺には十分魅力的だなぁCINTわ
617 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 08:17:06 ] CINTにクロージャとかコルーチンとかあったか?
618 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 08:25:09 ] >>616 それだったらGoのほうがいいんじゃ。
619 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 11:33:15 ] Cっぽい文法ならAngelScriptでいいじゃない
620 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 11:25:54 ] pawnとgoとgamemonkeyのスルーっぷりw
621 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 11:32:15 ] C言語みたいなプログラム書きにくい言語でスクリプト記述したいとか、どんなマゾよ?
622 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 11:34:23 ] 世の中、なにか一つ習得するとそれにしがみつくのが習性という猫もいるんだ。
623 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:37:44 ] >>621 これってたまに見かけるが、Cってそんなに書きにくいか?
624 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:49:32 ] >>623 慣れだよ
625 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:56:34 ] Cの書きにくさは、資源管理(malloc/free)がプログラマ任せであることや、 文字列操作がめんどいことにあって、構文や文法自体はそんなに書きにくくは ないよね。Cが書きにくいなら、JavaがあそこまでCを引き継いだような仕様には なってないと思う。 # でもまぁCが書きにくいと主張する人は、JavaはCから書きにくさを継承したと # 主張するか。
626 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 18:04:16 ] Cの書きにくさ ・クロージャがない ・ガベージコレクションがない ・メモリアクセス保護がない ・文字列型がない ・というかコレクション型が一切ない ・というかforeachがない ・せめてイテレータくらい付けて ・関数オブジェクトの定義が面倒(定義と関数ポインタの扱いが別) ・というかファーストオブジェクトになってない とまあ、仮にオブジェクト指向でなかったとしてもこれくらいあるわけだ。
627 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 18:06:45 ] アセンブラに比べたら格段に書きやすい
628 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 18:10:14 ] あー複雑な型の宣言や定義の構文は魔境入ってるかw
629 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 20:04:32 ] Cは40年近く前に出来た化石言語だからな。 当時のスペックのコンピュータで動かすためにキモイ仕様にしてるから書きづらくて当然。
630 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 21:35:50 ] ネイティブ系ではテンプレートの便利さに触れると、C++以外の言語を受け付けなくなるよ。
631 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 21:57:19 ] >>630 ふーん……。 D言語とかOCamlとかHaskellは触ってみたことあるの?
632 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 22:09:32 ] 臭いものに蓋をするのがITの正道 蓋をしないネイティブ系・組み込み系は邪道だな
633 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 23:16:45 ] なでしこやろうぜ!
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みたいな)
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とかにはなさそうだ…