【Lua】組み込み系言語総合 その3【Squirrel】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/05/01(土) 01:03:17使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/
その他の参考URLは>2から
■前スレ
【Lua】組み込み系言語総合【Squirrel】
http://pc12.2ch.net/test/read.cgi/tech/1205208141/
【Lua】組み込み系言語総合 その2【Squirrel】
http://pc12.2ch.net/test/read.cgi/tech/1243210301/
■過去スレ
その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
0357デフォルトの名無しさん
2010/10/14(木) 02:58:590358デフォルトの名無しさん
2010/10/14(木) 03:16:22a = HogeWrap(); a:open() とかして使うのが楽かと。
class HogeWrap {
public:
HogeWrap() : data(NULL) {};
~HogeWrap() { close(); };
void open() { close(); data = OpenHoge(); }
void close() { if (data) { CloseHoge(data); data=NULL;} }
... 他いろいろ必要なメソッド if(data) を忘れずに
private:
Hoge *data;
};
0359デフォルトの名無しさん
2010/10/14(木) 04:08:26趣旨がw
>>358
クラスでラップしちゃう方法やら
ネームスペースで囲って必要なものだけフィルタする方法もありますが
そういったやり方はどうも不恰好に見えたので質問した次第であります。
何故Hoge型をスクリプト側に認識させたいかといいますと
出来る限りオリジナルに近い形で公開したいのです。
そうすればクラスリファレンス不要ですから迷うことはありませんしね。
オリジナルのソースを尊重しソース改変などの2度手間を避け
#include "xxx.c/cpp" などのライブラリの意味を根本から覆す事のない
ナイスなアイデアがあるのではと。
とりあえず、結論としては
c/cppソース内に隠蔽された構造体、クラスをバインドする方法はない
という事ですかね?
何か抜け道があると思うんだけどなぁぁぁ
0360デフォルトの名無しさん
2010/10/14(木) 09:51:33えーと、たとえば操作メソッドが必ず第一引数に構造体のポインタもってるとか
構造に規則はあるんでしょ?じゃあ、それを前提にしたバインダを自前で書けば良いだけ。
クラスにラッピング〜ってのは、luabind をはじめとする多くのバインダはクラス(構造体)構造を
前提にしたバインダだから、それを使うのならそれにあわせないとダメだよってだけの話。
0361デフォルトの名無しさん
2010/10/14(木) 20:54:11みんなもっと天使スクリプト使えばいいのに
0362デフォルトの名無しさん
2010/10/14(木) 20:58:290363デフォルトの名無しさん
2010/10/14(木) 23:29:150364デフォルトの名無しさん
2010/10/15(金) 01:09:090365デフォルトの名無しさん
2010/10/15(金) 01:51:08C++のくびきから離れると、楽だぜー。
0366デフォルトの名無しさん
2010/10/15(金) 07:46:50疑問である。
0367デフォルトの名無しさん
2010/10/15(金) 09:23:52> ぶっちゃけLuaってC++と相性あんまし良くないよね
具体的にどのあたりが?
これだけ簡単に組み込めて
高速で柔軟性もあり
コンパクト(シンプル)で習得も容易なのに
相性が悪いとは到底思えないんだけど
0368デフォルトの名無しさん
2010/10/15(金) 09:32:59Box2D のバインダを作ってみたけどすごく簡単だった。
0369デフォルトの名無しさん
2010/10/15(金) 09:46:53ガベコレってリソースの寿命把握しにくいし
テンプレート使えないし
C++じゃなくてCで使ったほうがいいよ
0370デフォルトの名無しさん
2010/10/15(金) 11:23:250371デフォルトの名無しさん
2010/10/15(金) 11:31:14逆にそう言うのはCで書いたほうがいい。
Squirrelは処理系自体はC++で実装されてるけど
外部APIはC言語準拠になってるわけだし。
0372デフォルトの名無しさん
2010/10/15(金) 11:34:170373デフォルトの名無しさん
2010/10/15(金) 11:37:52仮想スタックに対する操作というレベルで考えれば、
LuaもSquirrelもほとんど差はないんだぜ?
0374デフォルトの名無しさん
2010/10/15(金) 11:44:02どうしてもスタックさわる必要がある場合でも、そのスタック処理自体を隠蔽したC++のクラスをまず作るだろう。
0375デフォルトの名無しさん
2010/10/15(金) 11:46:26あれはあれでC++すぎて使う意義がぴんとこないんだ
0376デフォルトの名無しさん
2010/10/15(金) 12:56:47少年よ神話になれ
0377デフォルトの名無しさん
2010/10/15(金) 17:52:390378デフォルトの名無しさん
2010/10/15(金) 18:04:230379デフォルトの名無しさん
2010/10/15(金) 18:08:200380デフォルトの名無しさん
2010/10/15(金) 21:20:01他のスクリプト言語と同じで外部に記述できるのがでかいと思うよ。
C/C++とほとんど文法変わらないから、C/C++側で定義している列挙子(enum)やら定数やらほとんどそのまま持っていける。
Luaとかと違ってデフォルトでコルーチンないけど、作るの簡単だし。
0381デフォルトの名無しさん
2010/10/15(金) 22:02:59/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0382デフォルトの名無しさん
2010/10/15(金) 22:04:59...‐''゙ . ` ´ ´、 ゝ ''‐...
..‐´ ゙ `‐..
/ \
.................;;;;;;;;;;;;;;;;;;;;;;::´ ヽ.:;;;;;;;;;;;;;;;;;;;;;;.................
.......;;;;;;;;;;゙゙゙゙゙゙゙゙゙゙゙゙゙ .' ヽ ゙゙゙゙゙゙゙゙゙゙゙゙゙;;;;;;;;;;......
;;;;;;゙゙゙゙゙ / ゙: ゙゙゙゙゙;;;;;;
゙゙゙゙゙;;;;;;;;............ ;゙ ゙; .............;;;;;;;;゙゙゙゙゙
゙゙゙゙゙゙゙゙゙;;;;;;;;;;;;;;;;;.......;............................. >>381 ................................;.......;;;;;;;;;;;;;;;;;゙゙゙゙゙゙゙゙゙
゙゙゙゙i;゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙;l゙゙゙゙゙
ノi|lli; i . .;, 、 .,, ` ; 、 .; ´ ;,il||iγ
/゙||lii|li||,;,.il|i;, ; . ., ,li ' ; .` .; il,.;;.:||i .i| :;il|l||;(゙
`;;i|l|li||lll|||il;i:ii,..,.i||l´i,,.;,.. .il `, ,i|;.,l;;:`ii||iil||il||il||l||i|lii゙ゝ
゙゙´`´゙-;il||||il|||li||i||iiii;ilii;lili;||i;;;,,|i;,:,i|liil||ill|||ilill|||ii||lli゙/`゙
´゙`゙⌒ゞ;iill|||lli|llii:;゙i|||||l||ilil||i|llii;|;_゙ι´゚゙´
0383デフォルトの名無しさん
2010/10/16(土) 01:05:430384デフォルトの名無しさん
2010/10/16(土) 01:08:15鼻で笑えるくらいに訓練されているとC++くらい使えるしLuaの組み込みくらいは余裕だろ
0385デフォルトの名無しさん
2010/10/16(土) 03:50:060386デフォルトの名無しさん
2010/10/16(土) 08:15:07{
};
class Fuga
{
class Piyo {};
public:
shared_ptr<Piyo> f(vector<Hoge> hv, Piyo const & p, optional<iostream &> ios);
};
バインダって使ったこと無いんだけど
こう言うクラスも簡単にバインドできるの?
0387デフォルトの名無しさん
2010/10/16(土) 10:06:000388デフォルトの名無しさん
2010/10/16(土) 10:10:40{
public:
shared_ptr<Piyo> f(vector<Hoge> hv, Piyo const & p, optional<iostream &> ios);
};
コレの意味がまったく理解できない俺に誰か解説お願い
0389デフォルトの名無しさん
2010/10/16(土) 10:16:53boost::shared_ptr
boost::optional
あとはぐぐって自分で調べれ
0390デフォルトの名無しさん
2010/10/16(土) 10:31:34や
optional<> f(){}
という使い方ぐらいなら分かるけど
クラスメンバで
shared_ptr<Piyo> p(...);
という使い方は見たこと無かったので。
と思ったら今分かった
shared_ptr<Piyo> f(vector<Hoge> hv, Piyo const & p, optional<iostream &> ios){}
これか。
0391デフォルトの名無しさん
2010/10/16(土) 11:57:52でも typemap かけば、まぁ、可能といえば可能。簡単かどうかは知らん。
ただ、ゲームなどにスクリプトエンジンを組み込むときは、将来の変更のことも考えれば、
できるだけホスト言語とスクリプト言語のインターフェイスはシンプルししておいたほうがいいと思うんだ。
0392デフォルトの名無しさん
2010/10/16(土) 12:02:500393デフォルトの名無しさん
2010/10/16(土) 13:24:58ただ、いまあるバインダはテンプレート型意識してつくられてるのはあまりないから、
それぞれ全部メソッドを手で指定するはめになる。よく使うものは、バインダ側を拡張して、
テンプレート型ごとの自動登録処理を書いてしまうのが妥当だね。
shared_ptr は、スクリプト側のリファレンス管理とかぶるから意味が薄いな。
ただ、データの管理用の構造を組むのは簡単な部類だから、C++とのソース共用の意味では
バインダ側で汎用処理できるリリーサをはめるテンプレート一つ足しておくのは悪く無い選択。
わりと簡単に書けると思う。
vector はなー。vector そのものを型としてエントリするのは簡単だけど、
スクリプト側の配列系とうまくやりとりできたほうが嬉しいだろうからなぁ。
スクリプトの配列から全部つめなおし処理をしてくれるような型変換コードをかくか、あるいは、
lua はよく知らんが、squirrel は配列とかの参照のメタメソッド登録ってのができるので、
スクリプトの array と見た目的には同じようにアクセスできるような細工をしたクラスにするか。
スクリプト側の配列は型が汎用だけど、これはいれれるものは限定されるから、そのあたりは
入れようとした時点で例外で対処、とかかな。map も連想配列とうまくバインドできると便利そうだよね。
optional は、うーん、これはあれかなスクリプト側で void とか null とか渡されたときと、
目的の型をわたされたときとでうまく詰め替えて処理するような型変換処理を書くのがいいかな。
そんなわけで、この程度なら、テンプレート使いなら特に問題なくバインダを拡張することで対応可能だと思われる。
なかなか良いお題なので、自分のバインドコードにはそれぞれあとで考えて足してみることにするよw
0394デフォルトの名無しさん
2010/10/16(土) 17:41:47〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
0395デフォルトの名無しさん
2010/10/16(土) 17:49:040396デフォルトの名無しさん
2010/10/16(土) 19:16:01〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ GameMonkey!!
彡、 |∪| /
/ __ ヽノ /
(___)
0397デフォルトの名無しさん
2010/10/16(土) 20:17:00単体テストのために立てたものです。
GameMonkeyと開発者とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
組み込み言語研究所
0398デフォルトの名無しさん
2010/10/16(土) 20:25:020399デフォルトの名無しさん
2010/10/16(土) 20:40:16てめぇが作れ
0400デフォルトの名無しさん
2010/10/16(土) 20:43:100401デフォルトの名無しさん
2010/10/16(土) 21:14:240402デフォルトの名無しさん
2010/10/16(土) 21:46:07つかLISP族はプログラマー以外にスクリプトを欠かせる場合になかなかよいぞ。
専用命令を手続きとしてつくっておいてやれば、
HTMLのようにマークアップしてくれでOK。
細かい制御が必要な場合だけ共同作業。
0403デフォルトの名無しさん
2010/10/16(土) 22:01:550404デフォルトの名無しさん
2010/10/16(土) 22:38:510405デフォルトの名無しさん
2010/10/16(土) 23:55:11ShiftJIS対応版とかも簡単だよ!
0406デフォルトの名無しさん
2010/10/16(土) 23:59:480407デフォルトの名無しさん
2010/10/17(日) 03:07:49特定用途のシーケンスをだらだら書かせたりするのは割りとらくなんだけどなあ。
DSLって行ってもSQLや正規表現みたいに勉強が必要なものは作らないよ。
0408デフォルトの名無しさん
2010/10/17(日) 03:11:020409デフォルトの名無しさん
2010/10/17(日) 03:18:18インデントのやり方をXMLやHTML風にしてあげるだけで、
ずいぶん初心者にもわかりやすくなるよ。
()のチェックや想定以外の手続き名のチェックとか、
そこらへんは自前のプログラムかけて検出するしね。
0410デフォルトの名無しさん
2010/10/17(日) 22:32:59RubyのDSLが簡単に並みの詐欺じゃないのか
0411デフォルトの名無しさん
2010/10/17(日) 22:35:21DSLつくってもけっきょくはへんすうやすうしきうめこんだりぷりぷろせっさつくるのもめんどうだよねー
というときのプログラマー向けの用途だと思ってた。
0412デフォルトの名無しさん
2010/10/17(日) 22:43:280413デフォルトの名無しさん
2010/10/17(日) 22:44:04\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
0414デフォルトの名無しさん
2010/10/17(日) 22:48:120415デフォルトの名無しさん
2010/10/17(日) 22:52:330416デフォルトの名無しさん
2010/10/17(日) 22:59:24そりゃあ、既にトレンドはマルチコアの活用に移りつつあるのに、
その一つ手前の軽量スクリプトで柔軟な開発をしよう、に留まってるからだ。
Luaを始めとしてほとんどの軽量スクリプトの処理系は、マルチスレッド化に対応できない。
0417デフォルトの名無しさん
2010/10/17(日) 23:01:260418デフォルトの名無しさん
2010/10/17(日) 23:02:320419デフォルトの名無しさん
2010/10/17(日) 23:46:570420デフォルトの名無しさん
2010/10/18(月) 00:15:150421デフォルトの名無しさん
2010/10/18(月) 01:59:05頭固いな
スクリプト側で完結しようとせずに
並列化したい処理は組み込み先の言語にやらせたらいいじゃない
0422デフォルトの名無しさん
2010/10/18(月) 07:03:20複数のスクリプトを同時に走らせたい場合って無い?
結構あると思うんだけど
0423デフォルトの名無しさん
2010/10/18(月) 08:27:38走らせたきゃ走らせたら?
それが出来ない縛りでもあるの?
0424デフォルトの名無しさん
2010/10/18(月) 11:11:03んー、全部スクリプトで作ってるのならあるだろうけど、
C/C++にくみ入れてる状況ならスレッドが必要な処理は C側に持つよ。俺なら。
スクリプト側はコルーチンで十分。
0425デフォルトの名無しさん
2010/10/18(月) 12:14:51クロージャーでもできる?
0426デフォルトの名無しさん
2010/10/18(月) 12:57:03localの有無
できる
0427デフォルトの名無しさん
2010/10/18(月) 13:03:09明らかに時間がかかる処理とか、そういうのが入ってきたらどうするのよ。
コルーチン中で処理を小出しにするテクニックはあるけど万能じゃないし、
コルーチンにだけ頼ってたらすぐに破綻すると思うんだが?
0428デフォルトの名無しさん
2010/10/18(月) 14:35:15> どれだけ時間がかかるか判らない処理とか、
> 明らかに時間がかかる処理とか、そういうのが入ってきたらどうするのよ。
喩えのレベルが低すぎ。
> コルーチン中で処理を小出しにするテクニックはあるけど万能じゃないし、
> コルーチンにだけ頼ってたらすぐに破綻すると思うんだが?
スレッド使いなよ
少し前に同じ内容のレスが何度もあるんだから少しは目を通しなよ
連携が容易なんだから得意なほうに処理をまかせちゃいなよ
0429デフォルトの名無しさん
2010/10/18(月) 15:01:12そういうのはC側におくよ、と言ってるわけなんだが……。
コルーチンにたよるのはむろんそれで問題が無い範囲のみだ。
マルチスレッドのスクリプトを否定するわけじゃないよ。PC用にアプリ書く必要があるときは、
スクリプト使うならスレッドが扱えるものを選ぶ。画面固まるのイヤだし。
現状では、lua とか squirrel を選んでるジャンルでは、重たい処理は
Cで書かれたエンジン側でスレッド使ってまわすってのが暗黙の前提で
あると思う。そこに文句つけるのは微妙に筋違い。
今のPCレベルのマシンパワーがおりてくれば、コンソール機や他の組み込み用途でも
全部スクリプトで〜ってなってくる可能性はあるけどまだちょっと早いやね。
0430デフォルトの名無しさん
2010/10/18(月) 21:17:580431デフォルトの名無しさん
2010/10/18(月) 21:51:16何故組み込みスクリプトとマルチスレッドが同時に使えない話になっているのか
コレガワカラナイ
PS3/XBOX360/PCに採用されている以上、マルチスレッド環境でも使われているということだろう
LuaならGame Programming Gems にいくつか載ってた気がするぞ
Stateをスレッド数分作成して、関数定義等は共有化する方法とかあったが、スレッド間で共有することになるから
(でなければスレッド数分複製することになる)並列処理中は定義の上書きはしない、同期処理部分で行う。
とかするのか?とか色々考えることはあるけど
0432デフォルトの名無しさん
2010/10/18(月) 23:23:49〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
0433デフォルトの名無しさん
2010/10/19(火) 00:26:46勿論そうなんだけど、Lua側からスレッドの制御できるようにしたり、
データの同期取れるように関数拡張しない?
0434デフォルトの名無しさん
2010/10/19(火) 00:32:26./doc/install.html
0435デフォルトの名無しさん
2010/10/19(火) 02:03:56すればいいじゃん
スレッドを生成してもいいが同期を取ってはいけない
という家訓でもあんの?
0436デフォルトの名無しさん
2010/10/19(火) 03:36:27当然するにきまってるだろう。というかしないと制御できないじゃないか。
コルーチンのドライブ部分に待ち制御をしこんで、スレッド待ち中はスクリプトを起動させない形で待ち合わせするか、
あるいは、非同期動作するオブジェクトに動作確認メソッドをしこんで、スクリプトから随時ポーリングして待ち合わせするか、
は設計次第ってことで
0437デフォルトの名無しさん
2010/10/19(火) 05:45:54だからそういう拡張がLuaをマルチスレッドに対応させるってことなんじゃないの?
発端は
>Luaを始めとしてほとんどの軽量スクリプトの処理系は、マルチスレッド化に対応できない。
なんだろ?
0438デフォルトの名無しさん
2010/10/19(火) 08:06:04/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0439デフォルトの名無しさん
2010/10/19(火) 08:16:24・時代はマルチコアだよ!
っていってるヤツと
・コルーチンだけ使うよりスレッド使ったほうが便利だよ!
っていってるヤツがいるように見える。
>>418は前者に対するレスだと思うけど、それに対して後者で返してるんじゃねえのかなあ。
0440デフォルトの名無しさん
2010/10/19(火) 08:51:36使ってみる
CUIつまらんGUIでもやるか
wxなど使ってみる
重い処理を入れた、固まる
調べてみる、スレッド?排他?よく分からん
簡単な方法はないか、2chで聞いてみる(>>301)
コルーチンで対処出来るらしい(>>320)
マルチコアを生かしていないことにふと気づく
結論:マルチコア非対応のLuaはゴミ(>>416)
それに対する反論は一律していて
C/C++で書けよw
という内容なのだが
本人はLuaの軽量で高速、移植性があり柔軟で容易という思想はおろか
スレッド?排他?よく分からん
というレベルなので話が通じない
と俺予測してみた
0441デフォルトの名無しさん
2010/10/19(火) 10:21:37いいだしっぺの意図は、
「スクリプトのマルチスレッド実行」だろ?
反論してるやつらは皆そうみなした上での回答、
(「マルチスレッドはC側でするから別にスクリプトそのものをそうする必要はない」的な内容)
だぜ
0442デフォルトの名無しさん
2010/10/19(火) 11:03:23これがよく意味が分からんな
0443デフォルトの名無しさん
2010/10/19(火) 11:04:48>all platforms that have an ANSI/ISO C compiler
「マルチコアを生かす」プラットフォームに対応するわけがない。
Makefile には -ldl とか -lreadline とか書いてあるが、これでも御節介なレベル
0444441ではないが
2010/10/19(火) 11:57:54主観で翻訳すると
luaThread> lualibs[]の末席にでも加えてーな
一同> 無理、2軍(Lua Binaries)で実績作って来い
こんな感じかな
0445デフォルトの名無しさん
2010/10/19(火) 12:25:19python の thread モジュールとかみたいなのは無くても困らないだろ、ってことじゃね?
まあ、python(cpython) のは GIL なのでどっちにしてもマルチコア的には全然うれしくないわけだが。
仮に lua や squirre lをマルチスレッド化するとしても、ステートごと分離する以外だと、結局 GIL にするしか手はないよね。
スクリプト言語系でうまくマルチコアに対応した実行ができてるのは Haskell とかそっち系か、
あるいは、JPython とか JRuby のような、JavaVM 上でうごくやつらぐらい?
Xtal はよくわからん。詳しい人よろ。
0446デフォルトの名無しさん
2010/10/19(火) 22:51:14というか「プリエンプション」と「共有メモリ」の両方が有ると困るんだそうだ
だから「プリエンプション」がないコルーチン
または「共有メモリ」のないクラウド(笑)が流行る
0447デフォルトの名無しさん
2010/10/20(水) 07:55:07レベルでしょ。
0448デフォルトの名無しさん
2010/10/20(水) 11:21:16・入門Luaプログラミング
入門用として一冊買うならどっちがいい?
0449デフォルトの名無しさん
2010/10/20(水) 11:29:530450デフォルトの名無しさん
2010/10/20(水) 11:53:450451デフォルトの名無しさん
2010/10/20(水) 11:55:320452デフォルトの名無しさん
2010/10/20(水) 12:21:110453デフォルトの名無しさん
2010/10/20(水) 21:33:44スクレイピングを楽にするためにRubyを組み込んだアプリはあったな。
ようは用途次第だと思うが。
0454デフォルトの名無しさん
2010/10/20(水) 21:36:02ユーザーによる拡張を考えるならLuaはありえない
0455デフォルトの名無しさん
2010/10/20(水) 22:23:27( ・∀・) < Lua!!
⊂/ 9) \____
q( /
> >
0456デフォルトの名無しさん
2010/10/20(水) 22:39:14■ このスレッドは過去ログ倉庫に格納されています