【Lua】組み込み系言語総合 その3【Squirrel】
■よく分からないので前スレからコピペ
10 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/11(火) 21:17:18
RubyもPythonも組込めるけどなあ。
Perlはさすがにやったことないが、できないこともないだろう。
11 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/11(火) 22:39:02
RubyにしてもPythonにしても標準ライブラリや言語機能がでかすぎにみえる。
組込みに向いてるってのはコードサイズまたは外部への依存の少なさと
言語機能のバランスが取れてるって意味にではないのかと。
12 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/12(水) 01:23:20
没になったテンプレ案には書いてあったけど、
そういう比較的大きな言語の組みこみの話も
多少は許容することが前スレで同意されていたはず。
でも一応Luaスレの続きだからその辺は空気読んでねと。
■没テンプレ
The Pawn language(だれも使ってなさそうな、組み込み言語)
ttp://www.compuphase.com/pawn/pawn.htm NullLogic Embedded Scripting Language
ttp://sourceforge.net/projects/nesla/ ※テンプレ以上※
落ちてたから立てたけど需要無かったみたいだな。
しかし、最近はSquirrel実装のゲームも珍しくなくなってきたな。
AngelScript使っているのだけど、現在の状態をファイルに保存して復帰させたりできない? asIScriptContextには変数を取得するためのメソッドはあるようだけどデバッグ用みたいだ。 せめてクラスのプロパティでも保存出来れば
>>9 スクリプトのバイトコードを参照するのが配列の生ポインタなんで、ちょっと厳しいかも。
ライセンスzlibだし自分でいじってもいいんだろうけど、新しいバージョン出るたびにいじるのは泣けてくる。
11 :
9 :2010/05/05(水) 00:04:12
>>10 ソース読むのもつらそうだし、要望するとか、毎回変更点をマージするのもなぁ・・
仕方ないから、状態を保存したい全クラスにプロパティの保存/読み込み用のメソッド用意させよう
LuaJIT 2.0.0-beta4 ? 2010-03-28
・tuning for x64
・a new optimization: array bounds check elimination
LuaJIT、ループや算術演算のパフォーマンスがずいぶん上がってるなー
Googleがスポンサーになったりで、LuaJITはLAMPツールの埋め込みが増えてんのかな。
ttp://luajit.org/performance.html
googleで思い出したけどGo言語はどうなったの?
終わりがないのが終わり。
15 :
デフォルトの名無しさん :2010/05/08(土) 22:52:14
Squirrelをちょっと触ってみたんですが適当にhello.nut(500Byteぐらい)を書いてsq -c hello.nutで作ったout.cnutのサイズが元の倍ぐらいあるんですけどSquirrelのバイトコードはこんなに大きいんでしょうか?
>>15 そういう実装だから。
バイトコードのニーモニックのサイズは通常あまり重視されないので、
この程度なら許容範囲だろう。
これが例えばモバイル用途も考慮されてるJavaなどのバイトコードはかなりコンパクトになってるな。
なるほど〜 こんなもんなんですね ありがとうございます
> バイトコードのニーモニックのサイズ mnemonic の事と思うけど、その使い方非常に違和感ある。
>>18 そうか……。ニーモニックというのは機械語コードのテキスト表現(≒アセンブラコード)なんだね。
この場合、単に「バイトコードのサイズ」というべきだったか。
どうもありがとう。
>>11 AngelScript公式サイトのWorkInProgressのページに「Persistent script states」ってのがあるんだけど、
そこを見ると「難しいけど、スクリプトの状態をセーブ/ロードできるようにしたい」みたいな事が書かれてるんで、
将来そういう機能が追加されるかもしれないよ。
22 :
デフォルトの名無しさん :2010/05/15(土) 12:17:32
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
LuaってC++の例外のことをあまり考慮されてないと思うんですが、 Luaに登録する関数は例外安全にしてエラーコードを返すようにラップしたほうがいいですかね?
tolua++ をVisualStudioでビルドする方法について、日本語で手順記載しているページとかご存じ無いでしょうか? どうにも色々調べて試してるのだけども、うまく行ってくれない…… (Lua本体はビルドすることに成功)
>>24 C++でコンパイルかければ例外も問題ないはず。
そのモードならlua_errorあたりはthrowで、
lua_pcallはtry~catchにて実装される。
28 :
24 :2010/05/18(火) 16:16:29
>>26 ,27
thxです
なるほどC++でコンパイルすると勝手に例外になるんですね
pcallで例外を捉えてきちんとオブジェクトを掃除してくれるなら今書いてるコードもいくらかすっきりしそうです
C++にLuaっておかしい気がするのでSquirrelを使っていきましょうよ
なんでおかしいの? 具体例を挙げてくれ
ガベコレじゃなくて明示的にとかスコープ閉じた時に自動でとかでメモリ解放させることはできる?
33 :
デフォルトの名無しさん :2010/05/19(水) 22:39:59
>>30 ∧__∧
(´・ω・) いやどす
ハ∨/^ヽ
ノ::[三ノ :.、
i)、_;|*く; ノ
|!: ::.".T~
ハ、___|
"""~""""""~"""~"""~"
34 :
デフォルトの名無しさん :2010/05/19(水) 23:55:23
AngelScript|Д`)<よーしここで俺たちの出番だな! GameMonkey|Д`)<おうよ! CRIScript| AngelScript|Д`)<あれ? GameMonkey|Д`)<あれ? CRIScript|
CRIScriptはもう終わったという認識でええの?
今後は動的言語もJITベースが主流になる予感。
動的言語はもう腹いっぱい
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄
41 :
デフォルトの名無しさん :2010/05/23(日) 19:17:24
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
最近AngelScriptを自分仕様に改変するのが楽しくなってきた アドオンを追加してごにょごにょすれば日本語もコルーチンも使えるし
AngelScriptはScriptBuilder使えばincludeとかも使えるしな。 しかも文法がほぼC++なんで、Cのプリプロセッサとかも使えるし。 まあスクリプトの意味があんまり無くなるんでアレだが。
どうしてこのスレは盛り上がらないんだと思う?
45 :
デフォルトの名無しさん :2010/05/29(土) 09:00:40
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
>>44 既に国内でもLuaやSquirrelを採用した商用ゲーがいくつも出ているけど、
分からないことが特になくなれば質問しなくなるだろう。
中にはオープンソースになってるものもあるので、入手して眺めると勉強になるかも。
Civ5がLua採用でLua使いの俺は少し嬉しいw
>>47 へー。Civ4はPythonだったと思うけど、乗り換えたんだね。
49 :
デフォルトの名無しさん :2010/05/30(日) 07:50:46
\ l´⌒\⌒\ \\ \ \ ヽ ) ) \\ \\ ( \ \∩___∩ \\ \ \ ⌒⌒| ノ ヽ \\ \ \ / ● ● ト、\ \\\ \ Y | ( _●_) ミ\ \\\ \ / 彡、_ |∪| ノ \ \\\ (____)―ヽノ' ヽ  ̄ ̄ ヽ\\ \, j l l .l } Lua! l (_ノノノノ
\ l´ \\ \\ \ \ ヽ ) ) \\ \\ ( \ \ ∩_∩ \\ \ \ ⌒⌒| ヽ \\ \ \ / ● ● ト、\ \\\ \ Y | ( _●_) ミ \\\ \ / 彡、.. |∪|ノ \ \\\ (____)―ヽノ' ヽ  ̄ ̄ ヽ\\ \, j l l .l } Angel Script! l (ノノノノ
V8をゲームプログラムに組み込む事に関する質問はここでいいですか?
スレの趣旨には反してないけど回答者がいるかは知らん
>>51 V8というものについて詳しいサイト教えてくれないか。
55 :
デフォルトの名無しさん :2010/06/01(火) 23:13:31
1 :名無しさん@どっと混む:2009/12/14(月) 20:45:15 ID:unnBMLw10
高根社長のSM趣味サイトMaskRと
副業のSMクラブ銀座プレジス・動画配信専門リアルミストレスばかり語られるが
高根社長の本業コムラッドについても語ろう
銀座プレジス
http://www.prezis.jp/top.htm MaskR
http://maskr.com/ プレジスを語ろう
http://set.bbspink.com/test/read.cgi/sm/1246009466/ 動画配信専門リアルミストレスってどうよ?
http://set.bbspink.com/test/read.cgi/sm/1249183350/ 9 :名無しさん@どっと混む:2010/01/03(日) 18:27:00 ID:RSEbBiG0O
高値はもう大麻やめたの?
10 :名無しさん@どっと混む:2010/01/04(月) 05:15:29 ID:A3l1qdv+O
タカネ社長ってどうやってばれないように脱税してんだろ?
億単位で脱税して億ション暮らしなんて凄いよな
監査役の奥さんもグルなのか?
12 :名無しさん@どっと混む:2010/01/05(火) 01:47:06 ID:KAHwqMrBO
株式会社Comrade株式会社コムラッド株式会社Comrade株式会社コムラッド株式会社Comrade株式会社コムラッド株式会社Comrade株式会社コムラッド株式会社Comrade
株式会社Comrade株式会社コムラッド株式会社Comrade株式会社コムラッド株式会社Comrade株式会社コムラッド株式会社Comrade株式会社コムラッド株式会社Comrade
13 :名無しさん@どっと混む:2010/01/05(火) 01:47:47 ID:KAHwqMrBO
高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉高根英哉
56 :
デフォルトの名無しさん :2010/06/01(火) 23:14:20
18 :名無しさん@どっと混む:2010/01/07(木) 09:26:06 ID:5NL2jyJpO
高根はMASKRでレイプ仲間募集するのやめたんだね
mixiで募集中か
21 :名無しさん@どっと混む:2010/01/10(日) 19:36:45 ID:FdRwgXUTO
風俗店やってるってことは高根社長は暴力団と繋がってるんだね
どこの組にいくらみかじめ料払ってるんだかw
23 :名無しさん@どっと混む:2010/01/23(土) 03:43:12 ID:Pdcv8aq0O
タカネ社長未成年に酒飲ませてレイプ
24 :名無しさん@どっと混む:2010/01/29(金) 18:16:06 ID:zMwtdkIsO
高根社長のレイプ趣味は病気だから治らない
25 :名無しさん@どっと混む:2010/02/01(月) 01:39:32 ID:uaH5mo2nO
前科者
26 :名無しさん@どっと混む:2010/02/09(火) 00:52:46 ID:JwGmN2cG0
>>25 容疑はレイプ?買春?管理売春?公然猥褻?薬物?脱税?詐欺?傷害?
28 :名無しさん@どっと混む:2010/02/14(日) 22:56:30 ID:lykq8x1VO
どこかのスレで人を死に追いやったと書いてあった
33 :名無しさん@どっと混む:2010/03/04(木) 12:49:19 ID:J8YxaRGO0
金がないって脱税がばれて追徴課税でも来たか?
せっかく脱税の隠れ蓑にプレジス営業してるのに残念だったなw
38 :名無しさん@どっと混む:2010/03/12(金) 21:09:53 ID:L0W4+sivO
首吊り首絞めプレイ大好き高根英哉
57 :
デフォルトの名無しさん :2010/06/01(火) 23:15:05
53 :名無しさん@どっと混む:2010/05/17(月) 13:14:06 ID:E/7OZVtz0
>>18 高根英哉blogでレイプ仲間募集中
私とともにマスクの女どもを弄ぶ仲間を募集する
急に思いついたら連絡をして、集まれるような仲間だ
だから、複数名募集するし、いついつという日時があるわけでもない
条件は以下のとおりだ
・SMを実践している、または興味がある
・マスクを用意できる
・都内でイベント参加できる
・イベント内容およびこの仲間を通じて知りえた情報を口外しない
・成人男子である
・携帯電話および携帯メールアドレスを私に公開できる
・酒が好きである
希望者は私宛にメールを送ってほしい
全員が参加できるわけでもないので、こちらの選択に任せてもらう
なるべく想いを書いてもらうほうがわかりやすいし
経験や顔写真も歓迎。
r
[email protected] [email protected] [email protected]
>>51 javascriptは楽でいいよね
前スレによると速度は LuaJIT >>> v8 >= Lua
らしいので、v8は結構速い。しかもv8は修正BSDだし。
V8ってのは、組み込み用のjavascriptなのかな? どっかに組み込み方の説明サイトとかないか?
>>59 そもそも本来からして、JavaScriptはブラウザとHTML用の「組み込み」用なわけだが。
ちょうどいい大きさだし、組み込み以外の用途にも使えるからV8にしようと思ってるのだが、複数のスレッドで同じコードから組み込み関数に渡したオブジェクト内のメソッドにアクセス出来るかどうかが心配。 そもそもオブジェクト内のメソッドをC++から実行出来るかも知らないし。 そこんところを日本語で解説してるサイトが余りにも少ない…
「ちょうどいい大きさだし、組み込み以外の用途にも使えるから」はJavaScriptの言語のことね。
64 :
デフォルトの名無しさん :2010/06/02(水) 13:21:01
>組み込み以外の用途にも使えるから いや、javascriptは組込み以外は使えない 何せファイル入出力はおろかprint関数も無い、当然ネットワーク機能なんぞ一切無い。 こういう機能をホスト側で用意してこその言語
DOM込みでjavascriptだと思い込んでる人多いしね そういえばV8が発表された直後にあちこちのサイトで ソースの解析がやたらと盛り上がってた覚えがあるけど もうやってるところはないんだろうか
V8試してみた。 最初はやり方わからなかったけど、わかればものすごく簡単に組み込めた。 AngelScript並みの簡単さ。 C++とのバインドも簡単。 ただ、謎のメモリリークが発生しているようだ…
>>66 JITが走る処理系なんだからそりゃあメモリは増えるっしょ。
>>67 となるとあまり気にしなくてもいいのかな。
VS2008で必要なライブラリをリンクするように設定して、
int main(int argc, char *argv[])
{
_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG));
v8::V8::Dispose();
return 0;
}
こんな感じのソースをビルド&実行すると、メモリリーク検出されちゃうんだ。
ちなみに、
v8::V8::Dispose();
をコメントアウトすると検出されない。
そんな関数どこで呼び出すんだろ そこらに転がってるサンプルコードにはそんなの書いてないから必要ないんじゃない?
>>69 V8のサンプル、shell.ccのmain関数で呼び出されてる。
int main(int argc, char* argv[]) {
int result = RunMain(argc, argv);
v8::V8::Dispose();
return result;
}
こんな感じで。
なお、このソースにメモリリーク検出用のコードをつけて実行すると、やはり検出されてしまう模様。
あと、main関数をメモリリーク検出用のコード+return 0;だけにしてもなぜか検出されてる。
実物を見たわけじゃないけど、 V8 が使っている static な変数のコンストラクタの中でメモリを確保して、 デストラクタでちゃんと開放してないとかじゃないのかな? じわじわとメモリ使用量が増える傾向があるとかじゃなければ、 気にしなくていい気もするけど。
言語処理系なんてのはグローバル変数にnewしたインスタンスを 入れ捨てたりする実装とかザラにあるけどな。 (ああ! SqPlusとかな!) V8がそうだとは言わないけど。 その辺興味があるなら原因を追っかけてみたら? 会社を背負って立ってるブラウザで使われてるJavascript処理系が あまり甘い実装になってるとは思えないんだけど。
というわけで誰かV8詳しい人、よろしく!
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
// / / パカッ //)∩_∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! / | ヽ |∪| /_ // │ ヽノ \ " ̄ ̄ ̄ ̄ ̄ ̄ ̄
AngelScript じゃなくて AngelCode って言った方がいいんじゃない?
なぜ?
.NetならIronPythonとIronRubyどっちがおすすめ? それともLuaとか他のスクリプト言語がいいかな?
>>79 規模による。
スクリプト部分が200kbを超えててしかも一気に読み込まないといけないようなら
現状ではDLRのスクリプト言語はやめた方がいい。
.NET Frameworkは言語を色々選べてしかも組み合わせ自由であることが多いので考え方次第だな。
最近のお気に入りはBoo。
>>80 Booはどんなとこが気に入った?
Pythonっぽい静的型付けのマイナーな言語ってことしか知らないわ。
>>81 ・静的型付け言語で事前にコンパイルする形式なので基本的にC#と同じ速度で動く。
・でもインタプリタも持ってる
・JSONが素で読める
・DLRじゃないので初期化が重くならない(これもC#と同程度)
・マクロで言語を拡張可能(コンパイラに機能が追加される)
この特徴を持ってDSL向きだと言っている人もいるね。
>>82 おもしろそうだけど、Booって検索しづらい単語だよな
>>82 C#とのバインドどんな感じ?
DLL読み込むだけでいい?
>>84 VSやSharpDevelopで普通にプロジェクト作って
組んでいくのでその辺はC#と何ら変わらん。
片方が定義したクラスをもう片方で利用したりは自由にできる。
Booでアプリ本体を書くことすらできるが、とりあえずオレはBooでプラグインを書いて
C#のプログラムから動的に読み込んで使ってる。
この辺はリフレクションを使う。C#同士と全く同じ。
(゚∞゚)クニヤブレテ ペーチュンチュン
Luaの魅力は拡張モジュールの豊富さですな。 グレイト
89 :
デフォルトの名無しさん :2010/07/23(金) 00:25:40
sqplusもXtalも最近更新ないな。 マイナー言語ってこんなもんなのか。
どっちも実質一人だしなあ
xtalはすかいきゅんが頑張ってるよ
ご結婚おめでとうございます
>>89 Xtalは1週間くらい前に開発版が久々に(3ヶ月半くらい)更新されたよ。
以前は一年くらい更新なかった時期もあったから、まだまだ活発な方だね。
lua の拡張性は半端ない
>>94 更新されてたの見落としてた。
ありがとう。
Blogの更新はされないんだろうか...
本職がゲーム開発だから時間とれないのかもね
他の言語と比べると、AngelScriptの更新ペースは異常だな。
merdあたりが組み込み用だったりすると面白かったんだけどな
// / / パカッ //)∩_∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! / | ヽ |∪| /_ // │ ヽノ \ " ̄ ̄ ̄ ̄ ̄ ̄ ̄
Boo が Unity のスクリプトに採用されてたわ。
Monoだし、そうなるかー
GameMonkeyScriptの方は分からないけど、Xtalの初の大手商用ゲーム採用か?
しかもバンナム。社内にも広めるとはやるじゃないか。
Xtalってプロダクトに使えるレベルの完成度だったのかすげえな 作者がバンナムのゲームのデベロッパということだったりするんかな
>>103 > Xtal:パイレーツではGameMonkeyScriptのほかにXtalという組込スクリプト言語を利用しました。
> Xtalはオープンソースで開発されており、社内に開発者がおります。
> XtalはC++と親和性が高く、プログラマが用いるのに向いています。
> 採用・開発者との情報交換の背景や実際の活用例を紹介します。
ちょw
社内の人だったのかw
バンナム(笑)とか言われたらイメージ悪いな
AngelScript|Д`)ノ<日本での大手採用おめでとうー ありがとー >ヽ(´Д|GameMonkey CRIScript| AngelScript|Д`)<何か寂しいなー CRIScript|
>>110 ちょっと上に出てる
> Xtal:パイレーツではGameMonkeyScriptのほかにXtalという組込スクリプト言語を利用しました。
の事ね。
AngelScriptは海外では使われてるみたいなんだけどなぁ…
なるほどー。 今後はJIT等の高速化対応と複数ネイティブスレッド対応、 それから協調的なマルチスレッドの自動生成(Erlangなど)などが ポイントになってくるだろうな。 ブラウザ対応でチューンされまくりなECMAScriptの処理系なんかも旬かもしれない。
AngelScriptは更新ハイペース、ドキュメント(英語だが)親切、そこそこ高速、バインダ付き と揃ってるのに目立たないのはやっぱ静的な型のおかげで関数型言語のようなことできんからかね 俺もあんまりそっち方面詳しくないけど。Programming In Lua でちょっと触れてたの見てああこれは静的 だとできんわと思ったが。C++だとテンプレートでできてしまうけど・・・あれ?AngelScriptってテンプレート使えたっけ しかしLuaは資産が多いのと、ちゃんと本体も迷走してないから強いな。翻訳された書籍まであるし(まだまだ踏み込むと英語だけど) というかLuaJITの速度どういうことなの・・・ Erlangは関数型+マルチスレッドで色々期待されてるね
Erlang遅いズラ
Luaはいろいろ好きじゃないとこ多いけど、 最初に広まっちゃったからなあ
AngelScriptでもJITで実行させるのはできるみたいだが、今のところやり方は不明(フォーラムにネタは出てるらしい)。 マニュアルにも「JIT compilation」ってあるし。 >AngelScriptってテンプレート使えたっけ 一応可能だけど、C++に比べるとかなり機能は貧弱。 サンプルもAngelScriptのサンプル群の中ではショボい部類に入るし。
ioェ・・・
>>113 Luaは関数型言語というより動的言語(スクリプト)じゃないのかな
動的言語よろしく、実行時にメソッドあるかどうか決まる(スペルミスは通ったときにやっとわかる)タイプじゃなかったけ?
詳しい人よろ
そうだよ
型付けが動的であることと関数型であることとスクリプトであることは全然関係ない
関数型 : 関数が組み込み型のように扱える(ファーストタイプ) 動的言語 : 型が実行時に決まる スクリプト : 俺には定義がわからん まぁそれぞれ関連はあんまりないな function hoge(arg) {
みすった・・・下の2行は忘れてくれ
}
stdin:121: '}' expected near '{'.
>>121 型が実行時に決まるのは「動的言語」じゃなくて「動的型付け」で別概念。
多くの動的言語は動的型付けだけどね。
例えば Objective-C は動的言語だけど、型付けは静的と動的のハイブリッド
動的片づけ言語ってもうこれ以上進歩しないだろ
why's that??
>>126 なにについてそう言ってるのかで話が変わってくるな。
まあ釣りだとは思うが。
速度面でいうならJITコンパイラを内蔵してるかどうかで変わってくるだろう。
あとはその規模、それによる範囲や最適化の度合いだな。
多動言語 「JITしてなさい」
これからの進歩の話しているのに なんでJITコンパイラ内蔵うんぬん言ってるの?
なんでム板ID出ないんだろうなあと思う。
会社から書き込んでる奴が多いから
出口が一か所なら同IDに成るね。
複数スレにまたがってID検索したら業務内容および会社も特定出来得るしな
ああ、なるほど。
あるあるw
138 :
118 :2010/07/31(土) 14:30:40
おお、お前ら詳しいな。 それぞれ直行する概念なのね 動的言語と動的型付けはどうみても俺の勘違いでした。教えていただいてありがとうございました。 Luaはどれに当てはまるんだ? ・動的言語 ・動的型 ・関数型をめざしてはいない
139 :
118 :2010/07/31(土) 14:38:01
ちょっと誤解を生むな どれをというかこの要素があるというのでいいのか?ということを聞きたい ちょっと話ずれるけど、知り合いにはデバッグ環境はあるけどLuaは動的型付け(でいいよな)なんで 結構大変と聞いたけど実際どうなん? webアプリとかでさ、動的型言語使ってもテストとかガバレッジなんたらとかやるじゃん? ゲームで使っている人とか、そういうのどこまでやってるのかしりたい 以前ゲーム作ってたときはそもそも数値計算とかのライブラリ以外は テストの自動化とか全然やってなかった。 webアプリでもGUIのテストとか調べてると他のテストと比べてまともにやってない感じだし、 ゲームみたいにグラフィカルな場合なおさらだよね? メインに使う静的型付言語だったらテストおろそかにしていい、というわけでもないし、 組み込み言語あまり関係ない気もしてきたな
angelScriptで、テンプレートクラスを戻り値にしたクラスのメソッドを つくろうとしたらコンパイルエラーになるのって自分だけ? 引数とかプロパティには出来るんだが
144 :
デフォルトの名無しさん :2010/08/01(日) 22:27:15
C++側でMyTmplってtemplate用クラスを定義しておいて、 class Test { Test() { } ~Test() { } MyTmpl<float> object; MyTmpl<float> &GetTemplate()//※ { return object; } }; ってやったら自分の所でも※の行でエラーが出た。バージョンは2.19.0。 templateはまだ未完成な部分が多いのかな?
\ l´⌒\⌒\ \\ \ \ ヽ ) ) \\ \\ ( \ \∩___∩ \\ \ \ ⌒⌒| ノ ヽ \\ \ \ / ● ● ト、\ \\\ \ Y | ( _●_) ミ\ \\\ \ / 彡、_ |∪| ノ \ \\\ (____)―ヽノ' ヽ  ̄ ̄ ヽ\\ \, j l l .l } Lua! l (_ノノノノ
>>145 Lua 5.2 work4 キテタ━━━━(゚∀゚)━━━━ !!!!!
_人人人人人人人人人人人人人人人_ > わりとどうでもいい <  ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^^Y^ ̄ ヘ(^o^)ヘ |∧ /
148 :
143 :2010/08/03(火) 16:09:08
>>144 やっぱりコンパイルエラー出るのか・・・
trunkの最新版でも出るようなら報告してみるか
今からLua勉強してPS3のFF14の発売までに間に合うでしょうか
うん。全然関係ないね。
152 :
144 :2010/08/03(火) 23:22:23
って俺参照返してるな… AngelScriptは参照返すのはアウトみたいだから、上のソースはミスだわ。 まあ&はずしてもエラーなのは変わりないんだけど。
// / / パカッ //⌒)∩∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄(..ノ
太ったな
>>150 これか
69 名前:仕様書無しさん[] 投稿日:2010/08/02(月) 22:07:17
あのスクウェア・エニックスが期待の新作、FFオンラインゲームのUIプログラマーを急募(10人以上)
https://www.ecareerfa.jp/disco-career/job_d/?_OFF_SEQ=10711659&_P=CB001&_SEQ=W1 応募資格:下記条件全てに該当する方
・専門卒以上
・社会人経験2年以上8年未満
・転職回数0〜2回まで
・PCゲーム/コンシューマーゲーム作成経験2年以上
・C++/C#経験2年以上
仕事内容:
■ゲーム製作環境整備
・リソースを扱うツール群の整備と改良。
アートデータやゲームパラメータなど各種リソースのイテレーション環境の改善と構築(フロー改善と構築)を行って頂きます。
■ゲームUI作成
Luaスクリプト/C++を使いゲーム要件を満たすメニューの量産実装になります
雇用形態:契約社員
年収:300万円 〜 400万円まで
以前は芝のテクスチャと思ったら今度はメニューの量産かよ・・・。 俺同人屋だけどもう本職の人全然怖くねーわ
テスト
AngelScript、C++Builderでも簡単に使えるようになったな
_人人人人人人人人人人人人人人人_ > わりとどうでもいい <  ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^^Y^ ̄ ヘ(^o^)ヘ |∧ /
>雇用形態:契約社員 使い捨てですねw
・社会人経験2年以上8年未満 ・転職回数0〜2回まで ずいぶんピンポイントでの募集だな
・専門卒以上 ・社会人経験2年以上8年未満 ・転職回数0〜2回まで ・PCゲーム/コンシューマーゲーム作成経験2年以上 ・C++/C#経験2年以上 ・Luaスクリプト経験 ・オンラインゲーム作成経験 ・データリソースマネジメント経験 見事に全て当てはまるけど契約社員は嫌だな
>>155 Luaはマジで薄給スクリプターの需要上げて、プログラマーの需要下げてますね!!!!11
461 :既にその名前は使われています [] :2010/08/02(月) 17:23:42 ID:ar/yeCZe
ワロタ
マジでスクエニ大丈夫か?
794 :既にその名前は使われています:2010/08/02(月) 17:22:47 ID:RCV2ArOV
今からUIやり直すの?
http://www.square-enix.com/jp/recruit/career/job/game/pg_ui.html 463 :既にその名前は使われています [] :2010/08/02(月) 17:27:53 ID:EQ7R1xkx
雇用形態
契約社員
UIをなめてんのか?
472 :既にその名前は使われています [] :2010/08/02(月) 18:43:20 ID:OzNODjsB
>>463 これはプログラマ、デザイナー激怒していいレベルだわ
UI舐めてるっていうか、ゲームの基幹とかもっと大きく言えば
現状ソフトで運用されてるIT家電製品全体を軽視してるだろ。
ユーザインターフェイスが即ちその企業の開発力、強いては
ブランドを維持する信頼の元だって、全然わかってない。
UIを設計する人と実装する人は別だろ
うちは lua じゃなくて squirrel つかってるけど、コルーチン持ちの言語使うと UI 用の作業工数が激減するのは確かではある
10人も募集してんなら十分UIに力いれてるんじゃん。 C++とかでやってたら「一応動いてるからもう良いでしょ?」ってなところが スクリプト化してあれば限界までいじれる。 まあ、給料水準はちょっと何だが・・・。
今どきLuaはねえよなあ
>>167 もういじらなくて良いところと、まだいじりたいところを切り分けて、
もう良いでしょって部分を増やしていかないと収束しないじゃん。
そもそも、まだいじりたいけど自分ではいじりたくないから人に頼むってのがおかしい。
>>169 >そもそも、まだいじりたいけど自分ではいじりたくないから人に頼むってのがおかしい。
分業ってそういうもんじゃない?
スクリプト化すれば、プログラマーとしては一丁上がりみたいなもんだから、先へ進める。
よしじゃあみんなAngelScriptを使おうじゃないか。
Xtal使おうぜ
Lua&luabindで特に不満が無い
>>171 ,172
∧__∧
(´・ω・) いやどす
ハ∨/^ヽ
ノ::[三ノ :.、
Lua i)、_;|*く; ノ
|!: ::.".T~
ハ、___|
"""~""""""~"""~"""~"
やややや嫌嫌嫌
176 :
デフォルトの名無しさん :2010/08/07(土) 13:29:58
VimのプラグインがLuaで書けると聞いて飛んできました
177 :
デフォルトの名無しさん :2010/08/13(金) 09:50:57
// / / パカッ //)∩_∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! 2.19.1 / | ヽ |∪| /_ // │ ヽノ \ " ̄ ̄ ̄ ̄ ̄ ̄ ̄
Lua Programming Gemsを買うときが来たか まぁ英語の勉強にもな・・・るんだろうか
というか、相変わらずAngelScript更新ハイペースだな
AngelScript、作者いつ寝てんだみたいなペースだよな… フォーラムの反応もメチャクチャ早いみたいだし。
ユーザーの反応が気になって夜しか眠れないんだろう
パカッ
xtal(クソタルってよむのか?)なかなか良さそうだな。 ただ「function」がfuncでもなく「fun」という表記なのと「finalize」とするべきものを「uninitialize」としている華麗なる独自仕様にはまいった。
エクタールって読んでたが中2ファンタジーっぽい
185 :
デフォルトの名無しさん :2010/08/20(金) 04:04:55
クリスタル だよ まぁ、作者が開き直って エックスタル でもいいとか言ってるが
下げ忘れた
>>187 テッキーじゃないとXtalの読み方なんか人それぞれだと思うぞ
水晶振動子の素子名とかふつうしらんだろ
perl , ruby と宝石名が続いたから似たような名前にしたと言ってたな
uninitialize ということは、未初期化状態にするの? メモリにランダムな値を書き込むとか。
XtalじゃなくてX'talならすんなり読めたかもしれない。 X'masって書いたりするからな。
X'masって表記をするのはアジアだけだよ 少なくとも現代の英語圏ではそんなアポストロフィの使い方はしない 普通にXmasと書く
axeのOSを知らんのか(普通は知りません)
L'ua とかフランス語っぽくてかっこいいよな
XMLとかは、exの略で、Xを使ってるんだな。 発音からだけど、そういう略は多いよな。
S'ph't
ポルトガル語でおk
俺の知ってるポルトガル語はセレソンとジュイスぐらい
カステーラ
ボランチ
eXtreame Programing略してXPだもんな
Luaはポルトガル語で月 Squirrelは英語でリス Xtalは日本語で
Xtal=クロス・タル=タルタル=タルタルソース
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
いつのまにかSquirrel 3.0 beta 2.1出てた。まだ元気だったんだな
マイナーすぎるな
Squirrelは日本における商業での採用実績はスクエニのやつだけなのか? もしかしてSquareとスペル似てるから使ってみたってだけだったのかな
使ってるのを公言してるのはスクエニくらいだな こっそり使ってるところはそこそこ多いと思うけど
zlibライセンスはつかってること表記しなくていいからね
AngelScript|Д`)ノ<zlibライセンスと聞いて飛んできました
LuaはMITのどっかに書いといてねの効果で実績が広まりやすいんだろうか? だとしたら割りといい考えかもしれない。 ・・・だがGPL。てめぇは駄目だ
いや、旧BSDLみたいに、どこかに書いてねライセンスはGPL非互換だし。 そういうことだったらMITライセンスはGPL非互換になっちゃう。
Cygwinみたいに、GPL非互換のレイヤーの上にGPL互換のレイヤーを乗せたらどうなるの?
217 :
216 :2010/08/29(日) 12:01:53
>>214 いや、どっかに書いといてねはGPL互換だよ。
そうでないと MIT も新BSDもダメになる
GPL非互換なのは、旧BSDの「作者のの名前を広告の類にのせてはだめ」っていう「宣伝条項」
>>215 OSないしは標準インターフェースはGPL除外。よって cygwin は問題ない。
>>219 第4項とまざってたすまん。今の*BSDは結局第4項もはずしてるよね
squirrel の VM って基本1個つくればことたりるから(他はスレッドだし)、sv_vm_malloc 他の実装さしかえれば終了じゃ?
>>220 2条項BSDLはまだそんなに多くないんじゃないか?
3条項BSDLが大半だと思うけど。
>>222 VM毎に異なるヒープを使いたい場合を想定しています。
PCのように潤沢なメモリがある環境なら不要なものですね。
VM複数つくるとかえってじゃまくさくない?
フラグメント化の影響を抑えるためにヒープを目的別に別けて運用する場合に VM毎にヒープが使えると便利ナノデス。 あと、 C++でnamespaceを使うように、敢えてVMを隔離したい場合もある。 luaはVMのopen時にメモリアロケータを個別に設定できたけど、 squirrelでは出来なかったのが不満だったのでパッチを作ってみた次第。
lua!!
\ l´⌒\⌒\ \\ \ \ ヽ ) ) \\ \\ ( \ \∩___∩ \\ \ \ ⌒⌒| ノ ヽ \\ \ \ / # +◇iiiillllii◇ト、\ \\\ \ Y | ソ(_ ●_) ミ\ \\\ \ / 彡、_ |∨WV|ノ \ \\\ (____)|∧MΛヽ  ̄ ̄ ヽ\\ \, j l l .l } Golua! l (_ノノノノ
230 :
デフォルトの名無しさん :2010/09/06(月) 09:11:59
// / / パカッ //)∩_∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! 2.19.2 / | ヽ |∪| /_ // │ ヽノ \ " ̄ ̄ ̄ ̄ ̄ ̄ ̄
スタック操作むずい…
どうすればいんだー
ばいんだー使えばいいんじゃ
h2xsですねわかります
AngelScript|Д`)<スタック操作が面倒くさいと聞いて飛んできました
Luaさいこー
>>233 せっかくだから、ばいんだー使えばいんだーくらい言おうよ。
なんでお前らが宣伝してるんだよ
Luaでlua_yieldを使うと"attempt to yield across metamethod/C-call boundary"というエラーが出ます whileループ内でlua_yieldとlua_resumeを毎フレーム繰り返すような使い方を想定してるのですが 何か注意すべき点とかありますか?
というよりLuaがどうやってそのエラーを検出してるのかが気になった 再入時にCスタックをトレースしてるんだろうか
241 :
239 :2010/09/11(土) 15:11:52
よくわかりませんがlua_dostringをlua_loadstringに変更したらエラーは出ずに動作しました
>>241 lua_dostring の中から yield か resume をしているとか?
lua_replace( L, LUA_ENVIRONINDEX ); この関数を呼ぶと PANIC: unprotected error in call to Lua API とエラーが出ます。 LUA_ENVIRONINDEXを操作する方法を知ってる人がいたら教えてください。
マニュアルよくよめ。replaceはスタック操作するAPIだ
replaceで擬似インデックスの環境テーブルを使うと本に書いてあったんですけど、間違ってるのかな・・・ 他に環境テーブルを操作する方法ってあるんですか?
その関数を呼んでみたけど、エラーが出ません。 エラーを出す方法を教えてください。
247 :
デフォルトの名無しさん :2010/09/19(日) 00:46:40
ルアー最高! 魚が釣れるよ!
Lua以外、本が出てないし使えなさそう
本が出てるかどうかで使える使えないを判断してるの?
ああ、ネットで小出しのバラバラな情報で使うのはオレには無理だからな
最低でも作者が死ねば消えそうなのはだめだな
個人で作ってる奴は抵抗あるねえ。
オープンソースのプロダクトの大半は個人開発から始まってるし、 それらの中には我々が普通に使ってるライブラリだってあるわけだが、 そういったものを否定する気なのか?
それで判断するのはどうかって思うけど外人の作ってるプロジェクトの ウェブサイトはやたら豪華だったりするよな。で、Googleのホスティングで 済ませてるようなところはすぐぽしゃるイメージw
イメージで語られても。 必要な機能が実装されていて、 枯れているか、枯れてなくてもちゃんとメンテされていればそれでいい。
じゃあもうAngelScript使おうぜ。
俺が死んだら日本のゲーム業界は大混乱に陥る
特定しますた
>>251 これはあるな
俺もそういうのネットのすべてのコンテンツで気になるわ
ある程度ネットで露出してる人は遺書用意しといてほしいね。 どこでも遺書
既出かもしれないけど、Apache2.3からmod_luaが標準搭載されるらしいね。
262 :
デフォルトの名無しさん :2010/09/21(火) 08:44:27
アドベンチャーゲームのテキストに使おうと思ったんだけど なんか違うねこれ
いや違わないと思うぞ
luaをADV用のシナリオ記述用のスクリプトとして使うのはとても間違ってるだろう。エンジン記述用ならともかく。
どーだろ。 素のLuaに近い書き方でAdvのスクリプトが打てるようになる、 というのはそんなに悪くない設計だと思うけど。 ただしプレーンなシナリオとは文法に乖離があるから、 シナリオテキストからAdvスクリプトを生成するコンバーターが欲しいところだけど。
いや、最悪の設計です。作業効率だだ下がりな上にバグ頻発。 コンバート方式ならかろうじてありですが、コンバート後のスクリプトをいじると同じことなので、 ことADVのスクリプトにおいては専用記述スタイルのスクリプトのみってのが無難です。 lua で命令を拡張可能、とかならあり。
君の頭の設計も悪いみたいね
つーかpythonとかluaとかrubyとか組み込んでるゲームエンジンはみんなその形しか取ってないよね。
その形ってどの形?
アドベンチャー用のシナリオテキストは一種のDSLだろうしシナリオはシナリオでいいと思うけどな。 CやC#とかLuaでプラグイン書けるくらいでいいだろ ADVエンジンの吉里吉里だって、独自のスクリプトの上にラッパーでシナリオ型のDSL用意してるだろ? パッと見の構造の複雑さは増すが、ライターや初心者はラッパーだけ触ればいいし、 手が込んだものを作りたかったらスクリプトの層を触ればいいと考えると よく考えられてると思うけどな
271 :
デフォルトの名無しさん :2010/09/21(火) 18:02:20
>>270 よく考えなくても普通にそこにたどり着くもんだ。
スクリプト仕事してるとたどりついてないシステムをたまに見かける
273 :
デフォルトの名無しさん :2010/09/21(火) 18:17:20
オレオレフレームワークぐらい作ってみたらいかがか。
コンバート後さわらないって前提で、直接言語にしてしまうってのはわりとおもしろいとは思うんだけど、セーブロード処理がなー
実作業では修正してリロードを繰り返すんだろうから コンバーターより専用スクリプトの方が楽だろうな
うちはLuaをスクリプトに使ってて、コンバート方式でやってる。
そのままだと
>>275 の言うとおりに面倒なので、まず拡張子を独自のものにして
その拡張子に関連付けでコンバートプログラムが動作するようにする。
これでExplorerからダブルクリックで変換できる。
さらにエディタのマクロを使って、スクリプトの編集保存時にコンバーターを呼び出して
自動変換するようにしている。
コンバート時にluaのエラーチェックも行ってる。
>>274 の言うとおり、デフォルトだとセーブロード処理が難しかったので
Luaの内部にも手を入れてる。
メインのシナリオ記述はXML、 ちょっと高度なことをするときはスクリプトという風にしようとしたんだけど XMLだけならセーブは簡単に出来そうだけど、 スクリプトのセーブが困難そうで困った
あんまり細かく書くと同僚にバレそうだが、うちではシナリオスクリプトにCプリプロセッサ+俺様スクリプト、 演出などにAngelScript使ってるな。 AngelScriptの場合、スクリプトの途中でSuspendして一時停止させた状態を保存する方法がないので、 とりあえずセーブしなきゃならない部分は以前から使ってた俺様スクリプト使ってる。
279 :
デフォルトの名無しさん :2010/09/22(水) 11:22:44
>>277 そんな使い方ならLispを組み込めばいいのに。
ラチェット&クランクですかね。地獄だと聞いてますが
>>279-280 GOALだっけ
これ?
Game Oriented Assembly Lisp - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp Naughty Dog が PS2 時代に使っていた Lisp は命令型スタイルの機械語変換 - minahitoの鯉日記
http://d.hatena.ne.jp/minahito_carp/20100523/1274589658 > Naughty Dog が PS2 時代に使っていた Lisp は命令型スタイルの機械語変換
>
> Naughty Dog の Lisp 好きは有名な話ですが、 Playstation 2 に用いられていた Lisp は、今日僕らが想像するような VM の組み込みなどとは多少事情が異なるようです。 Wikipedia に Game Oriented Assembly Lisp として情報がまとまっていました。
>
> * ゲーム指向アセンブリLisp(またはGOAL)は、Naughty Dog のアンディ・ギャビン*1とジャック&ダクスターの開発チームによって開発された
> * ジャック&ダクスターシリーズ全般の開発に使用された
> * GOAL の構文自体は Scheme にそっくり
> * GOAL は副作用を許容し、イベントの系列を記述させるなど、命令型プログラミングスタイルを奨励していた
> * GOAL はインタプリタを持たず直接 Playstation 2 のマシン語に変換していた
> * 限定的ではあるがガベージコレクションあり
> * インラインアセンブリをサポートしていた
> * GOAL コンパイラは Allegro Common Lisp で実装されていた。
> * GOAL を組み込まれたゲームプログラムは、(仮想機械実装ではないにも関わらず)GOAL コードのエディット&コンティニューをサポートしていた
> * 前身にやはり Andy Gavin が開発した GOOL という言語があった。こちらはクラッシュバンディクーに使用された
> * 現在の Naughty Dog では GOAL の開発を継続していない*2
>
> *1:Naughty Dog の創業者の一人
> *2:が、Lispは継続してます
>
>>101 Windowsの .net向けNVLゲームエンジンで、
3月の時点でIronPythonを組み込んでた(速度上ngenでネイティブコンパイル必須)ものが、
7月にはBooになってネイティブコンパイル不要になっててビビった。ようやるわ。
ファイルリスト(Boo[左側]とIronPython[右側])
myngen.exe (ngen確認用)
System.Data.SQLite.DLL System.Data.SQLite.DLL
Igs.dll Igs.dll
Igs.DirectShow.dll Igs.DirectShow.dll
Igs.FileFormat.dll
Igs.OggVorbis.dll
Igs.Options.dll Igs.Options.dll
Igs.Plugin.dll
Igs.Scripting.dll Igs.Scripting.dll
Igs.SlimDX.dll Igs.SlimDX.dll
Boo.Lang.dll Microsoft.Dynamic.dll
Boo.Lang.Compiler.dll Microsoft.Scripting.dll
Boo.Lang.Interpreter.dll Microsoft.Scripting.Core.dll
Boo.Lang.Parser.dll Microsoft.Scripting.Debugging.dll
Boo.Lang.PatternMatching.dll Microsoft.Scripting.ExtensionAttribute.dll
Boo.Lang.Useful.dll
IronPython.dll
IronPython.Modules.dll
Python.Mio.dll
Python.Stdlib.dll
よっぽど苦情多かったんだろうなw
BooをBooで返したわけだな
>>282-284 既にC/C++のゲームエンジンより速い場合あるしな。
ソースは色に出でにけりわが恋はと
オンボロPCで定常状態のCPU使用率を比較した場合。
それは VRAM が少なすぎて足ひっぱってるんじゃね? たぶん同程度の画像素材を同程度使えば負けるとオモ
Javaでも数値演算などではC++に勝る時もあるらしい。
メモリ使用量ではJavaも
>>282 もボロ負けだろうな。
>>287 ゲーム開始していくらか進めてみたけど、Vistaで60-80MB。
別に多くもないし少なくもないな。
オンメモリでどんだけの素材を持たせてるかによるんじゃね?
タユタマだったら300MB、バルダーシリーズだったら700MB位食うし。
>>282 ぐぐってもでてこないんだけど、NVLって正式名称どういうエンジン名?
>>282 ファイル一覧を見ただけでゲーム名がわかるぜ
Boo って .NET Framework 4.0 でも使えるん?
Boo!!つかえません。
.NETのDLRはアドベンチャーゲームの組み込み言語としてすら使えないほどおそいのかよマジか 実際は実行速度は問題なくて、ngenだけ遅いという話ではないよな。必要だからngenかけてるんだろうし
Igs把握w 結局当初の製品はパフォーマンスの問題で別のエンジンに移植してリリースしたのね 大変だな
Igsのシステム開発者のブログ見て
昨年、IronPythonマンセーの人が常駐しててぱったりこなくなったのを見ると
>>282 の事情があったの何か重なるものが、、、と思った(´;ω;`)
>>294 定常状態なら許容範囲なんだけど、
初期化があまりに遅すぎる。
KAGレベルの開発環境を構築すると……。
なんだかJavaのVM起動遅いから、JavaVMで動くスクリプト言語は使いにくいみたいな話を思い出した サーバーサイドだとあまり問題ないだろうけどね 前スレでもでてたけど、最初の実行が遅いというやつか .NETのユーティリティソフトがGUIもっさりと起動遅いというので避けられる現象があるな
さっと起動させて、ちょっと使って終了。また後でさっと起動〜 みたいな使い方には向かないわな。 ゲームなどには意外と良いのかもだけど。
PCスペックの進化でだいぶ気にならなくなってきたな メモ帳や電卓みたいなソフトでは許容できないが
Luaなんですけど C++のオブジェクト一つにつき一つの独立したLua実行環境をもたせたいんですがstateを複数生成するほかにやり方は在りますか?
コルーチンを含めてlua_Stateの生成が嫌ということか?
質問がわからない
なんていうかグローバルな名前を汚されたくないんです
ローカルに生成する namespaceでくくる メンバにして確保する
Luaにnamespaceなんて無いでしょ
いや、
>>306 がLuaの名前空間のことだったらState複数生成したほうが汚れないだろ。
C++側のことだと解釈しても意味はわからんが。
オブジェクト毎に生成するってことは元々なんかのメンバになってるだろうし。グローバルには持ってこないだろどう考えても。
class Obj { lua_State * s; public: Obj(void) : s(lua_open()) {} ~Obj(void) { lua_close(s); } }; 寿命短いクラスだとパフォーマンスが残念 Luaのグローバルテーブルにオブジェクト専用のテーブルを用意するのが良い C++オブジェクト生成時にオブジェクトのアドレスをキーにしてテーブルを登録 C++オブジェクト破棄時にテーブルを削除
namespace無いとか業務使用不可なレベルだな
JavaScriptディスってんのか
はい
v8ってマルチスレッドできるようなことが書いてあったけど無理なのか ということはマルチスレッド対応してるのはluaだけ?
>>312 JSはネームスペースを擬似的につくれるだろ。
>>314 マルチスレッドってのが協調スレッド(コルーチン)のことなら squirrel も対応してる。
v8 はサポートしてないが、サポートしようとしているプロジェクトはある模様(js-coroutine)
どの程度完成してるのかは知らない
マルチスレッド環境で安全に実行可能か、ということだと、lua も squirrel も v8 もスレッドセーフに
書かれてないので全部アウト。複数スレッドから呼ぶと簡単にふっとぶ。
コルーチン機能があって、スレッドセーフってのだと、Javascript だと SpiderMonkey がそうじゃないかな。
あと、AngelScriptとか
>>314 たしかXtalも対応してたんじゃないかな。
>>315 擬似的にならLuaでもいくらでもできますがな
マルチスレッド環境で使うという意味なら、 Lua自体はスレッドセーフではないが、State同士は独立しているので各スレッドにStateを持たせる。 などで対処できると ぷろぐらみんぐ いん るあ にも書いてある squirrelに関しては深く調べてない。 というかVMの持ってる状態(スタックとか)にマルチスレッドからアクセスしたら大抵まずいと思う。 ネイティブスレッドを使えるかという意味なら Xtal,GameMonkeyが確か使えたと思う。スレッドに関してはGameMonkeyが強いそうな。どこかで聞いただけだけど。 以上うろ覚え。 AngelScriptがどうだったか思い出せない。コルーチンみたいなことはAddOnに入ってる。 これもContextに複数スレッドからアクセスしなければいけるんかな。
単に、重い処理を実行したときに、ウィンドウが固まるのを防ぐのが目的なら コルーチンで十分ってことですか?
そういう時は自主的に資源を解放する必要があるコルーチンはほとんど役に立たない
Lua内から別なLua_Stateを立ち上げられるようにすればいいよ
エスパーの集まりだな
ぅあこわい
325 :
デフォルトの名無しさん :2010/10/10(日) 18:37:12
今LuaでOAuth認証とかやろうと思ったんだが、どこかにLuaのOAuthライブラリないかな・・? なければつくるんだけど・・・
326 :
デフォルトの名無しさん :2010/10/10(日) 18:41:28
今LuaでOAuth認証とかやろうと思ったんだが、どこかにLuaのOAuthライブラリないかな・・? なければつくるんだけど・・・
327 :
デフォルトの名無しさん :2010/10/10(日) 18:42:15
あれ・・・連投になってしまった。すまん
ぅあおあうth
LuaLの「L」って何ですか?
ライブラリ
とは限らない
333 :
330 :2010/10/12(火) 22:20:16
ありがとうございました。
334 :
デフォルトの名無しさん :2010/10/13(水) 00:05:01
これはLuaがない環境でも動かせるようにexe化することって出来ませんか?
できますよ
むしろ exe 化する以外にどう使うのかと
338 :
デフォルトの名無しさん :2010/10/13(水) 14:20:31
端末が 0x07 で Beep 音が鳴る設定になってる?
なんですか0x07っていう謎のコードは OSはWindows Vista 使ってます 何か設定しろってことですかね?
cmd.exe から実行すればWinでも鳴るはず
>>340 BELLコードも知らずにやってるのか?
すまん、ちがった。 Winの場合、サブシステムがコンソールになってないとそもそも標準入出力がコンソールと接続しないのでならない。 サブシステム:Windows でも自力でコンソール開いて標準入出力と接続すれば鳴ると思われ。余分に窓でるけど。
折角の新入りさんだ 丁重に扱え
'\a' == 0x07 ってことを言ってるだけでしょ
347 :
デフォルトの名無しさん :2010/10/13(水) 23:41:19
C/C++ & Lua & LuaBind & SDL_ttfでの質問です。 // hoge.h #pragma one typedef struct _Hoge Hoge; Hoge *OpenHoge(); void CloseHoge(); // hoge.cpp struct _Hoge{ ... }; Hoge *OpenHoge(){ return new Hoge; } void CloseHoge(Hoge* hoge){ delete hoge; } 上記のように構造体定義がソースファイルに書かれている場合は どのようにバインドしたらいいのでしょうか? // main.cpp module(L)[ class_<Hoge>("Hoge"), def("OpenHoge",&OpenHoge), def("CloseHoge",&CloseHoge) ]; でコンパイルは通りますが、スクリプト実行時に std::runtime_error: `Trying to use unregistered class` がでます。 元ソースに手を加える事は避けたいので int l_OpenHoge(lua_Stage* L){ lua_pushlightuserdata(L,(void*)OpenHoge()); return 1; } などとラップすると動くには動くのですが数が多いので大変ですし何より不恰好です。 extern struct _Hoge{ ... }; のような事がやれればいいのですが・・・
どうしてもソースさわりたくないなら、バインドしてるソースで #include "hoge.cpp" すればいいんじゃね?
それなら素直にソースなおしなされ。 hoge.h はパブリックヘッダで hoge.cpp でプライベートに構造体を定義してあるんだろうけど、その構造体定義だけ hogeprivate.h とかわけて、 hoge.cpp と バインダ定義してるとこで include するよろし
>>350 えーと
ソースに手を加える
Hoge型を必要とするもの全て個別にラップする
この二つ以外に方法があればと質問した次第であります。
むちゃゆーな
ああ、Hoge をラップするクラスを main.cpp でつくればいいんじゃね?
実際、言語によってはLuaのようなものに組み込むことが前提になっていない場合、 組み込みにくいんだよな。 LuaBindみたいなのが用意されていても、そのバインダの結局想定範疇を超えると細かい調整がいる。 ラッパーは手動ではやっとれん。 ラッパー自動生成する仕組みはあったとは思うが。 SWIGだっけ
>>352 自分でもそうは思うのですが
自分の頭が足りていないだけで
実は他に何か楽な方法があるのではないかと思い質問してみました。
>>353 Hoge型とはこんな造りですよ
と教える手段が無いまま挑んでも
lightuserdataを使うハメになるので
行き着くところは同じなんじゃ・・・
>>355 実施個別に関数全部手でかくのと同程度の労力にはなるだろうけど、
ラッパークラスを作ってそれをバインダーで登録したほうがソースの見た目は奇麗だろうね、ってことで。
バインダはコンパイラの機能をつかって記述を減らすテクニックであって、コンパイラに
検知できないことはどうしようもない。人が書き起こすしかないべ。
名言すなあ
その例だと、こんなかんじのラッパークラスつくって、 a = 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; };
>>356 趣旨がw
>>358 クラスでラップしちゃう方法やら
ネームスペースで囲って必要なものだけフィルタする方法もありますが
そういったやり方はどうも不恰好に見えたので質問した次第であります。
何故Hoge型をスクリプト側に認識させたいかといいますと
出来る限りオリジナルに近い形で公開したいのです。
そうすればクラスリファレンス不要ですから迷うことはありませんしね。
オリジナルのソースを尊重しソース改変などの2度手間を避け
#include "xxx.c/cpp" などのライブラリの意味を根本から覆す事のない
ナイスなアイデアがあるのではと。
とりあえず、結論としては
c/cppソース内に隠蔽された構造体、クラスをバインドする方法はない
という事ですかね?
何か抜け道があると思うんだけどなぁぁぁ
抜け道もなにも・・・ えーと、たとえば操作メソッドが必ず第一引数に構造体のポインタもってるとか 構造に規則はあるんでしょ?じゃあ、それを前提にしたバインダを自前で書けば良いだけ。 クラスにラッピング〜ってのは、luabind をはじめとする多くのバインダはクラス(構造体)構造を 前提にしたバインダだから、それを使うのならそれにあわせないとダメだよってだけの話。
ぶっちゃけLuaってC++と相性あんまし良くないよね みんなもっと天使スクリプト使えばいいのに
テンシチャンマジテンシチャン
オサルサンマジオサルサン
Luaってなんであんな風にしたんだろね
むしろC++が特殊すぎて、他のあらゆる言語と相性が悪いんじゃないかと思う。 C++のくびきから離れると、楽だぜー。
LuaをC/C++以外のどこで使うんだろ。 疑問である。
>>361 > ぶっちゃけLuaってC++と相性あんまし良くないよね
具体的にどのあたりが?
これだけ簡単に組み込めて
高速で柔軟性もあり
コンパクト(シンプル)で習得も容易なのに
相性が悪いとは到底思えないんだけど
SWIG の C++ 対応は良くできてると思うけどなぁ。 Box2D のバインダを作ってみたけどすごく簡単だった。
例外の対処もめんどうだし ガベコレってリソースの寿命把握しにくいし テンプレート使えないし C++じゃなくてCで使ったほうがいいよ
lua や squirrel と接続する機能を C で書くとか考えたくないな
>>370 逆にそう言うのはCで書いたほうがいい。
Squirrelは処理系自体はC++で実装されてるけど
外部APIはC言語準拠になってるわけだし。
squirrel 側の内部概念がクラスもってるのに、それに接続するオブジェクトを C で書くとか手間が増えるだけだぜ……
>>372 仮想スタックに対する操作というレベルで考えれば、
LuaもSquirrelもほとんど差はないんだぜ?
lua でも squirrel でも普通バインダ使うだろ どうしてもスタックさわる必要がある場合でも、そのスタック処理自体を隠蔽したC++のクラスをまず作るだろう。
そしてスルーされる天使ちゃん。 あれはあれでC++すぎて使う意義がぴんとこないんだ
残酷な天使のテーゼ 少年よ神話になれ
バインダってTMPとかでカオス状態になったクラスでも正確にLuaに公開してくれんの?
カオスな定義さえ書けばいけるんじゃね
テンプレートを使えない時点でお察し下さい
>>375 他のスクリプト言語と同じで外部に記述できるのがでかいと思うよ。
C/C++とほとんど文法変わらないから、C/C++側で定義している列挙子(enum)やら定数やらほとんどそのまま持っていける。
Luaとかと違ってデフォルトでコルーチンないけど、作るの簡単だし。
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
__,,:::========:::,,__
...‐''゙ . ` ´ ´、 ゝ ''‐...
..‐´ ゙ `‐..
/ \
.................;;;;;;;;;;;;;;;;;;;;;;::´ ヽ.:;;;;;;;;;;;;;;;;;;;;;;.................
.......;;;;;;;;;;゙゙゙゙゙゙゙゙゙゙゙゙゙ .' ヽ ゙゙゙゙゙゙゙゙゙゙゙゙゙;;;;;;;;;;......
;;;;;;゙゙゙゙゙ / ゙: ゙゙゙゙゙;;;;;;
゙゙゙゙゙;;;;;;;;............ ;゙ ゙; .............;;;;;;;;゙゙゙゙゙
゙゙゙゙゙゙゙゙゙;;;;;;;;;;;;;;;;;.......;.............................
>>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;|;_゙ι´゚゙´
LuaがC++に組み込むのが簡単と言っている奴は相当訓練されてるプログラマ
.netでゲームエンジン作ってIronPython重い、DLRシネ、Booでようやく・・・という状況を 鼻で笑えるくらいに訓練されているとC++くらい使えるしLuaの組み込みくらいは余裕だろ
luabindっつーライブラリがすでにあってだな。
struct Hoge { }; class Fuga { class Piyo {}; public: shared_ptr<Piyo> f(vector<Hoge> hv, Piyo const & p, optional<iostream &> ios); }; バインダって使ったこと無いんだけど こう言うクラスも簡単にバインドできるの?
おまえわかってて書いてるだろw
class Fuga { public: shared_ptr<Piyo> f(vector<Hoge> hv, Piyo const & p, optional<iostream &> ios); }; コレの意味がまったく理解できない俺に誰か解説お願い
std::vector boost::shared_ptr boost::optional あとはぐぐって自分で調べれ
shared_ptr<Piyo> p; や optional<> f(){} という使い方ぐらいなら分かるけど クラスメンバで shared_ptr<Piyo> p(...); という使い方は見たこと無かったので。 と思ったら今分かった shared_ptr<Piyo> f(vector<Hoge> hv, Piyo const & p, optional<iostream &> ios){} これか。
SWIG は STL のコンテナクラスはいくつか対応してるみたいだけど、Boost はさすがにだめかな。 でも typemap かけば、まぁ、可能といえば可能。簡単かどうかは知らん。 ただ、ゲームなどにスクリプトエンジンを組み込むときは、将来の変更のことも考えれば、 できるだけホスト言語とスクリプト言語のインターフェイスはシンプルししておいたほうがいいと思うんだ。
変態テンプレートテクニックが使えなくなっちゃC++である意味なんて殆ど無いよね
stlだろうがboostだろうが、そこに型があれば、それぞれ全部登録していけばバインドはできる。 ただ、いまあるバインダはテンプレート型意識してつくられてるのはあまりないから、 それぞれ全部メソッドを手で指定するはめになる。よく使うものは、バインダ側を拡張して、 テンプレート型ごとの自動登録処理を書いてしまうのが妥当だね。 shared_ptr は、スクリプト側のリファレンス管理とかぶるから意味が薄いな。 ただ、データの管理用の構造を組むのは簡単な部類だから、C++とのソース共用の意味では バインダ側で汎用処理できるリリーサをはめるテンプレート一つ足しておくのは悪く無い選択。 わりと簡単に書けると思う。 vector はなー。vector そのものを型としてエントリするのは簡単だけど、 スクリプト側の配列系とうまくやりとりできたほうが嬉しいだろうからなぁ。 スクリプトの配列から全部つめなおし処理をしてくれるような型変換コードをかくか、あるいは、 lua はよく知らんが、squirrel は配列とかの参照のメタメソッド登録ってのができるので、 スクリプトの array と見た目的には同じようにアクセスできるような細工をしたクラスにするか。 スクリプト側の配列は型が汎用だけど、これはいれれるものは限定されるから、そのあたりは 入れようとした時点で例外で対処、とかかな。map も連想配列とうまくバインドできると便利そうだよね。 optional は、うーん、これはあれかなスクリプト側で void とか null とか渡されたときと、 目的の型をわたされたときとでうまく詰め替えて処理するような型変換処理を書くのがいいかな。 そんなわけで、この程度なら、テンプレート使いなら特に問題なくバインダを拡張することで対応可能だと思われる。 なかなか良いお題なので、自分のバインドコードにはそれぞれあとで考えて足してみることにするよw
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
いいかげんGameMonkeyのAAをくれよ
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ GameMonkey!! 彡、 |∪| / / __ ヽノ / (___)
このスレッドは天才チンパンジー「GameMonkeyちゃん」が 単体テストのために立てたものです。 GameMonkeyと開発者とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 組み込み言語研究所
そろそろ新しいクールな組み込み言語でねぇかな。既存のはそろそろ飽きてきた
>>398 Scheme以上にクールな組み込みスクリプト環境はねえぞ。
Lispの一族はVB的なイージーさが致命的に欠けている
ならJavaScriptでドヤ? つかLISP族はプログラマー以外にスクリプトを欠かせる場合になかなかよいぞ。 専用命令を手続きとしてつくっておいてやれば、 HTMLのようにマークアップしてくれでOK。 細かい制御が必要な場合だけ共同作業。
非プログラマにLISPを書かせる勇気がない
非プログラマを想定する場合内部DSLは向いてないってレベルじゃない
AngelScriptは組み込むのも簡単だよ! ShiftJIS対応版とかも簡単だよ!
シフトJISかよwww
>>404 特定用途のシーケンスをだらだら書かせたりするのは割りとらくなんだけどなあ。
DSLって行ってもSQLや正規表現みたいに勉強が必要なものは作らないよ。
lisp は括弧の関係で素人につかわせたらダメだろう。一番外の括弧なしでコマンド記述していくだけ、みたいに1段かませるならまあなんとか
>>408 インデントのやり方をXMLやHTML風にしてあげるだけで、
ずいぶん初心者にもわかりやすくなるよ。
()のチェックや想定以外の手続き名のチェックとか、
そこらへんは自前のプログラムかけて検出するしね。
LispってDSLが簡単に作ることができる、とよく言われてたけどあれって内部DSLのことだったのか RubyのDSLが簡単に並みの詐欺じゃないのか
内部DSLの利点って、 DSLつくってもけっきょくはへんすうやすうしきうめこんだりぷりぷろせっさつくるのもめんどうだよねー というときのプログラマー向けの用途だと思ってた。
readしてevalすれば外部DSLも簡単に!
\ l´⌒\⌒\ \\ \ \ ヽ ) ) \\ \\ ( \ \∩___∩ \\ \ \ ⌒⌒| ノ ヽ \\ \ \ / ● ● ト、\ \\\ \ Y | ( _●_) ミ\ \\\ \ / 彡、_ |∪| ノ \ \\\ (____)―ヽノ' ヽ  ̄ ̄ ヽ\\ \, j l l .l } Lua! l (_ノノノノ
Lispで書いたらどんな感じになる?
このスレを見ていたらLua使いが厨房に見えるのはなぜだろうな
>>415 そりゃあ、既にトレンドはマルチコアの活用に移りつつあるのに、
その一つ手前の軽量スクリプトで柔軟な開発をしよう、に留まってるからだ。
Luaを始めとしてほとんどの軽量スクリプトの処理系は、マルチスレッド化に対応できない。
ならマルチコアを活用できる言語を作ればいいじゃない
スクリプト処理系をマルチスレッド化してうれしいことがいまいち思いつかない
やっぱりAngelScriptだな。
だな
>>416 頭固いな
スクリプト側で完結しようとせずに
並列化したい処理は組み込み先の言語にやらせたらいいじゃない
>>418 複数のスクリプトを同時に走らせたい場合って無い?
結構あると思うんだけど
>>422 走らせたきゃ走らせたら?
それが出来ない縛りでもあるの?
>>422 んー、全部スクリプトで作ってるのならあるだろうけど、
C/C++にくみ入れてる状況ならスレッドが必要な処理は C側に持つよ。俺なら。
スクリプト側はコルーチンで十分。
luaって静的スコープ? クロージャーでもできる?
どれだけ時間がかかるか判らない処理とか、 明らかに時間がかかる処理とか、そういうのが入ってきたらどうするのよ。 コルーチン中で処理を小出しにするテクニックはあるけど万能じゃないし、 コルーチンにだけ頼ってたらすぐに破綻すると思うんだが?
>>427 > どれだけ時間がかかるか判らない処理とか、
> 明らかに時間がかかる処理とか、そういうのが入ってきたらどうするのよ。
喩えのレベルが低すぎ。
> コルーチン中で処理を小出しにするテクニックはあるけど万能じゃないし、
> コルーチンにだけ頼ってたらすぐに破綻すると思うんだが?
スレッド使いなよ
少し前に同じ内容のレスが何度もあるんだから少しは目を通しなよ
連携が容易なんだから得意なほうに処理をまかせちゃいなよ
>>427 そういうのはC側におくよ、と言ってるわけなんだが……。
コルーチンにたよるのはむろんそれで問題が無い範囲のみだ。
マルチスレッドのスクリプトを否定するわけじゃないよ。PC用にアプリ書く必要があるときは、
スクリプト使うならスレッドが扱えるものを選ぶ。画面固まるのイヤだし。
現状では、lua とか squirrel を選んでるジャンルでは、重たい処理は
Cで書かれたエンジン側でスレッド使ってまわすってのが暗黙の前提で
あると思う。そこに文句つけるのは微妙に筋違い。
今のPCレベルのマシンパワーがおりてくれば、コンソール機や他の組み込み用途でも
全部スクリプトで〜ってなってくる可能性はあるけどまだちょっと早いやね。
430 :
デフォルトの名無しさん :2010/10/18(月) 21:17:58
LuaJITのインストールしたいんだけど、詳しく説明してるページありませんか?
>>416 何故組み込みスクリプトとマルチスレッドが同時に使えない話になっているのか
コレガワカラナイ
PS3/XBOX360/PCに採用されている以上、マルチスレッド環境でも使われているということだろう
LuaならGame Programming Gems にいくつか載ってた気がするぞ
Stateをスレッド数分作成して、関数定義等は共有化する方法とかあったが、スレッド間で共有することになるから
(でなければスレッド数分複製することになる)並列処理中は定義の上書きはしない、同期処理部分で行う。
とかするのか?とか色々考えることはあるけど
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
>そういうのはC側におくよ 勿論そうなんだけど、Lua側からスレッドの制御できるようにしたり、 データの同期取れるように関数拡張しない?
>>433 すればいいじゃん
スレッドを生成してもいいが同期を取ってはいけない
という家訓でもあんの?
>>433 当然するにきまってるだろう。というかしないと制御できないじゃないか。
コルーチンのドライブ部分に待ち制御をしこんで、スレッド待ち中はスクリプトを起動させない形で待ち合わせするか、
あるいは、非同期動作するオブジェクトに動作確認メソッドをしこんで、スクリプトから随時ポーリングして待ち合わせするか、
は設計次第ってことで
なんか話が微妙にかみ合ってないな。 だからそういう拡張がLuaをマルチスレッドに対応させるってことなんじゃないの? 発端は >Luaを始めとしてほとんどの軽量スクリプトの処理系は、マルチスレッド化に対応できない。 なんだろ?
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
というか、スレッド使う理由を挙げてる人間が二人いて、
・時代はマルチコアだよ!
っていってるヤツと
・コルーチンだけ使うよりスレッド使ったほうが便利だよ!
っていってるヤツがいるように見える。
>>418 は前者に対するレスだと思うけど、それに対して後者で返してるんじゃねえのかなあ。
なんだかLuaという言語の評判がいいらしい
使ってみる
CUIつまらんGUIでもやるか
wxなど使ってみる
重い処理を入れた、固まる
調べてみる、スレッド?排他?よく分からん
簡単な方法はないか、2chで聞いてみる(
>>301 )
コルーチンで対処出来るらしい(
>>320 )
マルチコアを生かしていないことにふと気づく
結論:マルチコア非対応のLuaはゴミ(
>>416 )
それに対する反論は一律していて
C/C++で書けよw
という内容なのだが
本人はLuaの軽量で高速、移植性があり柔軟で容易という思想はおろか
スレッド?排他?よく分からん
というレベルなので話が通じない
と俺予測してみた
>>437 いいだしっぺの意図は、
「スクリプトのマルチスレッド実行」だろ?
反論してるやつらは皆そうみなした上での回答、
(「マルチスレッドはC側でするから別にスクリプトそのものをそうする必要はない」的な内容)
だぜ
スクリプトそのものをそうする必要はない これがよく意味が分からんな
ttp://www.lua.org/about.html >all platforms that have an ANSI/ISO C compiler
「マルチコアを生かす」プラットフォームに対応するわけがない。
Makefile には -ldl とか -lreadline とか書いてあるが、これでも御節介なレベル
>>442 主観で翻訳すると
luaThread> lualibs[]の末席にでも加えてーな
一同> 無理、2軍(Lua Binaries)で実績作って来い
こんな感じかな
>>442 python の thread モジュールとかみたいなのは無くても困らないだろ、ってことじゃね?
まあ、python(cpython) のは GIL なのでどっちにしてもマルチコア的には全然うれしくないわけだが。
仮に lua や squirre lをマルチスレッド化するとしても、ステートごと分離する以外だと、結局 GIL にするしか手はないよね。
スクリプト言語系でうまくマルチコアに対応した実行ができてるのは Haskell とかそっち系か、
あるいは、JPython とか JRuby のような、JavaVM 上でうごくやつらぐらい?
Xtal はよくわからん。詳しい人よろ。
>無くても困らない というか「プリエンプション」と「共有メモリ」の両方が有ると困るんだそうだ だから「プリエンプション」がないコルーチン または「共有メモリ」のないクラウド(笑)が流行る
Cでマルチスレッドむつかしくてよくわかんねー -> Lua で簡単にできるようにして! レベルでしょ。
・プログラミング言語Lua公式解説書 ・入門Luaプログラミング 入門用として一冊買うならどっちがいい?
公式解説書のほうが1024倍ぐらい良い。下はゴミ
即レスとか神やわ。上を速攻ポチッてきました。下は見向きもしなかった。
お前が買うなら俺も買うぜ!
ちっっくしょぉぉぉー・゜・(ノД`)・゜・
組み込み言語に組み込みやすいと言われるPython選ばない時点でLuaでやりたいことっていったらたかが知れているわけでして スクレイピングを楽にするためにRubyを組み込んだアプリはあったな。 ようは用途次第だと思うが。
組み込みの意味が違うでしょ ユーザーによる拡張を考えるならLuaはありえない
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
auL
スクリプト言語による効率的ゲーム開発 の改訂版が出てたんで何が変わってるのかチラッと見て知ったんだが 次のLuaのバージョンで世代別GCが実装されるらしい(C#が採用してるやつ)。胸が熱くなるな
世代別GCかー。インクリメンタルよりもGC時間を制御しやすいから 個人的には歓迎だけど、あれフットプリント大きくなりがちなせいで 組み込み系ではあんま採用されてないような。 なんとなくLuaには似合わない気がするなー。
>>454 このスレの「組み込み」ってアプリケーションに組み込むスクリプト言語のことと思ってた
もしかして、マイコンの組み込みのような意味合いだったの?
どっちもだろ 実際には lua 組み込んでるアプリけっこうあるけどね。ありえないってことはない
Luaからスレッドの生成、停止、終了、Mutexの生成、操作できるように したのあるけど、需要あるんかな? バインドとboost_threadとか使い慣れてれば半日〜1日でできるような代物だし >461 みたいなのもすでにあるだしで、要らない気はするが。
ぜんぜん要りません
465 :
デフォルトの名無しさん :2010/10/21(木) 10:03:06
LuaってC言語と連携してるのが多いですよね C言語知らないとLua覚えるのは無駄ですか?
>>465 基本的には無駄ですが
決して無駄にはしない、と言ってくれる人が現れたらその人の気分次第で変わります
Apache でも mod_lua が標準に入ったりしてるらしいし、使い処はそこそこあるんじゃないかしら
業務用のソフトでもLua使ってるところは普通にある。
>>465 価値観は一様でなければ不変でもないので無駄かどうか分かる人なんていませんよ。
これでは実も蓋もありませんので
個人的な意見をつらづらと書き連ねてみる。
・素で使う(lua実行ファイルのみ)
初心者ならば基礎的な概念は学べるので無駄にはならない
が、あえて選ぶメリットはない。
・ありものを使う
・lua実行ファイル+拡張モジュールを汎用言語として使う
汎用言語ではないので、あえて選ぶメリットはない。
・組み込み済みアプリをスクリプターの立場として使う。
リファレンスを理解する事が大部分なので、必要に迫られてから腰を上げても遅くない。
・Cに組み込む(拡張する)
いい意味で枯れてるので面白みは無いかもしれないけど無難なところ。
・C++も理解
してないと面倒。
・C以外に組み込む
組み込めますがC組み込み前提の言語なので、旨みは薄れる。
Cに組み込む以上の知識と労力が必要。
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
LLを、並列実行の組み込み側じゃなくて一番外にあるホストにしたいなら、erlangに行ったらいいんじゃないかな。 まだ流行ってるし、並列処理向けだし。普通にPythonやRubyでもいいとおもうけど。
Luaで拡張に行き着く当たりが「ちっ、Cで拡張モジュール書きたくねえんだよ」という声が聞こえてきてよろしい
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
むしろCで書いたものをスクリプトからガンガン使いたいからのLuaだと思ってた
それはPythonとか使うだろ 組み込み系言語といえば普通逆だわ
関係ないがPythonの参照カウンタめんどくさい。
C/C++との連携と言えばAngelScript。 マジ簡単
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
>>478 少し前に試してみたが、組み込みやすいとは思わなかったな
Luaは別格としてもsquirrel,python,xtal以下
Rubyレベルじゃないかな?
というか、C/C++へ組み込みやすいかどうかという以前に
C/C++との相性は良くないよね
pythonはスタティックリンクのやり方がわからん
ゲームでパイソンって国内での有名タイトルあるの?
Cは使えないのでLuaクリアしました 短い間でしたがお世話になりました
>>480 C/C++側に値を渡すのにいちいちスタックごちゃごちゃいじったりしなくていいから、相当楽だと思うけど。
C++でビルドすると例外有効になるって話なんだけど これC++でビルドするにはどーすればいいんよ プリプロセスで__cplusplus定義したらエラーでまくり
>>485 スタックなんて情報処理の基礎中の基礎じゃん
そういう意味じゃないと思うんだが
スタック操作メンドクサイ バインダ使えよ C/C++は使えないのでクリアしました ループの予感w
っていうかスタックってバインダ使わなくても別にそんなに面倒じゃなくね。
普通に使っても引数の渡し方としては直感的(
>>487 はそういう意味かな)だと思うし、
自分でラッパ書くのもそんなに辛くない。
>>486 何の話をしてるのか書かれてないので一般論としてだが……
普通はコンパイラオプションに C++ としてコンパイルする指定がある。マニュアルかヘルプ読め。
あるいは、たいていのコンパイラは拡張子を cpp とか cc とかにしておくと C++ としてコンパイルしてくれる。
__cplusplus はコンパイラが自動的に定義するものでユーザが指定するものではない。
C++の構文解析してバインドしてくれるツールってあるの? あのtemplate使った気持ち悪い感じのやつじゃなくて
というか、AngelScriptってC++との親和性が設計目標の一つだったと思うが 使ったことはあるが、大体、最初からバインダが同梱されている感覚かな ただLuaのバインダとかと違ってテンプレートじゃなく文字列でバインドするから その違和感かもしれんけど テンプレート気持ち悪いって人は触ってみてもいいかもしれん
>>490 AngelScriptだと何もしなくても関数の引数取得できて、返り値も渡せるよ。
例えばC++側にこんな関数があったら、
int FuncA(int n)
{
return n+3;
}
C++側でこうすれば
lpEngine->RegisterGlobalFunction("int FuncA(int)", asFUNCTION(FuncA), asCALL_CDECL);
スクリプト側でFuncAそのまま使えるしね。
それだと実行時パースだよね。ちとうれしくない。
動的言語を組み込みで使おうとしているのに、かたくなだなw コンパイル時に検出できた方が楽と考えるのはこのスレらしい
静的は正義
PC用なら別にいいんだけどねぇ
Lua側でC++の構造体を読み書きしようと思ったら、バインダーを 使わないとダメでしょうか。
構造体を読み書きする関数つくってそれを登録すれば別にバインダーでなくてもかまわないんじゃ
AngelScriptの利点は構文とGCに口出しできるとこだと思う バインドが楽なのは嬉しいけどオマケな気が
ASのメリットの大部分は静的タイピングと内臓バインダ
デメリットは静的タイピングと独自バインダと実績が無くマイナーなところと
継承が面倒なところと連想配列がない(まだないのかな?)というところと・・・
>>502 ダメじゃないけど冗長になるよ
テンプレートベースのバインダはどれも似たようなもんだから
Lua以外のバインダを使ったときにも生かせるよ
C++を使っていてテンプレートを避けるメリットなんて無いんだから
いいきっかけだと思って触れてみるべきだと思う
>>503 生成破棄を繰り返すようなものだと
deleteを隠蔽のために
スクリプト側でさらに1枚噛ませるハメになるよ
Lua側でC++のオブジェクトを操作するならバインダを使う C++側でLuaのオブジェクトを操作するならスタックを使う Luaのオブジェクトは数種類しかないからスタックは簡単 C++のオブジェクトは多種多様だからバインダはむずかしい という認識で合ってるかな?
それは言葉遊び。 lua のAPIがスタック操作ベースだから、バインダは中でばりばりスタック使ってるし、 lua のオブジェクトをC++側から操作する場合もラッピングしてしまえば別にスタック意識することはないし、 lua から C++ のオブジェクト操作も、記述ルールを限定すればバインダ自体もシンプルなもので十分だし。
「難しい仕事を簡単に」ってことにしたいのだろうけど 難しさと簡単さの両方を同時にアピールする必要があるからなあ・・・ 難しいというと敬遠されるし 簡単だというと、じゃあ別にツール使わなくても簡単じゃね?という印象になる
Luaなんか使ってると時代に取り残される 生産性で他社に差を付けられとんでもない浪費プロジェクトになる
具体的なことが何も指摘できないFUDだな
たぶんこの程度もわからないのかとバカにされたんだろうよ。そっとしておいてやろうぜ
>>506 >>508 '簡単'という便利で曖昧な表現はやめよう
手間は掛かるが難易度は低い(LUAAPIのみ)
難易度は上がるが手間は省ける(バインダあり)
どちらも'簡単'と言えるでしょ
例えば「TCPのみで通信すると手間が掛かる」みたいな話なのか? 手間というのはSOAPのようなものを実装する手間のことだろ
JITって最適化が弱いけどコンパイルが高速なネイティブコンパイラーみたいな認識でいいんですか?
>>515 その場で実行時にマシン語にコンパイルするという話では?
普通はスクリプトエンジンがソースをスクリプトを動かすVMが解釈できる形式にあらかじめコンパイルしておいたり、
もしくはソースのまま渡してその場でVMが解釈できる形式にしてから実行する
でもマシン語じゃないのを逐一解釈して実行すると「C言語より遅いじゃん?プギャー」厨がうるさいので、
それに対向するために、実行時にマシン語にして早くしようという試み
考慮されていれば、プロセッサ毎に最適化できるだろうけど詳しくは知らん
.netやJavaはJITついてるはず
>>515 VMがインタプリタ的に解釈・実行するのと全く同じ実行結果を得られる
機械語表現を自動生成させて代わりに実行させる形態のこと。
ネイティブより速いか遅いかは結果論であって全然重要じゃない。
ちゃんと学びたいなら、このスレのレスを期待するより自分で勉強したほうが早いよ。
動的言語のJITって本当にそんなに効果あんの? 恣意的なベンチマークには強いだろうけどメンバアクセスが増えると変わらなくなりそう
そのメンバアクセス部までJIT化するとすごい効果、ってのが LuaJIT の特徴だったような
いわゆるメンバアクセスのインラインキャッシュってやつ? あれJIT直接関係なくね
JITじゃないとキャッシュできないのだから関係はあるだろう
インラインキャッシュって呼出し箇所ごとにキャッシュを持つからそう呼ばれるだけで ほんとに呼び出し元のコード内に展開する必要はないよ。 インタプリタでも普通に実装できる手法。
JITの場合はその呼び出しコードごとキャッシュされるんじゃないの
GCの話は無視されるんだな…バレーでも見よう。
はじめる! Squirrel ykanda って本はまだ出てないのかこれ? 電子書籍?
work5きたこれ
AngelScript2.20.0記念カキコ
このスレで良く話題出てたIronPython死亡したのね
OPC Diary ≫ Blog Archive ≫ MicrosoftのIronPython, IronRubyプロジェクトはMSのプロジェクトではなくなり、コミュニティのプロジェクトとなるようです。
http://opcdiary.net/?p=4466 IronRubyも死亡、、、
死亡と言ってもコミュニティに丸投げするみたいだが
>>528 IronPythonプロジェクト内で開発されてたDLRが
.NET4.0で正式採用されたから、
分離されただけでしょ。
おーいみんな、祝福のときが来たぞー。 玄人むけ小規模オフィスルーターを製造するYAMAHAがLuaを組み込んだよ。 各種動作をLuaで仕込んでおけるってさ。 これはちょっとうれしいね。 オフィスで使うもよし、自分の家で楽しんでもよし。 やっは小規模LANのルーターはYAMAHAだな!
どの程度制御できるのか気になるな
任意のコードを実行される危険性というものがですね
>>533 ニコニコあたりで”演奏してみた”とか出るのが容易に想像できるな
>>535 やってみようと思ったが、ルータ高すぎて手がだせねえww
>標準のLua言語にあってもヤマハルーターでは利用できない関数は、ここに掲載していません こんなの大した参考にならんだろ。 標準docのチュートリアル以下じゃん。
Luaは拡張ライブラリ数が半端じゃないな。 天使とか永久に追いつけそうもないなこりゃ。
なぜこんな識別子のセンスが最悪な言語が流行るのだろうか
始めに革命を起こした者が勝者だ
Schemeのほうが先だが、Schemeはモジュールシステムのセンスが最悪だった
むしろ識別子のセンスが流行り廃りに影響するという意見を初めて聞いた
名前重要。 SchemeのモジュールシステムってR6RSの?
>>543 Perlの実装で使われてる短記法なんて今じゃ誰も使う人は居ないし、
Windowsプログラミングのはやりの頃に出回ったハンガリアン記法も、
今じゃせいぜいAPI周りだけだろ。
今はJava記法かな? C#もほぼ同様の記法だけど。
>>545 先頭が大文字か小文字かの違いしかわからんw>Java推奨とC#推奨の記法w
個人的には・・・
・定型的、定数的なものは全て大文字で_区切り。
・変数は小文字スタート
・メソッド、プロパティーは大文字スタート
・引数には_末尾につける。
・ローカル変数は_を先頭につける。
こんなんが好きかなねえ。
OOは名前の重要度が高いかもしれないが、LuaはOOを直接提供せず丸投げするだろ。 名前のセンスも丸投げなんだよ。 しかし、コードを一行も書かずに丸投げするわけではないから、信用がある。
Javaや.NETで命名規則が重視されてるのは、 それ自体フレームワーク色が強いのとIDEサポートが重要だからだろ。 スクリプト言語では書くのが楽ならどうでもいい
>>548 命名規則でIDE連携なんてクソJavaくらいだろ。
Luaはスタックが・・・ C++出来ないんですね Luaは命名規則が・・・ Cすら出来ないんですね こんなところだろ?
スタック操作面倒くさいじゃん。 可変引数とかするときには便利だけど、引数固定のときはわざわざスタック使うのは面倒くさい。
JavaScriptよりも古い言語に何を
>>554 だからどうしたかね。
マイナー言語の割りには十分すぎるくらいの
ライブラリサポートがあると思うが。
スタックが面倒ならバインダを使えばいいじゃない
何度目のループ話題だw
>>540 識別子って何を指してしるの?
標準で提供している関数名か?
それとも、forとかtableとか予約語のことか?
キーワードを識別子とは言わないぞ
ルアでアロケーターの扱いがよくわからない 猫でもわかるように親切に解説してる日本語サイトって無いですか?
tableの要素削除したいんだけど t["a"]=1 t[10]=50 で t[10]=nil とかやると要素削除してくれ処理系があるんだ でもこれって正規の方法なのかな
nil入れるとガベコレ対象になるんだから合ってるんでね? よくしらんけど
void * alloc(void * u, void * p, size_t o, size_t n); u(?) nがゼロなら開放する oがゼロだとmalloc的に新たにnだけ確保して返す oがゼロじゃなければrealloc的にそのまま再利用したり、足りなければ再確保して値をコピーして返す uって何に使うの?
>>564 allocという関数を作った本人に聞いたら?
エルなんとか先生に?メールポルトガル語じゃないとだめかな?
もしかして、allocじゃなくてl_allocの事を言いたいのかな? それならlua_newstateを参照すると良いよ タグジャンプやGrep、コピペのやり方ぐらいは先に覚えておくべきだと思うがね
luaって未整理すぎる c++のSTLに相当するような標準処理関数群ぐらい用意してくれよ
>>568 本末転倒。
そういうのはベースとなるアプリ側で整備すべき。
だけどSquirrelだと辛うじてファイル入出力や
浮動小数点演算ができる程度の標準ライブラリをオプションで用意してるわけで、
整備されてるに越したことはないわな。
「C++のSTLに相当」程度じゃ、LL系なら言語そのものに含まれているようなもんでしょ むしろLuaは以前みたいに標準ライブラリは専用の別モジュールに分かれていて欲しいくらいだ
>>568 テンプレートは動的なポリモをなくすためだけの存在。
整理も何もない。高速化するだけ。
高速化するだけで十分じゃないか
>>572 そもそもLuaは型を持たない動的言語なわけだが?
動的でも型を持ったっていいじゃない 最適化しやすいだろ
おまえは何をいってるんだ?
>>571 の時点で、テンプレートに整理の機能があるなんて
>>568 はいってないと思うが。
どういう話の広がり方だw
>>576 揚げ足を取るようだが、568自身が「未整理」と言ってるわけだ。
それを前提にスレを読み直せば、わかるな?
スタック操作がめんどくさい 識別子のセンスが最悪 未整理すぎる 型が無い いちゃもん化してきてるぞ ASer頑張れ
>スタック操作がめんどくさい まあこれは事実なんでしょうがない。 >型が無い 個人的には通常の型+何でも入るboost::anyみたいなオブジェクト、って組み合わせが好き。
Squirrel 3.0 beta 3 でてますね。 Squirrel 3.0 でどなたか本出してください。
安定板しか眼中にないよ
つまり未成年には興味がないと?
No.
luaにはc++のboost見たいなきっちり決まった名前つけルールはないのか?
普通のCスタイルでしょ 非公式なライブラリも基本的にはCスタイル そうでないのはラッパーで名前を踏襲してるだけ ってのが殆どじゃないかな
>>580 > >スタック操作がめんどくさい
> まあこれは事実なんでしょうがない。
どんな環境を想定してるの?
> >型が無い
> 個人的には通常の型+何でも入るboost::anyみたいなオブジェクト、って組み合わせが好き。
それがまさにコンパイラ言語とLLとの組み合わせなんだけどね
どうでもいいけど、コンシューマのゲームみたいに止まったら下手したら回収騒ぎにもなるような場合にも Luaみたいな動的言語使うんだね。 Webアプリやネトゲやアップデート可能な機種ならアップデートリリースすればいいんだろうけど。
いや、止まるのに動的も静的もないし
有るだろ 確率が全然違う
>>587 >どんな環境を想定してるの?
LuaからC++側の関数呼び出す時と、その関数からLuaへ値を返す時。
えっ
GCで止まる可能性ってことかとも思ったけどそうは解釈しにくい文面だなー。 失笑の予感。
>>588 別にゲームだったらハングしても大した問題じゃないし、新しい技術に極端に消極的な方が問題。
クレームの粘着はオタクの方がきついからゲームこそ慎重になるべき
オタクは客に非ず、クレーマー予備軍というのが、今の業界の定説。
んなこと言ってるから割られるんだよwww
>>595 |
|
|
| /  ̄  ̄ \
(=) /、 ヽ
J
>>595 |・ |―-、 |
q -´ 二 ヽ |
ノ_ ー | |
\. ̄` | /
O===== |
/ |
/ / |
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
http://luaforge.net/forum/forum.php?forum_id=2382 lua-CoatPersistent is an Object-Relational Mapping for lua-Coat.
It is built over the modules LuaSQL and Dado. It could support all database engine which has a driver in LuaSQL.
luajitなら軽いのかな。
シンプルだけど遅い実装ってluaには不似合いな気がする。
いつのまにか5.2がalphaになっとる
いつかここにも貼られると思ってたが 別の部分で相当話題になってるよねそれ
Lua使った結果がFF14の惨状なんだろうか
Luaはクソってことか
状況的には外注だしたら Lua 使ってたけど使い方わかる人が社内にいない、ってかんじじゃないかね。
>>603 そもそも内製の言語を使っててSquirrelが例外って感じだったような
まぁ、ラインごとにツールが違うとかいうのはよくあること。
そもそもLuaってそんなに使いやすいか?
正直速くなければ使ってないぐらいには使いにくい
速度必要ならC++で書くべきじゃない?
LuaJITが他と比べて笑っちゃうくらい速いからな。 Lua自身の採用実績と合わせ技で「多少使いにくくても……」と思わせられる。 あと最近慣れた。
単なる条件分岐ありC++呼び出し記述と考えると意外とすぐ慣れる
スクリプティングは生産性を上げるよう、より便利になるようにするために使うのに、 その不便さに慣れる、というのは本末転倒のような気がするな。
気がするだけだ。まあ、わかってていってるんだろうが。
コンパイル時間の節約と拡張性が目的だから多少臭い文法でも気にしてはいけない
ユーザーに拡張書いてもらう時も「JavaScriptみたいなもんです」 と言えばWeb系の方々にも馬鹿ウケ しかしビット演算は組み込みにしてくれ5.2ェ…
たしかにWeb系から見たらJavaScripみたいなもんだなw
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
というか、Javascriptとの違いが逆にあまりないんじゃね?
>>166 >うちは lua じゃなくて squirrel つかってるけど、コルーチン持ちの言語使うと UI 用の作業工数が激減するのは確かではある
これ詳しく知りたいです。なんで?
>>621 エンジン側で、コルーチンの中断のタイミングで画面更新するように
しておけば、画面遷移用の処理を言語のステートメントつかって直線的に書ける。
パーツのフェードインアウトの類は for で必要なフレーム数でまわせばいい。
入力待ちとかは while とかつかってキー入力をポーリングすればいいし、
画面を分ける必要があるなら普通に if や switchで分岐すればいい。
画面更新したいタイミングで適宜コルーチン中断用の命令をはさむだけ。
遷移用のステートマシンかかなくてすむってだけで大幅に工数さがるし、
なにより修正が楽。たとえばボタンと画面遷移を追加して、とか頼まれたとき、
ステートマシンだと、ステート数ふやしたりで頭ひねるはめになるけど、
コルーチンだと、画面の処理をコピペしてきて間に挟んだらそれで完了
> 遷移用のステートマシンかかなくてすむってだけで大幅に工数さがるし、 そうそう、設定ファイルをスクリプトで書きたいとかそれよりも もうこれが全てなんじゃないかとw
調子にのって、ゲーム中のオブジェクトの状態管理も……とかやりはじめると、物によっては永続化問題でドはまりするので注意なw UI系とか、アニメ動作とか、単発で使い捨てするステートとの相性は笑っちゃうぐらい良い>コルーチン
>>622-624 ゲームって何げにUIのコード量が多いんだよな。
行数で見たらゲームエンジン全体の4割くらい占めてる。
オブジェクト.メソッド+UIスタックという形で普通に実装してたんだが、
コルーチンを使うと楽になるのか。試してみるわ。
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
たくさんのスレットが走るゲームに、イベント・NPCキャラ制御の目的でLuaを積みたいんですが、 スレットの同期にLuaをあわせることって、簡単ですか? あと、Lua上でのキャラクターの識別などは、どうするのがスタンダードでしょうか? 教えていただけると、幸いです。
たくさんのスレットが走るとかMafiaかよ
629 :
627 :2010/12/05(日) 12:12:58
おっと、ゲームの細かい仕様を言うのを忘れてました。 このゲームはMMORPGで、現在はアバターチャットと呼べる程度までできています。 土台の部分は、C++で書かれています。 キャタクターやNPCは、データ制御用の関数を持ったオブジェクトになっています。 それとは別に、キャラクター制御の関数を持ったオブジェクトを用意しています。 キャラクター制御用オブジェクトは、いくつかのスレッド用の関数を持ち、 スレッドから呼び出される関数により、役割が変わります。 こういう実装でLuaを載せる場合、どうするのがいいでしょうか?
スレットってなんだよってのはさておき、 lua 自体はスレッドはなにも配慮してないので、C側で同期とって、それで同期とれたタイミングで呼び出す、とか そういった構造が必要。現状 C側で同期がとれてるポイントがあるのならそこから呼び出す分には何の問題もないかと キャラクターの識別ってのも意味不明だが、C側のオブジェクトに合わせればいいんでは?
そのオブジェクト自体が、複数のスレッドから呼ばれても大丈夫なように同期がとれてるなら、 lua を動かすことになる制御スレッドから自由にメソッド呼ぶだけでいいんでは
632 :
627 :2010/12/05(日) 12:56:43
共有用のデータは、データ制御用オブジェクトの配列でやりとりしています。 このサーバーは、データ制御用オブジェクトのリングバッファおかげで、 データの整合性が取れていて、スレッド同士の間では同期を必要としないです。 キャラクター制御用のオブジェクトも配列化されていて、 そのオブジェクトの関数をスレッド化する限りは、メソッドからのスレッドの識別は容易です。 ただ、Luaの仕様の半分も分かっていない状態なので、 処理の途中での割り込み方法や、スクリプトの並列実行は可能かどうか、 スクリプトの強制中断は可能かどうか、C側へのメソッドでの文字列の受け渡しなど、 その他色々な細かいことが知りたいです。
ああ、うん。もっと勉強して実際つかってみて行き詰まってからおいで。 そんな難しくないから。 ・lua のvmはスレッドセーフではない。単独VMを複数スレッドから扱う場合はGIL処理が必要 ・lua は単独のスレッドで駆動させるだけで使うのがおそらく主流。他のスレッドから呼び出したい場合はスレッド間通信で依頼を出して結果を待つ、とかする ・lua のスクリプトの実行系は複数持てる(luaではこれをスレッドと呼んでいる。用語の混乱に注意) ・それぞれのluaスレッドの実行を途中で(例えば別のCスレッドから)強制中断する機構はない。 必ず呼び出し終わるまで待つ必要がある。 ・luaスレッドの実行をスクリプト側から自発的に一時中断することは可能でこれを「コルーチン」と呼ぶ。コルーチンで中断されたスクリプトはつづきから再開できる ・型は汎用型でその中に文字列がある。普通のC文字列なのでCにはそのままわたせる
634 :
627 :2010/12/05(日) 14:14:52
>>633 あ、ありがとうございます。
VMは、スレッド間で共有しない予定なので、スレッドセーフがなくても大丈夫です。
色々気になることがわかりました。とりあえず、テストしてみようかと思います。
あと、もう一つ質問なのですが、C++のクラスの配列で、メンバーの関数内から、
別のメンバー関数をLuaに登録したとして、正しく呼び出せますでしょうか?
すみません、LuaをLinux上で動くCで組み込みしようとしたのですが、 ヘッダーは読めるのですが、関数が見つからないといって、コンパイルできません。 コマンドラインでは、動いてくれるのですが、何が悪いのでしょうか?
>>635 Linuxerのくせに要領を得ない質問すんな。
ライブラリのリンクが出来てないんじゃね。
ライブラリのファイル名は分からないけど、例えばliblua.so とかかな。
>>636 調べて色々試してみたら、コンパイル時のオプションが1つ足りなかったみたいだ。
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../liblua.a(loslib.o): In function `os_tmpname':
warning: the use of `tmpnam' is dangerous, better use `mkstemp'
という警告が一個だけ出たけど、無事コンパイルできて、動いたよ。お騒がせしました。
LuaやSquirrelなどのコルーチンを使用可能なスクリプト言語で yieldによる実行の中断を活用したUIのサンプルコードは どこかで入手できませんでしょうか。
UIの処理をコルーチンでやるというよりは、ボタンを押した後のアニメーションとかを コルーチンがあるスクリプトで書くと楽になるって感じじゃないのかね。
Squirrel 3.0 クリスマスリリースすんのかな。 RCだすのかなぁ
squirrel 3.0 は全然おいかけてないんだけど、どのへんがうれしいポイントなのか誰かおしえてくれ
In the next release(3.0 beta2): api impovements performance tuning additional documentation 公式のトップにはこう書いてあるけどざっくりしすぎだねこれじゃ 細かいのはフォーラムみてるといろいろあると思う テーブルをJSON互換の記述形式で書けるようになるとかあったと思う
一応調べてみた ・delegate キーワードがなくなってオブジェクトの組み込み機能 getdelegate() / setdelegate() に ・parent (仮想スロット) がなくなってオブジェクトの組み込み機能 getbase() に ・新キーワード base (いわゆる super ですな) ・新演算子 <=> 要するに sq_cmp 相当 ・lamda式、といってるけど単に function のシンタックスシュガー ・local 関数定義のシンタックスシュガー ・array にビルトインメソッドをいろいろ追加 ・vargc, vargv(仮想配列) を廃止して、vargv が実配列化 ・instanceof がオブジェクト以外をスルーする ・自由変数の記述廃止 (javascript 同様レキシカルスコープ処理が自動で行われる) ・エラー表示用関数が一般の printfunc と分離。関連して組み込みメソッド error() 追加 ・ネイティブなデバッグフック ・実数の double 対応 < これは squirrel2 にもはいってたような ・wakeupvm 時に例外をなげられるようになった ・クラスのメンバ参照がハンドルベースで可能に(高速化に使えるとおもわれ) ・クラスのメソッドがインスタンス生成後もたせるようになった ・JSON互換のテーブル記述 ローカル変数はいいかも しかし,一番大きい変更は、3.0beta2 からライセンスが MITになったことだだ。 lua のように名前が出ないのが悲しかったんだろうか^^;
>クラスのメソッドがインスタンス生成後もたせるようになった これ、地味に重要な仕様変更だね。 squirrel はインスタンスのメソッドはクラスのそれを実行時に直接 呼び出ししてるので、インスタンス生成後にもメソッドを交換できることに
646 :
644 :2010/12/11(土) 03:58:47
書き間違い ローカル変数はいいかも>自由変数のレキシカルスコープ化はいいかも
AngelScript 2.20.1記念カキコ
>>276 >
>>274 の言うとおり、デフォルトだとセーブロード処理が難しかったので
>Luaの内部にも手を入れてる。
どういう風に手を加えたのかずっと気になっている・・・
それと、パッチ当てても同じセーブデータを使えるようにするのはやはり不可能だろうか
VisualStudioでエディットコンティニューって言うのがあるけど、あれと同じように出来ない?
ここの住民もゲームPGが多いの?
我々のような科学技術計算を生業とするものが集うスレにそんな底辺PGがいるわけなかろう
>>650 YAMAHAのルーター屋さんはどうすんの?
このスレでまともな回答返してる人は軒並みゲームPGっぽい空気だな
■の社員も居るね。まちがいなく。
ばれたか
>>639-640 UIの処理書くのは無名関数やメソッドがオブジェクトとして取り回せる言語なら
それだけでもイベントドリブンのコードが書きやすいから恩恵受けられるけど、
yieldバリバリなの書き方は気になるな
アニメーション部分か?
アニメーションとコルーチンの相性のよさは異常。
で、コルーチンの使い道はそれだけなんですか?
状態遷移を楽に書けるってメリットはアニメーションに使うだけに留まるもんじゃないと思うけど……。 なんでそんな圧迫面接みたいな。
アニメーションなどの中断したい逐次処理を記述すること自体は コルーチンで楽になるんだけど、 中断した状態自体を別のオブジェクトで管理しないといけないから 結局あまり楽になった感じがしないんだよね。 コルーチン内で呼び出した別の処理中で中断したりというのは出来ないわけだし。 (それができるのはStackless Pythonのマイクロスレッドとか)
ビジター的な実装で作ってしまったものを手っ取り早くイテレーターにしたいなーって時に使う
>コルーチン内で呼び出した別の処理中で中断 Luaのはできたんじゃねえの? それができないのは無印Pythonのジェネレータだった気がするが
Luaのリファレンスが暫く前から404なんだけど、移転か何か?
例えば、セーブやロードの時だろう 今までならデータドリブンやちょっとしたDSL(独自言語)でやってたら、 そのデータの構造体の中の位置やデータそのものを保存しとくわけだろ Luaのときはコルーチンで書くとルーチンの途中でセーブが起きる。 ロード時はルーチンの途中から始めないといけない。 VMの状態を保存して途中から始められることができるのがスクリプトの機能としても要求される。 もちろん、プログラム側もそれを考慮した書き方しないといけないよな
書いてみて思ったが、Luaのコルーチンだって切りのいいところで呼び出し側に戻しているわけだし、 上の例のDSLと変わらんか・・・ ネイティブスレッドでの動作だったり仮想マシンの中断、復元とはまた違うな
1命令ごとにコルーチンから抜けてちょうどいいところで別の処理をすればいいんだよ
ロードしたら音声だの文字表示だのが途中から始まるゲームは なんでこんなことやってのか不思議だったんだが、VMの状態を 保存してるのかな。フラグは分離しとかないバグ取りで死ねそう なもんだけど。
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
LuaでVM保存して再開てどうやるの?
基本的に無理です
Squirrel 3.0 RC1
3.0出たら業界で広めるか
ライセンスかわったからちと扱いづらくなったね。うち的には問題ないけど相手の説得がちと面倒。lua と同じになっただけではあるけど
>>671 MIT License自体が面倒ってこと?
著作権表示や本許諾表示に抵抗があるってことかな。
そそ。頭の固い御仁はまだまだまだいるので。 ミドルウェアとかで金はらえる先ならOKなのにフリー(無償、の意)だと難色を示される不思議
675は
>>674 の間違いでした。ごめん。
>>676 最近ライセンス表示画面を持つコンシューマゲームが増えてきたと思ってたんだけど、
所によっては難しいのかもね。
>>677 じゃあたくさん人に使ってもらうためには
いろんなライセンス形態用意しとくのが良いのかな?
>>664 >>665 もっと単純で、中断したコルーチン自体の管理の話。
セーブ/ロードについてはセーブできる箇所(通常クリック待ち)に到達した時点で
遷移状態を含めてそのままシリアライズしてるからさほど難しくはない。
(動作中のコルーチンではなくその初期化パラメータを保持したオブジェクトを用意しておく)
コルーチンはなるほどひとつの関数内の処理を中断できるけど、
各Widgetごとにイベントハンドラを定義するならその数だけ増えてしまうし
それらが複合的にアニメーションしたり状態変化したりするのって
そんな単純化出来る話かねえ、と。
当初から、UIでの遷移とかの、「保存する必要がない部分」なら便利、って話じゃね? 保存の必要性がある時点で、VMのステートごと保存しないといけないから急に大がかりになる。
>>680 うまく伝わらなかったようだ。ごめん。
セーブ/ロードで出入りする情報の話と、
UI遷移の話は別個に考えてほしい。
UIの遷移はオレもひょっとするとコルーチンで書くと楽なんじゃないかとは思ってるんだけど、
コルーチンって結局中断中の状態を変数として外側で持っておかないといけないよね。
じゃないと復帰できないから。
で、コルーチンがひとつしかないならそれでいいんだけど、
実際にはウィジェットの数だけ発生しうるのにどうするんだろう、というわけですよ。
コルーチンじゃなくて「トランザクション」って名前にすれば途中で中断しないのか? どんな名前だろうと、途中で中断しないように作れば、中断する必要はないと思うが。
>>681 「そういうところにはコルーチンは別に役に立たないから使わない」、で終了なのではないかと……
「中断中の状態を外側でもっておく必要が無い」ところでだけ使って、それが便利、って話なのに、
その前提条件をはずれた状態で「どうするんだろう」と言われても、その、なんだ、こまる
なお、lua だと
ttp://luaforge.net/projects/pluto とかVMまるごと保存してくれるライブラリあるけど、
実際使ったことないのでどのくらい使えるものかは知らない。
保存されるデータサイズ不定だから、それが許容される用途でないと使うのは難しいんではないかと。
今話に出ているコルーチンは、スクリプト内部でコルーチンオブジェクトを持たせて実行するやつなのか、 それともスクリプト自体をコルーチンと見て実行するやつなのかどっちなんだろう。 Luaで言うと、前者がcoroutineで作るやつ、後者がグルー関数内でlua_yield呼び出して止めるやつ。
どちらでも同じだろ。前者は単にスクリプト側で制御するために口をはやしてるだけ。 たとえば coroutine.yield は中で lua_yield 呼んでるだけ。 スクリプトだけでコルーチン制御するのは、エラーで止まったときの対応とかめんどくさいから俺はやらない。 複数のコルーチンを順次実行できるような処理をシステム(ゲームエンジンとか)側に内包したほうが良いと思う
Squirrel 3.0 はクリスマスリリース? エロイ人出版よろしくお願いします。PDFだとなお嬉しいです。
>>683 コルーチンって初期化した段階で別の変数に入れるだろ?
その話をしてるだけなんだけど。
それって中断中の状態を外側で持っているわけだよね。
>>687 理解した。根本的なとこで話がずれてた。
確かに個々のコルーチンをそれぞれの場所で実行しようとしたら数が増えると管理しきれなくなるね
対応策としては以下のようなものがあるかと
1. いわゆる「タスクシステム」的な組み方をする
・基底になるオブジェクトに共通的にコルーチンのスレッド変数を持たせる
・それらのオブジェクトを総なめしてコルーチン部を実行するような機構を作る
ゲームなりウィジェット的な処理なりなら、オブジェクトを総なめするような処理は
たいていどこかに一ヶ所はあるはずなので、そこで統一的に実行するようにする。
2. 専用のスレッド実行部に集約させる
コルーチンスレッドを保持した変数は、生成/破棄部で集約して、常に一つのリストに保持させる。
そのスレッドリストをなめて全部のスレッドを1段階だけ実行するような処理を作っておいて、
それを定期的に呼び出すようにする
こうしておくと、スクリプト的には、スレッドは勝手に動いてくれるように見えるので特に処理を気にすることはない。
この処理部分でいわゆる sleep() と、スレッド間の待ち合わせとかも実装できるので、かなり自由度があがる
個別のスクリプトからは完全独立するので、処理は全部Cで書いてエンジン側にうめておくこともできる。
squirrel での実装例としては以下のようなものがある。
・sqrat に sleep 機能を含むスレッド実行集約の例がある。これは登録自体は手動
・
ttp://ruriko.denpa.org/201011a.html#0401 が thread実行機構をエンジン内に持つように実装してる。
関数を渡して Thread クラスのインスタンスを生成するだけであとは勝手に動く
>>668 詳しい解説ありがとう。
2つに分けて質問してくれてるが、これはほぼ同じ概念を2つの段階で説明してるようなものだな。
ようするにネイティブスレッドがOS側で管理されるように、
コルーチンの実行制御を専用のサブシステムに委託することで
マイクロスレッド的な運用により近づけるということだよね。
うーん。元々各種サブシステムの更新制御をタスクシステム化してるので、
どうやって組み合わせるべきか悩みどころだなぁ。
毎フレーム subsytem.update()が呼び出される仕組み。
タスクは単なるリストではなくて固定の整数値を登録時に運用側が制限する形なので
こういった暗黙的な運用とはやや相性が悪い。
とはいえ、少し改良すればマージして両方扱えるようにすることも可能なような気がしてきたよ。
どうもありがとう。
運用側が制限 → 運用側が宣言
>>689 最終的にやることは同じなんだけど、処理部を個々の「タスク」に分配するか、一つグローバルにもつか、の差で分けたつもり。一応。
ある案件で、既存の「タスクシステム」に squirrel をつっこんだときは、
グローバルスタイルの squirrelスレッド処理一式を、そのシステムでの
一つの「タスク」としてくみ入れる形で既存の他のタスクとの整合をとった。
個別のタスクと関連した部品部から呼び出すスクリプト群は暗黙に動作することになるけど、
概念的には、「実行中のスクリプトの :suspend() までが、今のフレームで動作する」
となるので、特に他と混乱を起こすことはなかった。
タスクの処理順番を念頭においておく必要があるくらいかな。中途ではさむと混乱するから、
squirrel タスクの実行は先頭、または、最後尾にしておいて、スクリプトはそのタイミングで
動作する、ってのを周知しておく必要はある。
>>687 関数でも、オブジェクトでも、コルーチンでも、
変数に入れて管理すれば、全部同じことなのになぁ。
そもそも、
関数はクラスに入れる、関数は変数には入れない
というOOPがキチガイじみている。
コルーチンってゲームループ書くのも楽だね どんどんLuaでやることが増えてもうC++でやることが 描画と衝突判定とファイル解凍ぐらいなんだけどそんなもん?
>>693 そんなもんじゃね?(描画と衝突判定とファイル解凍だけになるかはゲームによりけりだと思うが)
速度的にクリティカルな部分やOSとの細かいやり取りは低水準言語で、
楽に書けて実行できる部分はスクリプトでなんていうのは
ゲーム以外でも見かけるよ
>>694 そもそもLL系の言語とそのライブラリがそんな感じじゃねーかw
696 :
デフォルトの名無しさん :2010/12/27(月) 04:03:40
自分の開発したC++のプログラムに、プラグイン機能を取り入れる予定でいます。 プラグインはpluginディレクトリにLuaファイルを置いてもらうような形式で、 それで、読み込んだLuaコードに制約を持たせたいと思っています。 指定したファイル以外はファイルアクセス禁止にさせたいんです。できますでしょうか? 例えば、Luaのファイルアクセス系関数を全部無効にして、C++側で用意した独自ファイル操作関数を経由する形はできますか?
697 :
696 :2010/12/27(月) 04:07:51
あとLuaよくわかってないんですが、 他言語でいうeval()やsystem()なんていう関数も無効にしたいです。。。
簡単に出来るよ
699 :
696 :2010/12/27(月) 05:20:49
どんな感じにやるんでしょうか?
nilを代入するだけだよ print関数を例にすると lua_State *L=luaL_newstate(L); //luaL_dostring(L,"print('hello')"); //ng luaL_openlibs(L); luaL_dostring(L,"print('hello')"); //ok luaL_dostring(L,"print=nil"); //luaL_dostring(L,"print('hello')"); //ng lua_close(L);
そんな遠回りな。 lua でも squirrel でもそういった機能はコア機能ではなくライブラリなので、 それらの関数を登録しているところを探して改造したりつぶしたりするだけだろうて。
702 :
699 :2010/12/27(月) 23:59:04
>>701 Luaソースに手を加えるって事が言いたいのかな?
それやると保守性・拡張性が下がるよ。
別にコア機能じゃあるまいし、登録してる部分をコメントアウトするぐらいで保守性さがるってこたーなかろう。 #ifdef にしとけば svn でのマージもまず失敗しないよ。 わざわざ起動時に無駄な登録処理+削除処理がはさまるほうがいやだってほうが多数派だと思う。ここだと。
よく分かってない人向けなら
>>700 の方が簡単そうだな
705 :
699 :2010/12/28(火) 01:54:02
>>703 コア機能ではなくとも標準ライブラリなんだからそのまま使おうよ
printf関数を潰すのにstdio.hに手を加えたり
oreorestdio.hを用意する人はいないでしょ?
潰したい機能が明確で後々変更することも無いならそれでもいいけど
そうでない場合は、ちょっとした修正のたびにリビルド必須になるよ?
plugin以外の目的でスクリプトを利用したくなったりしたらどうするの?
グローバルなフラグを用意するの?排他も必要になるよ?
pluginという利用特性上
初期化済みのVMをpoolしておけるので
ローディング時のコストなんて気にするものじゃないでしょ
スクリプト言語の利点を生かそうぜ
や、lua が組み込み言語でなければ俺もそう思うんだけど・・・ まるごとメモリ上で無駄になるライブラリって気にならない? >例えば、Luaのファイルアクセス系関数を全部無効にして、C++側で用意した独自ファイル操作関数を経由する形はできますか? こういう標準ライブラリ使いたくないんだけど的要望に対してはもっとも適切な回答だと思います。はい。
>>706 ならないな。
生産性とかパレートの法則って聞いた事ない?
そういったネガティブな理由による削る作業は最終手段だよ。
てか、運用前の段階で標準ライブラリを削るほどカツカツな状況を想定するなら
色々規制しなければ信用ならんようなプラグイン作者に間口を用意する事すらしないよね?
まぁメモリが2MBしかない環境とかだったら削りたくなるかもだがな
まあ、考え方の違いだねってことで。 俺はこの手の言語の「標準ライブラリ」はサンプルでしかないと思ってるので以下略。
まあ、実際ソース見て判断してちょ。 あ、一応。ファイル系のライブラリ(io/file)は、もともと実装側で切り離し可能にはなってる。 system とか相当は load, loadfile, loadstring あたりになるけど、これはベースライブラリの一部なので、 削るか口を起動後つぶすかが必要。
ファイルアクセスはダメ evalもダメ systemもダメ もちろんpackageもダメ その理由がプアな環境だとすると 反復もダメ テーブルもダメ stringもダメ となるが、Luaを選ぶ意味はあるのだろうか?
ゲームだと、圧縮&連結したアーカイブファイルから読み込んだりするから、 デフォルトのファイル操作関数が使えなかったりするな。
Luaはそもそもその辺りの組み換えを考慮しているような気がするが…
>>711 それらが必要に応じて取捨選択できるってことでしょ。
そうでないと組み込み用途とはいえ、こんなにライブラリが貧弱なスクリプト言語使おうと思わないよ
標準のライブラリやオプソのライブラリ組み込んで楽したいなら、組み込みも考慮されてるPythonなり使えばいい
でもLuaを選ぶということは制限された環境だったりあえて制限したいわけだよ
今時ガラケーでさえJava VMが制限されて乗ってんだぞ
>>715 701さん登場以降のやり取りは
カッツカツな環境という(質問主は一言も言っていないが)
条件付けがあってのものだよ
ゲームに限らないとは思うが、ゲームの組み込み環境だとfopen系列が使えない環境は多い
これに関してはインターフェイスを合わせられるならLua標準ライブラリの関数を上書きしていけると思う
合わせられないなら標準ライブラリを使わず自前関数を使ったり、そもそもスクリプトに直接ファイルアクセスを許さず
実装が管理して、それにアクセスさせたり、とかか。
>>713 の通り、自前でファイル読み込みを最適化するのがほとんどだろうし。
ただ、Luaがエラー処理に普通にfopen系を使ってたりするんでここらへん頭痛い。これどうにかならんかな。
あとsetjumpも環境によって駄目だったりする。これのほうが頭痛いかもしれん。
エラー時に割り込めるのがあったと思った
719 :
デフォルトの名無しさん :2010/12/30(木) 07:22:31
>>717 >fopen系列が使えない環境は多い
ANSI-Cにすら準拠していない環境なのにLuaを組み込むの?
"使えない環境"ではなく"使える立場にない"ってだけじゃない?
組込みの環境にはファイルシステムなんてない、ことも多い、 ということすら想像できないの? 馬鹿なの? 死ぬの?
>>720 ANSI-Cにすら準拠していない環境だがLuaを組み込んでいる
という実装実績例を出してもらえない?
自分の足りない頭ではペイすると思えないので妄想の域を出ないんだ
ゲームコンソールのゲームでLua使ってる例とかあるんだが、 そういう環境で普通にfopenとか使うのが普通とは思えないんだけど。 必死にANSIANSI言ってるけど、言語が標準準拠してるかどうかということと、 ライブラリが全機能フルに使えるかというのは普通分けて考えると思うんだけど。
おまえら自分の最初の主張を正しいと言い張るために 曖昧だった前提条件を各人の都合のいいように狭めて議論するのやめなさい
>>720 fopenが使えない=非ANSI準拠という前提自体が間違ってるわけだが
糞どうでもいい
>>722-723 あぁ、やっと理解できたわ。
696の質問内容を前提だと
プラグインによる拡張はOKよ、でも'標準'ライブラリに手を加え下手すりゃバイト単位で削る厳しい環境だよ
プラグインはpluginディレクトリにLuaファイルを置いてもらうような形式、でもfopenは使えないよ
で意味不明だが
前提条件も無く単発で
'標準'ライブラリに手を加え数KB、下手すりゃバイト単位で削る厳しい環境もあるよ
fopenが使えない環境もあるよ
という事なら普通に同意できるな
fopenが使えないゲーム機が多いと言うけど、PSP, PS3, xbox ではfopenをサポートしているぞ。 Wii, DSは知らんが、Wiiはサポートしてんじゃないの。
>>727 両方サポートしてるよ、ついでにGBAも。
初代PSの頃はないようだ。 一応stdio.hとかはついてるみたいだが。
・fopenが(標準ライブラリになく)使えない環境 ・fopenが(自社のアーカイブライブラリを通す必要があるため)使えない環境 ・fopenが(標準ライブラリにはあるけど大人の事情により)使えない環境 おいお前らどれ前提に話しとるんや
>>730 ゲームコンソールについてだから、
>・fopenが(標準ライブラリになく)使えない環境
についてだよ。
最近のコンソールは全部 ライブラリとしては存在するけどアプリ内部での使用には耐えない(ほぼデバッグ表示用専用) だな。
まず非同期ファイルロード機構からつくるよね
734 :
713 :2010/12/30(木) 19:54:40
>・fopenが(自社のアーカイブライブラリを通す必要があるため)使えない環境 俺が言ってるのはこれだな。 あと、スクリプトそのものの読み込みや#includeに相当するものでファイルを読み込む際にも、 ライブラリ側でfopen使ってたりするとちょっと困る。
735 :
デフォルトの名無しさん :2010/12/30(木) 21:00:20
無料RPG製作ツール「ロープレジェネレーター」
http://sekisekki.net/index.htm 直感的操作で簡単なゲームが作れます。 簡単に配布可能な状態に出力することができます。
(HSP製のソースコード付きで、スクリプトの知識があれば自由度の非常に高いカスタマイズ
ができます)
他にも仲間預かり機能(100人も)や、仲間の状態/状態異常を細かく設定できたり、
乗り物が作れたり、ゲーム中に画像を差し込んだり、回転やフラッシュなどのエフェクト
なんかも簡単に作れる様です。
移動は矢印キーの他に、キャラがマウスを追っかけたりするとのこと。
戦闘はデフォだとドラクエ系。
他にはオートアクションというのがあってオリジナルシステムの製作に役に立つかも
しれない機能です。これは、マップエディタで設定することで、「マップに入った時・
出た時・一歩歩いた時・戦闘開始前」に自動的に実行されるアクションを設定できる
機能です。
■他にもいろいろ進化中。要望は掲示板へどうぞ。
どんなゲームが作れるかはこれを見れくれ。HSPのカスタマイズはしてないとの事。
「眠られぬ獅子〜序章〜」
http://www.freem.ne.jp/game/win/g02773.html
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ Lua!! 彡、 |∪| / / __ ヽノ / (___)
あるぇ、DSってfopen使えたっけ。PSPとかは使えるの知ってるけど
>>696 を見るに
・fopenが(自社のアーカイブライブラリを通す必要があるため)使えない環境
を作りたいからfopenを禁止したいのではないか。理由は
> ライブラリとしては存在するけどアプリ内部での使用には耐えない(ほぼデバッグ表示用専用)
かな?
まぁ上で言われてるLuaのファイルアクセス関連上書きするとかに行き着くけど。
Lua内部で使ってるのは、書き換えるか、お勧めしないが上書きするかとかか・・・できたかうろ覚えだが
しかしこの板ID出ないからめんどくせぇw
そもそもLuaって分離できないようなところでfopen使ってたっけ? grepしてみたけど標準ライブラリとluaL_loadfileくらいでしか使ってなくね?
やっぱり、
>>700 の方法がスマートという事でファイナルアンサー。
740 :
737 :2010/12/31(金) 23:37:06
>>738 おお、なら大丈夫そうかな。間違ったか古い知識ですまない
潰すのではなく差し替える例はこんな感じ --begincode.lua local _loadfile = loadfile local permreadlist = {"1.lua","3.lua"} local canread = function(fname) for i=1,#permreadlist do if permreadlist[i]==fname then return true end end return false end function loadfile(fname) if canread(fname)==true then return _loadfile(fname) else return nil,"No such file or directory" end end 仕様が固まり最終的にはホスト側に落とし込むものだとしても 開発効率は上がるんじゃないかな packageとか便利だし
仮にもLLなんだしソースレベルで潰すのもいいけど アドホックに言語の機能、上書き差し替えでもいいね
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
あけおめ!
サンドボックス化すれ。
サンドボックス、略してサンボッ
AngelScriptでアプリケーション側からインタフェースをRegisterInterfaceで登録して、 スクリプトでそれを実装したクラスを書いたんだけど、 どうやればこれをC++のクラスと同じように使える?
748 :
747 :2011/01/08(土) 00:04:24
AngelScriptのクラスをあたかもC++クラスのように使うのは難しそうだ プロパティを取得するのは簡単にできるみたいだけど。 コンテキストを作成して、オブジェクトとメソッドIDを指定して実行するのは出来るけどあまり賢い方法とは思えない。 GetMethodIdByDeclでメソッドID取得するとオーバーヘッドも心配 何かもっといい方法ない?
749 :
747 :2011/01/08(土) 00:21:11
タイトル画面とか、オプション画面とか各ステートをスクリプトのクラスでやろうとしたんだけど AngelScriptでクラスのメソッド呼ぶのは結構難しそうなので諦めた クラスをスクリプトで記述する代わりに、 XMLに呼び出す関数名とスクリプトのコードそのものを入れる、という方法をフォーラムで見つけた これでやってみるか
>>747 メソッドIDはスクリプト読み込んでコンパイルした直後にでも取得して保存してても大丈夫のはず。
あと、1つのスクリプトファイルを1つのクラスと見て、そのスクリプトの関数を呼び出すメソッドを持つC++のクラスを用意する方法はダメかな?
751 :
デフォルトの名無しさん :2011/01/08(土) 02:02:05
パイコック
って、インタプリタなのかー
755 :
747 :2011/01/08(土) 23:27:42
>>750 メソッドIDはインタフェースのが使えるみたい
ただ、その場合は実行時に線形探索で実装されたメソッドを探すみたいだが。
速度はとりあえず度外視でいいか・・・。
コンテキストはオブジェクトごとに作ることにしよう
Luaもインタプリタだろうが
lua はコンパイラだべ。動的言語ではあるけど。
Pythonもコンパイラと言い出しそうだなおい
仮想コードにコンパイルして逐一実行しようががコンパイラはコンパイラ お前の定義だとJavaやC#もインタプリタになるだろうが
構文解析の結果のASTをそのまま実行するのがインタプリタなの? じゃあASTを少し実行しやすい形に変換してから実行するのはどっち? どこまで変換したらインタプリタからコンパイラになるの?w 無意味な議論ですよ
lua はバイトコードをファイル出力してそれを読み込んで実行できるからわりがっつりコンパイラじゃね? コンパイラ部切り離してつかえるし
luaとかJavaはコンパイラとインタプリタの併用だよな?
というか、中間言語でなく 純コンパイル言語なスクリプト言語って、 それこそDS位のチープな環境じゃないと役に立たないんじゃね?
>>764 JavaScriptの実装はJIT可が流行りだし、luaも欲しいぞ。
luaJITはあるだろ?
>>755 呼び出し毎にPrepareメソッドとSetObjectメソッドを使って設定を行えば、一応asIScriptContext1個を使いまわせるよ。
ただ、Suspendでスクリプトの一時停止ができないとか、制限もあるけど。
>>767 > AngelScriptのバイトコードを出力するmakeのようなツールらしいが
AngelScriptのバイトコードを出力するasc(仮)をさっくり書いて
makeを使えばよくね?
>>765 動作環境的にJavaScriptよりLua動かすような場面のほうがロースペックだろうに、
開発者リソースかけられるJavaScriptの方が進んでるよな
V8(Google) vs SquirrelFish Extreme(Apple Safari/Webkit) vs SpiderMonkey,TraceMonkey,JagerMonkey(Mozilla Foundation)
こいつらはそれぞれのWebブラウザの高速化のためにお互いパクりあってしのぎを削ってるからな
ゲーム業界もお互いしのぎ削れや
Javascript は富豪プログラミングすぎるのじゃよ……
JavaScriptとLuaはセマンティック的にはかなりにてると思うが、どこが富豪的なんだろうか?
組み込みにはV8もjsで書かせられる点で面白そうだね それでもluajitが互角以上の速度ってのが、なんというかブレねえど
>>770 しのぎを削るためにはLuaの実装が複数ないとダメなような気がする。
JavaScriptで複数の実装が出始めたのもJavaScript自体が本格的に使われ始めてからだろうから、
まずはLua自体の普及からってことかもしれない。
それとも現状のLuaの実装で満足してるのかな。
>>772 ああ、すまんすまん。既存の実装が富豪。
>>774 敵を増やさないとダメだというのも
まずは味方を増やすことからだと言うのも
自分では満足なのか不満なのか判断できないやつが悪あがきしてるだけに見える
Javascript はセマンティックこそ簡単に見えるけど歴史的経緯含めて複雑な仕様がいろいろあって全部実装すると必然的に富豪的になる罠
> セマンティック 誤用して無い? 理解できん
うむ。シンタックスだな
セマンティック誤用じゃないだろ。意味は十分通じる。 その上で主張に肯くかは別だが。
>>769 AngelScriptの場合、asIScriptModuleにあるSaveByteCodeとLoadByteCode使って、コンパイル済みのバイナリを入出力するのがいいかも。
AngelScriptで使えるバインダってあります? 今はバインダなしで地道にやってるけど バインダなしのJS系並に冗長だわ それでいて独特だわ、一々面倒だわでいい加減辛くなってきた・・・
AngelScript って実装自体にC++のバインド機構があるのでは
>>783 そのバインダの出来が
>バインダなしのJS系並に冗長だわ
>それでいて独特だわ、一々面倒だわでいい加減辛くなってきた・・・
なのであります
それはご愁傷様としか…… なにがめんどいのかしらないけど、ラッパ関数の類の準備がめんどいとかなら、テンプレートでちょちょいと書いてしまうとか。 なれればわりと簡単よ。
難易度的には易しくともそれなりの手間は掛かるし SwigやBoostなど標準的なものが既にあるなら そっちを使った方がいいよね って事で劣化車輪を作る前に質問した次第です
複数の言語を連携させるんだから複数の車輪を作ってしまう確率は高いよな Cは最低限の機能しかないから重複しないが 機能が多いC++では逆に難しくなる
正直Lua以外は糞
正直Luaのような旧式でめんどくさい言語は使う気にならん。
旧式ってなにがだろう
つかLuaそのものでアプリケーション書くとかしなければよいとおもうんだけど。 対象分野のフレームワークで頻出パターン部分にDSLとしてLuaを使うのが俺のおすすめ。
ゲームのメインループの部分をほとんどスクリプトで書いて、必要最低限のグルー関数と描画処理とかをC++で書く、 ってやり方ならLuaは向いてると思う。 ただ、C++側と頻繁にやり取りしたり、ゲームのオブジェクトの動きをスクリプトで記述したい場合はLuaはあんまり向いてないような…
>>792 前後で矛盾してないか?
どちらにしても、そういうのはLuaの得意分野だよ
>>793 後者はメインループがC++で、敵の動きだけLuaって感じね。
個人的にはC++とLuaでLuaの比率が高いほど楽ってイメージ持ってる。
>>794 ちょっとイメージ掴めない
敵の座標やらモデルやらの各種パラメーターはC++側に保持するけど
動きはLuaでやるって事?
>敵の座標やらモデルやらの各種パラメーターはC++側に保持するけど >動きはLuaでやるって事? まさにそんな感じ。 スクリプト側では、「速度を設定」とか「〜フレーム待機」とか、そういう関数を呼び出すだけにする。
最終的にはハードコーディングする予定のプロトタイピング部分なのかな 特に問題があるようには思えないけど・・・
Perlの代わりにちょっとしたツールとしてLua使おうかと思うんだけど 文字列処理はC++のRegexで済ませられるが、ネット周りの手間の かからないライブラリなんかない?
C++のRegex、ってboostの?
>>798 ネット周りとか抽象的過ぎて答えようが無い
てか、Perl使えばいいんじゃないの?
Perlだってちょっとしたツールじゃないか
>>799 自分はboostの使ってるが、最近だとVC2010にもあるね。
>>800 httpやftpが簡略化されてるのがあるといいんだけど。
curlでもwgetでも呼び出せばいいんじゃないかと
スペック関係ない、ちょっとしたツールならPythonやPerlを使えばいい気がするが、 ネット関係なら何かLuaForgeあたりにあった気がする
> httpやftpが簡略化 ごめん、意味がわかんない
>>804 オレは798,801が言いたいことがよくわかるぞ。
C/C++でゼロから実装するのが面倒な部分を
スクリプトでどうこうしたいってことだよな。
なにか積極的な理由がない限りは、Luaはおすすめしないな。
大雑把に、C/C++にスクリプト言語を組み合わせて
楽をしたいってだけならPythonがおすすめ。
最近はPython+Qtで全体を作って、必要な部分だけC/C++で
実装するのが最強じゃないかと思いつつあり。
>>797 問題はないんだけど、アプリ作る際にどこまでC++でやってどこまでスクリプトに処理させるか?の違いかな。
Luaの場合、スクリプトの比率が多い方が楽なイメージがある。
>>805 ごめん、やっぱり意味わかんない
httpやftpはプロトコルだよ?
そのプロトコルを利用したなんちゃらな処理を簡略化したいとか
Perlで言うなんちゃら相当なものが欲しい
という事なら分かるけど
プロトコルを簡略化したいと言われても
答えようがないと思うのだが。
>プロトコルを利用したなんちゃらな処理を簡略化したい ライブラリって言ってるんだからそのなんちゃらが色々詰まってるのが無いかって話だろう
色々詰まっていて簡略化か 禅問答だな
日常会話を除けば、禅問答か美辞麗句しか言えないのが普通だと思う どちらかというと禅問答の方がましだ
>>807 798が文字列処理をRegexで済ませられると言ってるんだから、
ネット周り、特にhttp/ftpの問題を解決するのに何を必要としてるかなんて
いちいち確認しなくったってわかると思うんだが。
そんなに察しが悪いのか?
プロトコルを実装したいんじゃなくて、
それを道具として何かやりたいことがあるってことだろ。
そんな事言い出したらRegexは正規表現の実装の一つであって
「文字列処理」ライブラリじゃない。
ひょっとすると、スクリプト言語でのプログラミングを
日常的にやってないと分からないものなのかもね。
>>811 > プロトコルを実装したいんじゃなくて、
> それを道具として何かやりたいことがあるってことだろ。
そのプロトコルを利用したなんちゃらな処理を〜
って言ってるでしょ
大丈夫?
>>801 のは要するにhttpやftpを簡単に扱うための(面倒なおまじないなどが必要でない)ライブラリってことでしょうに
日本語として引っかかることは否定しないけどわざわざ分からない振りをして曲解するようなことでもないだろう
わからないフリじゃなくて本当に分からない病気の奴なんじゃね?
>>813 だから
サーバー、ブラウザ、ダウンローダー、メーラー、その他もろもろ
HTTPプロトコルを利用したものは色々あるでしょ?
それを聞いてるの。
それら全ての機能を備えて、なおかつ簡略化されたという物があるんですか?
とりあえず定番は libcurl かね。 C++ にラッピングした cURLpp ってのもある。
だれもサーバとかブラウザとかは言ってないよな。そんなレベルの話じゃないことぐらいわかるだろうて
HTTPなんてOS(Windowsなど)によってはふつーにopenすればふつーにreadできるが
>>818 いかにもC言語屋な考え方だなぁ。
煽るつもりはないんだが、どうしてもそう思ってしまったので。
スクリプト屋なら、1行で指定したURLのファイルを拾ってくるコード書けないかな、とか考えるよ。
やってる事は大差ないのにね 馬鹿だよね
スクリプト屋(笑)
∧_∧ / ̄ ̄ ̄ ̄ ( ・∀・) < Lua!! ⊂/ 9) \____ q( / > >
node.lua
じゃ処理の実例として、特定のサイトのリンクから得ろ画像を効率よくかき集められそうなのをお願い。 DLする為にはパス入力が必要な場合もあるという条件で。
一体何が始まるんです?
スレタイ読めずスクリプト屋さんが迷い込んで涙目 という状況がちらほら見えるので スクリプト言語総合とか適当な隔離スレを経てて そっちへ追いやればおしまい
LLバトロワスレにでも誘導しときゃいいだろ
スタック方式が嫌って、PCの仕組みを知って る普通のエンジニアならありえないだろ・・・
ひとまずここで書かねばなるまい。 「アセンブラを知らない子供たち」と!
831 :
801 :2011/01/17(月) 19:45:45
>>816 こういうのを探してました。ありがとうございます。
>>829 だって面倒くさいじゃん。
直感的じゃないし。
そんなんじゃListやTreeも理解できないねえ。 単純なFIFOやFILOもわかるまい。
ラッパ書くなりバインダ使うなりして 抽象レベルを上げてやれば済む話だろ 何回ループしてるんだよ
スレ読んだりできないからな。 代わりにFIFOが理解できます。
>>831 このスレのいいところは話そらす人がいる一方で適切な回答くれる人がいるところだよなw
言いたいことは分かるぞ
>>824 も煽りで言ってるんじゃなくてクッキーの処理のようなhttpクライアントの機能をいちいち再実装する奴はバカだろってことだろ
それこそlibcurlでいいわな
>>839 言語処理系よりどり見取りな.NET Framework上で、なぜにLuaにこだわる?
IronPythonが最右翼に上がるし、NemerleやらF#やら、
もっと面白い言語が色いろあるでしょ。
CのLuaとは処理系自体が違うんだから、Luaの高速性とかは関係ないんだよ。
文法が同じなだけ。
>ただのラッパーじゃなくて、.NET FrameworkやMono上でまともにネイティブで動くようなのがあるとうれしい。 CLRか?ネイティブか? 勉強して出直して来い
IronPytyhonのようにDLRじゃなくて、Booのように.NET Runtimeでそのまま動くという意味と推測
事前にコンパイルするならC#で書くのと比べてメリット無いし 動的にコンパイルするならDLRと同じだし
大部分をCで書いて、C++/CLIを少しだけ書くといい
C書くならC++/CLI使う意味ねーよ 普通のネイティブコードのdllにして.NETから呼び出したほうが遥かに扱いやすい
マーシャルってP/Invokeでいい? 苦労してC++/CLIで書いて得な事ある
>C++/CLI 正直言って、各種形式をSystem.IO.Streamで 読み込めるようにする時にくらいしか使わないな。 プログラムはほとんどC#で書くことになる。 ただしゲームごとに違う部分は別の言語にする。 何を選ぶかはプログラマによって変わってくると思うけど。
たしか、dllは関数しか見えないんじゃないか 構造体とかマクロが見える方が得だ
C++/CLIでCの関数をラップしたからって それをC#から使おうと思ったら構造体やマクロもラップして公開しなきゃいけないからそんなに楽にはならん C++/CLIはネイティブC++のクラスをラップするときには役に立つけど、C向けライブラリのラップには必要ない
>>841 libluaのラッパーじゃなくて、ilasmになってるLuaCLRの実装ってことでは。
だからそんなもん何の意味があるんだよ
そのまま移植したいか、 デザイナーに、そのまま同じ構文使わせたいんじゃないの
JVMやCLRみたいな大規模なVM系で、起動時に動的な言語呼び出して使うと物凄く遅くなるイメージがあるな
大規模系……汎用のAPIをそのまま全部公開する。面倒くさい。 組み込み系……汎用のAPIではなく特定のアプリケーションの機能だけ公開する。
855 :
839 :2011/01/20(木) 12:19:24
>>840 Luaそのものや、速度、実装方法などは、特にこだわっては無いです。
Luaが.NETで使えるのかどうかを調べてただけです。
具体的には、CodeDomProviderで実行できるものを探してた。
>>841 突っ込みありがとう。眠たかったせいか、すっかり言葉を間違えて使ってた。
言いたかったのは、「マネージド」です。(まったく逆だなw
まあ、なんていうか、.NETでLua使うぐらいなら、C#で書けよって話なのかな。
>>855 .NET Frameworkの場合、C#自体の生産性が高すぎて、
あまり積極的なスクリプティングを活用するメリットがないんだよね。
だから、ビルド後のプログラムを外側からカスタマイズ、
運用するスクリプティングという用途に限ったほうがいいと思うよ。
積極的なスクリプティングって、疎結合なモジュールっていうのと矛盾してるよな
858 :
839 :2011/01/20(木) 18:13:40
>>856 うんうん、その用途です。
自分はAPIを公開して、スクリプトで使ってもらう側です。
スクリプトを作るのは、利用者側なので、
「簡単に対応できそうなら、いくつか言語を使えるようにしたほうが親切だろう」
・・・ってところです。
C#やVB.NET、Ruby、Pythonあたりは知らないけど、
Luaなら組めるっていう人がどれだけいるかにもよりますが・・・。
>>858 C#、VB.NET、Ruby、Pythonよりも、
Luaのプログラミング人口のほうがずっと少ないよ。
>>858 だったら普通にマネージAPI公開するだけでいいじゃん
それを何の言語から使うかは利用者の勝手
861 :
839 :2011/01/20(木) 20:39:07
>>859 ですよねぇ。
ゲーム関連でLuaが使われることが多いと聞いて、「対応できたらいいな」と思ったんですけどね。
>>860 いや、えーと、スクリプトの実行タイミングはアプリケーションがキックするものを想定してます。
「アプリケーション内で動くスクリプト」って言えばわかってもらえるのかな。
「それを何の言語から使うかは、利用者の勝手」なんだけど、
アプリケーション側が対応してないと使えないでしょ。
MayaやBlender上でPythonを動かすのと一緒。
もっと身近だと、テキストエディタのマクロ機能みたいな。
>>861 具体的なスクリプトではなく
抽象クラスのオブジェクトをキックするものを想定すれば
アプリケーション側がいちいち派生クラスに対応してなくても使える。
Formを継承するのと一緒。
それならプラグインとして.NETのdllを読み込んで実行するようにしたいところ
C#やVBで書くならプラグインを直接実装すればいいし、
IronPythonをホストするプラグインを用意すればPythonも使える
自分でそのプラグインを用意するかは別にして、アプリケーションからスクリプトは直接意識したくないな
>>862 と被ったけど
>>862 む?なんか勘違いされてそう。
>>863 うん、863さんのほうがわかってもらえてる。
複数言語対応するなら、プラグイン実装が確かに理想ですね。
まあ、そこまで分離する必要があるかは、ちょっと考えないとだけど。
>>864 勘違いではない
まず、メソッドのオーバーライドを理解しろ
そのメソッドはC#で実装しても良いし、C++/CLIでも良いし、
メソッドの中でスクリプトを呼び出しても良い
>>865 いや、えーと、やっぱり根本を勘違いされてると思う。
そもそも作り方の話をしてるんじゃないって事です。
きっと「C#での実装方法は詳しく知らないけど、C++/CLIを深く理解している」
という知識で、答えてくれてるんだと思う。(感謝
まあ、ちょっと質問の仕方がまずかったね・・・。勘違いさせてごめん。
あと、たぶん、
>>862 で言ってる「抽象クラス」ってCodeDomProviderそのものじゃないかな。
http://msdn.microsoft.com/ja-jp/library/system.codedom.compiler.codedomprovider.aspx System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.CodeDom.Compiler.CodeDomProvider
Microsoft.CSharp.CSharpCodeProvider ← C#
Microsoft.JScript.JScriptCodeProvider ← JScript
Microsoft.VisualBasic.VBCodeProvider ← VB.NET
CodeDomProviderを実装したクラスがあれば、いくつ言語があろうと、
CodeDomProviderクラスで同じように扱える。
だから「Lua用のCodeDomProviderクラスを実装したライブラリが存在して、
それがまともに使えるか」の情報を求めてた。
実際に使ったことのある人の意見を聞いてみたかった。
そんな感じです。
そして、今調べて知ったけど、DLRだとapp.configファイルを定義すれば、
ScriptRuntimeクラスだけでいけるんだな・・・。
CodeDOMは開発者ツール作ったりするための仕組みで、スクリプトとしては非常に使いづらい 構造上必ずメモリリークするので、気軽にeval的に使えないのが終わってる いちいちAppDomainを分離する必要がある
.NETだと、プラグインの動作モデルを定義したインターフェイスだけ公開しておけば、 プラグイン自体は何で実装してても 実行時に必要なモジュールを自動的に解決してくれるよ。 つまり、プラグイン的な動作をさせるときにCodeDomを自分で扱う必要はない。 もちろん、言語処理系で必要なモジュールが別にあるなら、検索できる位置に置いておく必要はあるが。
CodeDomはいらない子だったのか・・・
標準ライブラリのシリアライザとかで使われる動的コード生成も 昔はCodeDOMでC#のコードを生成してコンパイルしてたけど 問題が多いので後のバージョンで新しく追加されたものは軒並みDLRと同じようにLCGでILを吐くようになってる
Luaで定数を扱うときに省メモリな方法って どうすればいい? できればCと共有したい
>>872 定数の配列を返すC関数を用意すればいいんじゃね?
sqratでC++の特定インスタンスのメンバ関数をsquirrelのテーブルにバインドするにはどうすればいいんですか? MYCLASS myinstance; int (MYCLASS::*pMyFunc)(void) = &MYCLASS::MyFunc; RootTable().Bind(_SC("MyTable"),Table() .Func(_SC("MyFunc"),&(myinstance.*pBeginScene)()) ); これだと文法エラー、&とるとVC++2010が落ちます。
877 :
876 :2011/01/31(月) 12:55:50
間違えました。試したのはこうです。 .Func(_SC("MyFunc"),&(myinstance.*pMyFunc))
879 :
876 :2011/01/31(月) 14:11:23
つまんないことですが、
>>876 の&とるとってのは2つめの&です。
>>878 ありがとうございます。
ただ、インスタンス自体はバインドしたくないんです(squirrel側に触られたくない)
メンバ関数だけテーブルにバインドする方法はないですか?
C++ の原理を知ってたら、メンバ関数だけを登録ってのは原理的に出来ないってのはわかりそうなもんだが…… 目的とすることは、まあ、以下の手順でできると思われ。 1. とりあえずインスタンスとしてバインドしてそれをスタックにつむ 2. sq_pushstring(v, "メソッド名"); sq_get(v, -2); // 目的のメソッドを取得してスタックにのせる 3. 格納先のテーブルをスタックにつむ 4. sq_pushstring(v, "登録名"); // テーブルに格納する名前 5. sq_push(v, -4); // インスタンスを再度スタックにつむ 6. sq_bindnenv(v, -3); // メソッドにインスタンスをバインドしたものを積む 7. sq_createslot(v, -3, SQFalse): // バインドされたメソッドをテーブルに格納 8. sq_pop(v, 3); // テーブル., メソッド, インスタンスを解放 これで table["登録名"] = instance.メソッド名.bindenv(instance); と同じ意味になる squirrel のメソッドは標準状態ではインスタンスへのバインドをもってないから、 テーブルとかにいれてコンテキストを維持したままとりまわしたい場合は bindenv 処理が必要なのに注意。 sqrat にあわせるなら、バインド済みメソッドを取得するよーな処理をインスタンスのメンバとして 書き足せばいいやろね。それは自分でなんとかがんばれ。
881 :
876 :2011/02/01(火) 00:57:43
>>880 ありがとうございます。
理解するのに時間かかりましたが、確かにそれならできそうですね。
けど、sqratに標準で用意されてないってことは普通はやらないってことなんでしょうか?
C++側に大量のグローバル関数用意したりするものなんですかね?
いまいち標準的な構成が分かりません。
普通はクラス登録して、squirrel 側から生成して使うんじゃないかと…… 正直、メソッドだけ渡す理由がよくわからんです
普通は避けるね、設計が良くない。 やるならSingleton限定での実装だね。 どうしてもやるならラッパーだね。
アプリケーションがクラスになってるってのなら、そのシングルトンを取得する口を一つグローバルにつくるだけだよね。 squirrel に見せるコンストラクタでは例外出すようにしておけば勝手に new して使われることもないし、 アクセスされると困るメソッドはクラス定義時に登録しなければいいだけの話だし。
V8とかを組み込みスクリプトに使う話はここでOK?
Squirrelでインスタンスの配列の作り方を教えてください。
>>886 リストのインスタンスを作って入れたいクラスを初期化品がリストに入れていく。
これをクロージャ使って直交にしたら?
>リストのインスタンスを作って入れたいクラスを初期化品がリストに入れていく。 リストのインスタンスを作って、 作成したいクラスを初期化しながらそのリストに入れていく
>>886 数値配列の作り方と特に変わらないわけだが……・。もっと具体的になにが目的で何がわからないのか説明しないと回答は得られないと思われ
使い終わったコルーチンって、自動的にガベージコレクションしてくれるの?
はい
>>885 Okだと思うよ。
ものすごく詳しいV8erがいるかは保障できないけど…
893 :
876 :2011/02/03(木) 07:25:24
>>882-884 書き込んでいただいた情報を参考にさらに調べてみたら某所でクラスをバインドする時にアロケータに
NoConstructorを指定できるとあったので、
C++側のシングルトンクラスをNoConstructorでバインドして、次にシングルトンインスタンスをSetInstanceでバインドする、
という方法でまだよく動作確認してませんが希望通りのことができそうです。
BindInstanceはコンパイルエラーになったのでSetInstanceにしましたが違いがよくわかりませんが……
ありがとうございました。
894 :
876 :2011/02/03(木) 07:36:04
Squirrel側で動作確認してみたら、新しくインスタンス作ろうとしてもエラーにはならず、 既存のバインド済みのインスタンスを返すっぽい動作してるような気がします。 NoConstructorにしろこの動作にしろドキュメントじゃなくてソース読まないと載ってない機能が結構ある物なんですね。
895 :
886 :2011/02/03(木) 09:15:24
>>887-888 すみません、よく意味が分かりません。
>>889 local myinstancearray = array(3);
foreach (i, v in myinstancearray) {myinstancearray[i]=myclass();}
これをもっと綺麗にやりたいです。
>>895 それで基本的に合ってるしそれ以外ってのは特にないような……。俺ならただの for にするけど。
そういう記述が沢山書くのがいやなら、クラスとサイズを引数で渡してそれをする関数つくってたばねるくらいじゃね?
該当処理を C++ で書くも良し。
それこそ、こんなのでいいんじゃね? function gen_instances(n, gen) { local arr = array(n); foreach (i, v in arr) {arr[i]=gen();} return arr; } arr_inst = gen_instances(3, myclass); でもいいし、 arr_inst = gen_instances(3, function () {return myclass(123)}); でもいいだろう。(こっちはカリー化)
>>894 sqrat はあれは、各自が自分のアロケータを作るという設計。標準ではいってるのは参考用。
で、標準に入ってる NoConstructor ってアロケータは、中身みると「何もしてない」ものなので、新しいインスタンス自体は
作れてしまって、でも何もバインドされずに動作するような形になってる。基本おかしい。スタティックメソッドなら動くかな?
コンストラクタを適切に封印するなら、
template <class C>
class NOConstructor : public DefaultConstructor<C> {
public:
static SQRESULT New(HSQUIRRELVM v) {
return sq_throwerror(v, "can't create instance");
}
};
すまん、途中でかきこんでもーた。 こんなかんじに、デフォルトの代わりに New だけ封じたアロケータを作ってそれを指定してクラスを作るようにする。 DefaultConstructor → sqrat::DefaultAllocator とよみかえてね。うちは普通のコンストラクタもいじってるからそれの名前になってた……
あー、ごめんなさい、DefaultAllocator 継承すると、C++で参照を push したときにコピーされる。 Sqrat::NoConstructor を継承してください。 ポインタを渡してる場合は、アロケータの処理は使わずに sq_setinstanceup() してるだけなので、 シングルトンをC++側からポインタで設定する分には NoConstructor で問題ありませんでした。 ただ New 防止は一切機能してないのでそれだけ足す形で使うのが妥当です なお、BindInstance() はオブジェクトの protected 関数なので内部からよぶためのものです。外部から直接読んだらそりゃコンパイルエラーです。 SetInstance() はテーブル用の public 関数で、中身はBindInstance を非static指定で呼び出してるだけです。 テンプレートは基本、全部ソースを読んでからつかうものですよ。 sqrat は、そのままだと C++ 側からポインタ渡す場合のテンプレートに解放処理が一切入ってないので、 シングルトンならいいんですが、それ以外だとあっさりメモリリークします。 あと、インスタンスの型処理が全く行われてないとかいろいろ実装がおかしい部分があるので、 そのあたり全部直してからでないと使うの危険なのでご注意を。
901 :
894 :2011/02/03(木) 12:59:05
>>898 なるほど、すごくためになります。
インスタンスのユニークを保ちたいならCopyも消すべきってことでいいんでしょうか?
902 :
894 :2011/02/03(木) 13:08:39
>>900 失礼、
>>900 読んでませんでした。
おっしゃるとおりNoConstructorから継承することにします。
というかもう本体いじることにします。
BindInstance、確かにprotectedでした。よく見るべきでした。
ソースしっかり読むことにします。
(それにしても、Squirrelはバインダがどれも微妙な感じがして、入門には結構厳しい感じです)
とてもためになりました。ありがとうございました。
とりあえず sqrat は
ttp://ruriko.denpa.org/201011a.html#0401 でいじられてる程度の対応はしてから使った方がよいです。
特に型処理を全くしてないのはわりと致命的なので……
オブジェクトを引数にとってる場合、sqrat そのままだと、引数に別の型のオブジェクトを渡すと一発で死亡です。
適切に squirrel の APIを使って処理するようにすれば、NULL が来るのでオブジェクト違いの検知ができるようになります。
(そのままつかってるとぬるぽなことに代わりはないですが)
sqplus はごちゃごちゃすぎてさすがに触る気にならないですな
すみません、Luaでlua_closeを呼び出す際、全てのスレッドが終了している必要があるでしょうか? とりあえずハング等起きなさそうであることは確認したのですが。
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
AngelScriptのコルーチンのアドオンって、1回のExecuteScriptsの呼び出しで スレッドにつき、1個のコンテキストしか実行してないみたいだけど コルーチンって、スレッドみたいに複数同時に処理を行わせられる機能じゃないの? 1フレームに1回だけExecuteScriptsを呼び出せば、全部実行されると思ってた・・・orz
908 :
886 :2011/02/06(日) 22:27:49
>>907 スレッド
と
コルーチン=マイクロスレッド=ファイバ=協調型スレッド=擬似スレッド
は別物です
>>907 コルーチンは「任意のタイミングで任意の処理を途中まで実行させる事が出来る仕組み」だから、
呼び出しは自分でやらないとダメだよ。
Coroutine c;
c.SetFunction(〜);
…
c.Execute();//コルーチンを呼び出す
みたいな感じで、どっかで呼び出し処理をする必要がある。
ただ、そのおかげで複数の処理の同期が取りやすいって利点もあるよ。
911 :
904 :2011/02/07(月) 14:55:56
>>905 遅くなってスミマセン。回答ありがとうございました。
今月のInterfaceは、.NET Micro Frameworkの特集だな 実際、このスレ的にはどうなの?
へえ、 apache license になってたんだ > .NET Micro しらなんだ
すげーなMSと契約せずに組み込めるのか Javaなんかより遥かに使いやすいじゃん
mono組み込んでエンジン作ってた人涙目じゃねーかよ Microなのが気になるが実際使えるの?どうなん?
microでなくていい環境ならCLRやSilverlightをホストすればいいだろ 組み込みといってもハードへの組み込み用
こりゃmicroつかわなあかんで!
最近は日曜プログラマがiPhone/Andoroid以外の 組み込み機器でプログラミングするのか?
ハードじゃなくてアプリに組み込んでる例とかどっかに無いかな
>>920 それって、そのまんま流用出来ると思うけど・・・w
いや、これ、組み込み部はかかんとだめじゃん? 具体的にくみ入れてるサンプルあるのかなとおもって記事みると、エミュレータそのものコードもあるのか。 じゃあそれベースにしたらアプリへのくみ入れもわりとさっくりできたりするかな
エミュレータはC++/CLIで書かれてるみたいなので使えない(意味がない) Porting Kit入れて触ってみてるけどなかなかビルドが通らない…
がんばれ。Win32ベースでなんかシンプルにまとまったのを一つ組んで公開すればたぶんヒーローだ(一部で)
>>919 iPhoneはともかく、DIYで日曜プログラミングの組み込み開発はAndroidに持ってかれちゃったな
2年前くらいはいろいろあったのに
■LuaJIT 2.0.0-beta6 リリース 2/11 PPC/e500 に移植した (ただし、FPUが特殊なので他のPPCでは動かない) LuaJIT FFI ライブラリ(初版)の追加した ■LuaJIT ロードマップ 2011 しばらくは、Lua 5.2完全対応せず、Lua5.1ベースのまま 64bitFPと32bit整数 の両対応 VM (ARM向けの変更) ソフトFP対応してARM移植 LuaJIT 2.1では、メモリーアロケータとGCを統合する ■スケジュール Q1 2011 - 2.0.0-beta7 (b6の安定化) Q1-2 2011 - ARM移植 Q1-3 2011 - ベータもう少し Q3 2011 - リリース候補 Q3-4 2011 - リリース Q4 2011 - 2.1 作業開始
AngelScriptJITはまだか。 フォーラムではもう実験してたみたいだが…
luaに比べてインタプリタでもluajitも、1〜4倍の処理速度らしい。
>>929 その文章では、何と何を比較しての何倍なのかが分からん。
日本語でおk
>>930 LuaJITによる高速化は、単純にLuaのVMを(JIT関係なく)最適化した点と、
JITによる高速化とに分けられる。
たぶん
>>929 は前者のことを言いたいんじゃないかと。
JITだけじゃなくて、VM自体が違うのか。
>>931 ,932
なるほど。
オレも動的言語のVMのJIT化を実装したことあるから
そこのところよくわかる。
JIT化って基本的には既存のVMの内部APIを直接並べるようなコードを
生成するから、最終的には内部API自体の速度が問われるんだよね。
動的言語は変数同士の型の組み合わせが演算でマッチングさせるまで
分からないから、毎回動的分岐するこの部分邪魔だわー、とか思ったり。
LuaはPythonより速い?
>>933 演算を多重定義しないなら、動的型の分岐は一回で終わるし
分岐は仮想関数より速いんじゃないか
わかったじゃあるあやる
AngelScript更新。主にバグフィックスだそうな
(´\r-、 ┼ + /`/`) + ┼ (\. \! * // ,/) * + * (ヽ、 \ + * / /) + ⊂ニ ) * + ( ニ⊃ * + ⊂、 ( ∩___∩ ノ ⊃ + * (/(/ ヽ | ノ ヽ / 、)ヽ) ┼ + (/ ∨ ● ●レ /⌒) 、)ヽ) * (/' | ( _●_) ミ' /、)、)´ + + (/'ヽ 彡、 |∪| ノ / AngelScript!! + / __ヽノ / * + ┼ (___) / +
微修正 (´\r-、 ┼ + /`/`) + ┼ (\. \! * // ,/) * + * (ヽ、 \ + * / /) + ⊂ニ ) * + ( ニ⊃ * + ⊂、 ( ∩___∩ ノ ⊃ + * (/(/ ヽ | ノ ヽ / 、)ヽ) ┼ + (/ ∨ ● ●レ /⌒) 、)ヽ) * (/' | ( _●_) ミ' /、)、)´ + + (/'ヽ 彡、 |∪| ノ / AngelScript!! + / __ヽノ / * + ┼ (___) / +
見比べてるがどこが微調整されたのかまったくわからない
右肘がずれてるのが直ってる? のかな。
Luaすげー
947 :
デフォルトの名無しさん :2011/03/07(月) 11:30:28.77
前スレかこのスレか忘れましたがLuaを引退した初心者です Luaはスクリプト言語で一番早いと聞きました これは真実ですか? このメリットのためにまた勉強したいのですが真実ですか?
日本語読めないなら黙っていた方がいい
日本語読めないなら黙っていた方がいい(キリッ
953 :
デフォルトの名無しさん :2011/03/07(月) 16:02:18.77
Luaを勉強してたらいつの間にか同名ファイルに拡張子outのファイルが存在してました この拡張子outのファイルは何なんでしょうか?
>>953 lua 同名ファイル.out
を実行し
lua 同名ファイル.lua
と同様に動くなら
コンパイル済みのバイトコード
ホスト側の仕様やIDEやエディタの設定がそうなってるんじゃないかな
955 :
デフォルトの名無しさん :2011/03/08(火) 00:08:30.83
わかりました また復帰したいと思います お世話になります
PC用ならもうAngelScriptでいいや ちょこちょこバグがあるけど開発活発だ…し
squirrel 3.0 リリースされてました。 エロイ人pdfでもいいので入門書お願いします。
入門書を電子書籍で書いて売ってくれたら買うよ。
psp上で動作する物をLuaで開発したいんだが、参考になるサイトあったら教えて。 Wikiとか一通り見たけど資料が少ないので力貸してください
お前には無理
知らんなら知らんて言うてや
そりゃ「自分で調べたり考えたりする気は一切ありません。全部教えてください」なんて言われりゃ 誰だって知らないって言うわ
Lua勉強した時その通りに組んでもpsp上ぢゃ動作しないねん… そんで何で動かんか調べたんやけど全く分からんかった せやから聞いたのに駄目なのか?
駄目やでんがなまんがな
すまん、ならもっかいググってくる
普通、付属リファレンス読んで作業するだけでたいていの環境で動くものなので、 どうやったら動かなかったのか書かないとたぶん誰にもわからない。低レベルすぎて。
>>958 3.0系列には対応してないが、pdfで読めるSquirrelの言語入門書
みたいなのはあるよ
あと普通の本(紙で出来た本)も出るっぽいね
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
ちょっと前にLuaの勉強を再復帰した初心者です 何かLuaで何が出来るのか見えないため引退します
スクリプト言語は、TCP/IPがわかると俄然面白くなる オブジェクト指向やマルチスレッドに煩わされなくなるから
(;´Д`)?
[;´Д`]
一文一文もわからんし前後の繋がりもまったくわからん……
オブジェクトの通信や、スレッド間の通信が煩わしい。 わかると面白いと言ってるんだから、わからないなら仕方ないだろ。
日本語でたのむ
(;´Д`)?
顔文字は日本語に入りますか?
ぅあ?
理由も何もなくて直感だけで「これは日本語じゃない」って確信する感覚って 理解できないんだが どういう感覚なんだ?
この流れで「理由も何もなくて直感だけだ」って確信する感覚って 理解できないんだが どういう感覚なんだ?
>>981 直感だからといって批判するつもりはない。
むしろ批判するべきではない。
直感をうまく説明できなくても、日本語として問題があるとは思わない。
[;´Д`]
英訳すれば謎が解けるよ
uwscみたいにマウスカーソルを指定した座標に移動するっていうのはLuaは簡単にできるのでしょうか?
ホストプログラム次第じゃね
Squirrel 2.x と 3 の差異ってどういう感じでしょうか。
あまりないのなら
>>968 で照会されているの買ってみようかな。
990 :
987 :2011/03/28(月) 17:21:23.50
>>988 >>989 ちょっと初心者が手をだすには差が大きいような気がしました。
急ぎではないので Squirrel 3 の入門書を待ってみたいと思います。
ありがとうございました。
>>990 >>968 の著者のサイトに、2.xから3.0 RCまでの違いを
主に文法とか言語の機能についてまとめたっぽいページがあるよ、参考までに
だれか 次スレ たのむ
俺も無理だった。よかったら使ってくれ。(落ちた場合は専ブラの人よろしコ)
天ぷらの人も立てた人もgj
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。