【Lua】組み込み系言語総合 その2【Squirrel】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/05/25(月) 09:11:41使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/
その他の参考URLは>2から
■前スレ
【Lua】組み込み系言語総合【Squirrel】
http://pc12.2ch.net/test/read.cgi/tech/1205208141/
■過去スレ
その3 http://pc11.2ch.net/test/read.cgi/tech/1160799232/
その2 http://pc8.2ch.net/test/read.cgi/tech/1063711237/
その1 http://pc5.2ch.net/tech/kako/1034/10341/1034182349.html
0153デフォルトの名無しさん
2009/08/20(木) 16:54:28ですよねー
もうちょい汎用的なバインド方法が欲しいところだ
0154デフォルトの名無しさん
2009/08/20(木) 19:43:09試してないけど
extern "C" {}
でC言語リンケージに変換してみるとか。
0155デフォルトの名無しさん
2009/08/26(水) 05:27:30Rubyも楽に組み込めるといいんだけどね。例えば、スクレイピングの部分だけまかせるとかさ
0156デフォルトの名無しさん
2009/09/07(月) 08:56:09http://www.igda.jp/modules/bulletin/index.php?page=article&storyid=122
0157デフォルトの名無しさん
2009/09/07(月) 11:13:190158デフォルトの名無しさん
2009/09/07(月) 11:31:580159デフォルトの名無しさん
2009/09/07(月) 11:45:23Xtalに特に興味があるなら別のイベントに期待って感じかな。
0160デフォルトの名無しさん
2009/09/07(月) 12:08:050161デフォルトの名無しさん
2009/09/07(月) 12:19:500162デフォルトの名無しさん
2009/09/07(月) 12:24:07言語じゃないけど、NativeClient
0163デフォルトの名無しさん
2009/09/08(火) 00:34:11JITコンパイルじゃないが。
0164デフォルトの名無しさん
2009/09/08(火) 12:15:39ttp://www.compuphase.com/pawn/pawn.htm
0165デフォルトの名無しさん
2009/09/08(火) 23:51:16これ良さそうだけど人気ないのかな
0166164
2009/09/09(水) 02:11:46ttp://pawn.my-sv.net/index.php?%B4%F0%CB%DC
0167デフォルトの名無しさん
2009/09/11(金) 08:52:360168デフォルトの名無しさん
2009/09/11(金) 11:08:55帰れ
0169デフォルトの名無しさん
2009/09/12(土) 12:24:04LuaJIT 速いらしいよ。
C ほどじゃないだろうけど、Python には大体勝ってるみたい。
http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=luajit&lang2=python&box=1
0170デフォルトの名無しさん
2009/09/12(土) 14:17:340171デフォルトの名無しさん
2009/09/12(土) 14:30:542.6系ならさらに速くなってる。
ただし速いのは数値計算で、文字列計算などはPythonより遅かったりするが。
0172デフォルトの名無しさん
2009/09/12(土) 15:36:57「Cで書いた (だから速い)」と喧伝しながらこっそりと組み込むものではないのか?
0173デフォルトの名無しさん
2009/09/12(土) 15:43:13Pythonを組み込みに使っている人は、どんなアプリに使ってますか?
0174デフォルトの名無しさん
2009/09/12(土) 17:14:54マジで!? IronPython スゴイんだな。
数値計算に関してなら、以前に計測したとき Lua は Python より2〜5倍速かったんだけど。
数値計算については .NET すごいということなのかな?
0175デフォルトの名無しさん
2009/09/12(土) 19:32:490176デフォルトの名無しさん
2009/09/12(土) 19:37:08C/C++にスクリプト言語の動作を追加するのは柔軟性を増やすことで
開発・運用を容易にするためであって速度のためではない。
スクリプト言語で実装した部分が重いなら改めてC/C++側に移植することを考えればいいだけのこと。
0177デフォルトの名無しさん
2009/09/12(土) 19:43:510178デフォルトの名無しさん
2009/09/12(土) 19:55:55ユーザによる拡張をばりばり推進するぜ派(洋ゲー、リアルタイム物メイン)と、
そんなもん完全にアウトオブ眼中だぜ派(和ゲー、アドベンチャー系メイン)で、
まっぷたつですな。
0179デフォルトの名無しさん
2009/09/12(土) 20:10:01プログラマの部長級が開放的という幸運なケースであってさえ、
総務営業やら会社も巻き込むとやっぱり日本的感覚で
ゲームの内情を客に見せるのは御法度になるね。
プログラマ出身のワンマン社長のところしかありえないでしょう。
0180デフォルトの名無しさん
2009/09/13(日) 09:18:47洋ゲーと言えども、360やPS3でMODを許しているものは少ないだろう。
>>178の(和ゲー、アドベンチャー系メイン)ってPCのエロゲ・ギャルゲのことを
指してるんだろうけど、俺としては違和感があるなぁ。
0181デフォルトの名無しさん
2009/09/15(火) 23:34:31この本持ってる人いる?
luaを始めて見ようと思ってamazonで検索して出てきて最新ぽいから買おうと思ってるんだけど
0182デフォルトの名無しさん
2009/09/16(水) 21:34:58読んでみようと思って大きな本屋まで行ってきたが、
SQLiteの本とDirectXの本読んでたら満足しちゃってそのまま帰ってきてしまった。
0183デフォルトの名無しさん
2009/09/17(木) 05:14:33リファレンスマニュアルの日本語訳も収録してるなら長く使えそうかも。
リファレンス読んでよくわからないところを本文で確認とかできそうだし。
http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html
よくここにお世話になるんだけど、内容が古いのか、
本家の英語版にくらべると結構抜けがあるんだよね。
0184デフォルトの名無しさん
2009/09/17(木) 10:12:06おいw
0185デフォルトの名無しさん
2009/09/17(木) 18:27:44このSSで使用してるソフトご存知の方いたら教えていただけませんか
0186デフォルトの名無しさん
2009/09/17(木) 21:15:21ttp://tibid.seesaa.net/
0187186
2009/09/17(木) 21:23:49ttp://www.vector.co.jp/vpack/browse/pickup/pw7/pw007523.html
0188デフォルトの名無しさん
2009/09/17(木) 21:23:50NoEditor
0189デフォルトの名無しさん
2009/09/18(金) 12:39:470190デフォルトの名無しさん
2009/09/25(金) 16:57:06プラグインのようなことをさせたいのですが
何か参考になるサイトやソースコードはないでしょうか?
0191デフォルトの名無しさん
2009/09/26(土) 06:26:45メインと切り離す必要が本当にあるならプロセス間通信。
メインの内部で別スレッドを作って回すだけでいいならマルチスレッド。
0192デフォルトの名無しさん
2009/09/26(土) 09:17:46コルーチンで協調的マルチスレッドにするとかどうですか?
0193デフォルトの名無しさん
2009/09/26(土) 09:51:46貴重な意見ありがとうございます
コルーチンで実装してみて上手く行かないようなら
マルチスレッドを試す方向で行こうと思います
0194デフォルトの名無しさん
2009/09/26(土) 14:57:40マルチスレッドに移行したがな。
ゲームで使用するリソースを開始前に一括してロードするような
FPS的な仕様にしないと単独スレッドの実装は難しい。
0195デフォルトの名無しさん
2009/09/28(月) 13:19:32一つのソフト上で同時に複数の
Luaスクリプトを動かす事って可能なの?
変数やスタックがバッティングしそうな気もするし
実際そういうことをしてるアプリ見たことないな
0196デフォルトの名無しさん
2009/09/28(月) 13:21:090197デフォルトの名無しさん
2009/09/28(月) 13:59:39Luaはインタプリタの状態がグローバルにならない作りになってる。
0198デフォルトの名無しさん
2009/09/28(月) 21:44:360199デフォルトの名無しさん
2009/09/29(火) 09:55:14Lua のコルーチンを改造してマルチスレッドにするという記事があるみたい。
http://www.lua.org/gems/
本は読んでないけど、サンプルコードがダウンロードできる。
Enhanced Coroutines in Lua
Patrick Rapin
0200デフォルトの名無しさん
2009/09/29(火) 14:32:03更にLua内でもコルーチンを使うからか
なんか富豪だな
0201デフォルトの名無しさん
2009/09/29(火) 15:38:360202デフォルトの名無しさん
2009/09/29(火) 15:49:56単純な数値計算ではLuaの方が倍くらい早い。
が、いずれにせよCなどの静的型付言語よりは10分の1以下のスピードなので、
あまりヘビーな処理はさせないようにすること。
とはいえ、80:20の法則で大部分のコードはスクリプト側に移行できるはず。
処理能力が足りなくなったら下回りからC/C++に再度移植していく。
0203デフォルトの名無しさん
2009/09/29(火) 15:55:21そうですか、一見するとSquirrelはLuaの欠点を補い
構文もC/C++に近いなど利点ばかりかと思っていたけど
それなりに欠点があってゲーム用に改良された割には
未だ使用例が少ないのが現状みたいですね
0204デフォルトの名無しさん
2009/09/29(火) 16:14:07いや、C++で書いてたころは普通にSquirrel使ってたよ。
とりあえず基本的なレベルでの不満はない。
オブジェクトの寿命は常に問題になるけどね。
今はもうC++でプログラムは書かないようにしてるから関係なくなった。
0205デフォルトの名無しさん
2009/09/30(水) 18:40:24気になるなw
> 今はもうC++でプログラムは書かないようにしてるから関係なくなった。
今は何で書いてるんですか?
.NET系?
0206デフォルトの名無しさん
2009/10/02(金) 05:46:32C#+IronPythonだ。レポはこのスレに何回も書いてるのでログを見てくれ。
しかし静的型付言語でいいならBooでもいいかも……(はっきり言ってこっちの方が速いし)
まあ今回は途中まで作ったからIronPythonでやってしまう予定だけど。
0207デフォルトの名無しさん
2009/10/02(金) 05:47:140208デフォルトの名無しさん
2009/10/03(土) 12:21:55単純計算でステート数分増えるのかな?
検証してるサイトないか探したけど見当たらない
0209デフォルトの名無しさん
2009/10/03(土) 12:29:140210デフォルトの名無しさん
2009/10/04(日) 13:35:48それを可能にするパッチがある、とあるけど
実際どこで配布されてます?
ここ数日ずっと探してるけど見つからず
0211デフォルトの名無しさん
2009/10/04(日) 16:57:50continueは
http://lua-users.org/wiki/LuaPowerPatches
とか
http://lua-users.org/lists/lua-l/2009-06/msg00331.html
だな。
0212デフォルトの名無しさん
2009/10/04(日) 18:56:28VC++6.0でLua環境を構築しています。
「スクリプト言語による効率的ゲーム開発- C/C++へのLua組込み実践」 の中で
紹介されているtolua++を適応しています。
あるクラスの関数をtolua++を用いてLuaに公開しようと実装したのですが、
extern宣言した関数がリンカエラーでビルドする事が出来ません。
やりたい事は下記の様な感じです。
class CHoge
{
public:
char* GetName( CHage* pHage );
};
このGetName関数をtolua++でグルーコードに出力して、
VCのプロジェクトに登録しています。
出力したグルーコードに記述されている、GetName関数がリンカエラーになってしまいます。
*今はグローバル関数にして、extern宣言で対応しています。
クラスの関数をLuaに公開するには何か特別な方法が必要なのでしょうか?
上記の本にはクラスの関数の場合について記述されていない様なので質問しました。
宜しくお願いします。
0213デフォルトの名無しさん
2009/10/04(日) 20:20:58thx、無事適用完了しました
0214デフォルトの名無しさん
2009/10/06(火) 04:29:51http://www.codenix.com/~tolua/tolua++.html#classes
ここみると、クラスごとバインドするしかなさそう。
あるいは、登録したい関数をクラスメソッド(static 宣言)にするといいのかな。
0215デフォルトの名無しさん
2009/10/06(火) 17:54:33それを可能にするパッチとか出てたりします?
自分で改造しようにも手に負えなくて
0216デフォルトの名無しさん
2009/10/06(火) 18:01:45オレの場合は自力でやったけど複雑過ぎて無理だった orz
Luaってなんで配列が1からなのかね
いまでもムズムズ、どうにかならないものか
0217デフォルトの名無しさん
2009/10/06(火) 18:28:12check(ls, ';');
って書けばいいんじゃないかな
0218デフォルトの名無しさん
2009/10/06(火) 22:06:320219デフォルトの名無しさん
2009/10/06(火) 23:39:100220デフォルトの名無しさん
2009/10/07(水) 01:28:23回答ありがとうございます。
クラスのバインドで試してみます。
0221デフォルトの名無しさん
2009/10/07(水) 12:03:44ニューメリカルレシピ・イン・C っていう本にその逆のことが書いてあったな。
一般的な数学では添え字は 1 からはじまるのに C だと 0 からだから困ると。
で、その本では添え字を 1 から始めるように、配列のポインタを 1 つ前にずらしてた。
つまり、int arr[10] みたいな配列をつくったら、
int *arr1 = arr - 1 と定義しておけば、arr1[1]、arr1[2]、……、arr1[10]
っていうふうにアクセスできる。
0222デフォルトの名無しさん
2009/10/07(水) 12:29:33厳密には、配列の範囲から外れたところを指してるポインタに
まつわる動作は未定義なので、仕様に煩い人には不評。
(C FAQ より ttp://c-faq.com/aryptr/non0based.html )
0223デフォルトの名無しさん
2009/10/07(水) 13:11:48>>219
SquirrelとかAngelScriptじゃダメなの?
0224デフォルトの名無しさん
2009/10/07(水) 13:16:16パッチではなく、リファクタリングするべき。
#define FIRST 1
0225デフォルトの名無しさん
2009/10/07(水) 13:16:360226デフォルトの名無しさん
2009/10/07(水) 13:21:29Lua以外にするとメモリ消費や処理速度が劣ってしまうのが嫌で
やっぱり仕様に従って使うしかないですか
0227デフォルトの名無しさん
2009/10/07(水) 14:04:47;|ノ||` ┬-‖
__,/●●| __ | | ‖ L...Lua..
| ; |`(_●)/ ミ . Y ‖
| .彡|∪||、 , .| | ‖
/:~ ̄ ̄ ̄ ̄:/.| | ‖
,|:::::. .......::/>> / ‖
/.::::: .. ...::::::|'(/\_/ ‖
../:.::: .. :.:::/.:/ /‖\
/.:::. ....:::..:::/.:/
' ̄ ̄ ̄ ̄ ̄ _/
|_| ̄ ̄ ̄ ̄|_|
0228デフォルトの名無しさん
2009/10/07(水) 18:31:000229デフォルトの名無しさん
2009/10/07(水) 18:57:150230デフォルトの名無しさん
2009/10/07(水) 19:28:510231デフォルトの名無しさん
2009/10/07(水) 20:37:210232デフォルトの名無しさん
2009/10/07(水) 23:24:33なつかしすぎてどっかから鼻血でたわw
0233デフォルトの名無しさん
2009/10/07(水) 23:41:070234デフォルトの名無しさん
2009/10/08(木) 13:50:08for文ではそのままイテレータをまわしてしまうし。
0235デフォルトの名無しさん
2009/10/09(金) 19:50:43消費を抑えたくて手動設定する場合
どれくらいの値がベストだろう?
0236デフォルトの名無しさん
2009/10/09(金) 23:42:36数十キロバイトの仮想スタックなんて小さな問題だ。
0237デフォルトの名無しさん
2009/10/11(日) 01:41:47>>236 に捧ぐ
"O"zapper!!
0238デフォルトの名無しさん
2009/10/11(日) 03:42:200239デフォルトの名無しさん
2009/10/11(日) 19:42:49「どっかから」てお前はケツから鼻血がでるのかよw
>>236
RubyでフレームワークとしてRailsを搭載したかのようなメモリ消費量だなおいw
0240デフォルトの名無しさん
2009/10/11(日) 19:52:53IronPythonがもりもりメモリ食うからな。
ほんと環境にやさしくないスクリプトエンジンだぜ。
まあ、C#で組むにはこれが一番「普通」なスクリプティングエンジンなので。
0241デフォルトの名無しさん
2009/10/11(日) 21:24:500242デフォルトの名無しさん
2009/10/14(水) 02:42:38乱数を表示させたあとに、もう一度同じプログラムを実行すると
シード値が変わらずにまったく同じ乱数が表示されてしまう。
どうすればこのシード値を初期化して、実行するたびに違う乱数を
表示させられるの?
0243デフォルトの名無しさん
2009/10/14(水) 02:54:44一般的には、タイマーの値とか、ユーザ入力の時間差を測定したりして、それを srand() につっこんで対応する。
0244デフォルトの名無しさん
2009/10/14(水) 03:04:26レスありがとう
まだはじめたばっかりでホームページさがしながらの手探り状態なんだけど、
math.random()で()の中に1から10までの値をいれるよね?
そしたらそれ以外にmath.randomseedを書けばいいってこと?
0245デフォルトの名無しさん
2009/10/14(水) 03:16:42プログラムの頭で math.randomseed(os.time()) とでもしておきなされ。
0246デフォルトの名無しさん
2009/10/14(水) 03:22:08本当にありがとうございました。
これからもっと勉強してきます
0247デフォルトの名無しさん
2009/10/14(水) 13:48:26lua_errorで強制的に例外を発生させる方法以外に
何かありませんか?
1つのスクリプトを実行する一般的な使い方なら問題ないのですが
スレッド毎で同時に複数のスクリプトを実行させる場合
リソースの保護をしても違うスレッドからスクリプト(ステート)を閉じようとすると
原因不明のエラーで強制終了してしまいます
0248デフォルトの名無しさん
2009/10/14(水) 14:52:00コルーチン化していつでも終了できるように作っておくのがLWL流 :)
0249デフォルトの名無しさん
2009/10/14(水) 14:57:040250デフォルトの名無しさん
2009/10/14(水) 15:03:25肝心な部分を説明し忘れてました
私が今作ってるのは>>190の方が言われたような
luaを同時実行させてプラグイン機能を実現するもので
それをコルーチンでやるとなると実質スレッド1つで
全処理をすることになるのでCPUリソースの消費が激しく
ステートも一つだから変数の重複などが問題になって
それらを回避するためにマルチスレッド上で
それぞれスクリプトを動かす必要があるのです
しかしあるプラグインでエラーが起こり
それに関連するスクリプトを全部停止(解放)したい時
現スレッドから他スレッドのステートを閉じようとすると
強制終了につながるエラーが起きてしまう状況で
0251デフォルトの名無しさん
2009/10/14(水) 15:35:28ちがうよー。
コルーチンというのはプログラマが入力した任意のタイミングで
動作を中断できるようにした仕組み(yield)のことであって、
それを使って複数の仕事を1スレッドで同時に実行というのは二次的なものに過ぎないんだよ。
したがって複数のスレッドで実行しても(エンジンの実装に問題が無いなら)問題ない。
で、中断されて制御が戻ってきたタイミングでそのまま開放してあげればいい。
0252デフォルトの名無しさん
2009/10/14(水) 15:54:24>変数の重複などが問題
↓
>強制終了につながるエラーが起きてしまう状況
戦況が悪化してるが、今さら撤退する気はない
典型的なパターンですね
■ このスレッドは過去ログ倉庫に格納されています