【Lua】組み込み系言語総合 その2【Squirrel】 at TECH
[2ch|▼Menu]
[前50を表示]
150:デフォルトの名無しさん
09/08/20 08:49:22
修正点まだあるみたいだね

151:デフォルトの名無しさん
09/08/20 13:51:23
XtalってC++以外からは使いにくくない?
っていうか使えるんだろうか

152:デフォルトの名無しさん
09/08/20 14:17:00
>>151
バインド部分がテンプレートべったりなんだから、そのままではC++以外で使えるわけがない。

ぼやき。
Squirrelを.NET向けに移植しようかと考えたこともあったが、
この分野ではIronPythonが便利すぎてやる気が失せた。
起動が重過ぎる点を除けば処理速度以外は特に不満点はない。

Luaに関しては.NET判処理系のNuaがあるみたいね。

153:デフォルトの名無しさん
09/08/20 16:54:28
>>152
ですよねー
もうちょい汎用的なバインド方法が欲しいところだ

154:デフォルトの名無しさん
09/08/20 19:43:09
>>151
試してないけど
extern "C" {}
でC言語リンケージに変換してみるとか。

155:デフォルトの名無しさん
09/08/26 05:27:30
IronRubyも0.6まで着てたな。Ruby on Railsが動くまでになったらしい。
Rubyも楽に組み込めるといいんだけどね。例えば、スクレイピングの部分だけまかせるとかさ

156:デフォルトの名無しさん
09/09/07 08:56:09
IGDAで Xtal を扱う勉強会があるみたい。
URLリンク(www.igda.jp)


157:デフォルトの名無しさん
09/09/07 11:13:19
Xtalっておいしいの?

158:デフォルトの名無しさん
09/09/07 11:31:58
食わず嫌いはいけませんよ

159:デフォルトの名無しさん
09/09/07 11:45:23
4時間で6テーマか。
Xtalに特に興味があるなら別のイベントに期待って感じかな。

160:デフォルトの名無しさん
09/09/07 12:08:05
JITコンパイルでC並の速度で動く組み込み言語とかない?

161:デフォルトの名無しさん
09/09/07 12:19:50
AngelScriptがJITコンパイルできるようになったらしいが、やり方がわからない…

162:デフォルトの名無しさん
09/09/07 12:24:07
>>160
言語じゃないけど、NativeClient

163:デフォルトの名無しさん
09/09/08 00:34:11
昔は高速な組み込み言語はLispだったな。
JITコンパイルじゃないが。

164:デフォルトの名無しさん
09/09/08 12:15:39
>>160
URLリンク(www.compuphase.com)

165:デフォルトの名無しさん
09/09/08 23:51:16
>>164
これ良さそうだけど人気ないのかな

166:164
09/09/09 02:11:46
164 書いた後で発見
URLリンク(pawn.my-sv.net)

167:デフォルトの名無しさん
09/09/11 08:52:36
現状Pythonの組み込みで満足してるというのに、他の言語を検討する必要性をまったく感じない……。

168:デフォルトの名無しさん
09/09/11 11:08:55
>>167
帰れ

169:デフォルトの名無しさん
09/09/12 12:24:04
>>160
LuaJIT 速いらしいよ。
C ほどじゃないだろうけど、Python には大体勝ってるみたい。
URLリンク(shootout.alioth.debian.org)

170:デフォルトの名無しさん
09/09/12 14:17:34
Lua は JIT じゃなくても python より速いよ

171:デフォルトの名無しさん
09/09/12 14:30:54
IronPythonはLuaより倍ほど速いがな。(2.0.1)の場合。
2.6系ならさらに速くなってる。
ただし速いのは数値計算で、文字列計算などはPythonより遅かったりするが。

172:デフォルトの名無しさん
09/09/12 15:36:57
組み込み言語って
「Cで書いた (だから速い)」と喧伝しながらこっそりと組み込むものではないのか?

173:デフォルトの名無しさん
09/09/12 15:43:13
たぶn Luaやリス使っている人はゲームの組み込みが多いと思われるのですが、
Pythonを組み込みに使っている人は、どんなアプリに使ってますか?

174:デフォルトの名無しさん
09/09/12 17:14:54
>>171
マジで!? IronPython スゴイんだな。
数値計算に関してなら、以前に計測したとき Lua は Python より2〜5倍速かったんだけど。
数値計算については .NET すごいということなのかな?

175:デフォルトの名無しさん
09/09/12 19:32:49
LuaJITとかCに比べたら桁違いに遅いんじゃない?

176:デフォルトの名無しさん
09/09/12 19:37:08
というか、Cで各プログラムと速度面で執拗に比較するやつがいるが、意味が分からない。
C/C++にスクリプト言語の動作を追加するのは柔軟性を増やすことで
開発・運用を容易にするためであって速度のためではない。

スクリプト言語で実装した部分が重いなら改めてC/C++側に移植することを考えればいいだけのこと。

177:デフォルトの名無しさん
09/09/12 19:43:51
ユーザがプログラムを拡張するのに使えるだろ

178:デフォルトの名無しさん
09/09/12 19:55:55
組込み言語に今注目してる業界にゲーム業界があるが、
ユーザによる拡張をばりばり推進するぜ派(洋ゲー、リアルタイム物メイン)と、
そんなもん完全にアウトオブ眼中だぜ派(和ゲー、アドベンチャー系メイン)で、
まっぷたつですな。

179:デフォルトの名無しさん
09/09/12 20:10:01
社風の違いだからどうにもならない。
プログラマの部長級が開放的という幸運なケースであってさえ、
総務営業やら会社も巻き込むとやっぱり日本的感覚で
ゲームの内情を客に見せるのは御法度になるね。
プログラマ出身のワンマン社長のところしかありえないでしょう。



180:デフォルトの名無しさん
09/09/13 09:18:47
プラットフォームの違いもある。
洋ゲーと言えども、360やPS3でMODを許しているものは少ないだろう。

>>178の(和ゲー、アドベンチャー系メイン)ってPCのエロゲ・ギャルゲのことを
指してるんだろうけど、俺としては違和感があるなぁ。


181:デフォルトの名無しさん
09/09/15 23:34:31
URLリンク(www.amazon.co.jp)プログラミング言語Lua公式解説書-Roberto-Ierusalimschy/dp/4048677977/
この本持ってる人いる?
luaを始めて見ようと思ってamazonで検索して出てきて最新ぽいから買おうと思ってるんだけど

182:デフォルトの名無しさん
09/09/16 21:34:58
>>181
読んでみようと思って大きな本屋まで行ってきたが、
SQLiteの本とDirectXの本読んでたら満足しちゃってそのまま帰ってきてしまった。

183:デフォルトの名無しさん
09/09/17 05:14:33
>>181
リファレンスマニュアルの日本語訳も収録してるなら長く使えそうかも。
リファレンス読んでよくわからないところを本文で確認とかできそうだし。

URLリンク(sugarpot.sakura.ne.jp)
よくここにお世話になるんだけど、内容が古いのか、
本家の英語版にくらべると結構抜けがあるんだよね。

184:デフォルトの名無しさん
09/09/17 10:12:06
>>182
おいw

185:デフォルトの名無しさん
09/09/17 18:27:44
URLリンク(blog-imgs-26.fc2.com)
このSSで使用してるソフトご存知の方いたら教えていただけませんか

186:デフォルトの名無しさん
09/09/17 21:15:21
URLリンク(mystone.jp)
URLリンク(tibid.seesaa.net)

187:186
09/09/17 21:23:49
もしかしてエディタの方なら
URLリンク(www.vector.co.jp)

188:デフォルトの名無しさん
09/09/17 21:23:50
>>185
NoEditor

189:デフォルトの名無しさん
09/09/18 12:39:47
ご回答ありがとうごじあましたー

190:デフォルトの名無しさん
09/09/25 16:57:06
メインアプリ起動後に裏で常にLuaを複数同時に動かして
プラグインのようなことをさせたいのですが
何か参考になるサイトやソースコードはないでしょうか?

191:デフォルトの名無しさん
09/09/26 06:26:45
>>190
メインと切り離す必要が本当にあるならプロセス間通信。
メインの内部で別スレッドを作って回すだけでいいならマルチスレッド。

192:デフォルトの名無しさん
09/09/26 09:17:46
マルチスレッドだと今度はリソースのロックとかがめんどくさいから、
コルーチンで協調的マルチスレッドにするとかどうですか?

193:デフォルトの名無しさん
09/09/26 09:51:46
>>191-192
貴重な意見ありがとうございます
コルーチンで実装してみて上手く行かないようなら
マルチスレッドを試す方向で行こうと思います

194:デフォルトの名無しさん
09/09/26 14:57:40
オレの場合、最初はコルーチンで実装してたが早々にCPUリソースが足りなくなって
マルチスレッドに移行したがな。
ゲームで使用するリソースを開始前に一括してロードするような
FPS的な仕様にしないと単独スレッドの実装は難しい。

195:デフォルトの名無しさん
09/09/28 13:19:32
>>190が言ってるような
一つのソフト上で同時に複数の
Luaスクリプトを動かす事って可能なの?

変数やスタックがバッティングしそうな気もするし
実際そういうことをしてるアプリ見たことないな

196:デフォルトの名無しさん
09/09/28 13:21:09
lua_Stateを複数作ってそれぞれ別管理すればいいだけじゃ?

197:デフォルトの名無しさん
09/09/28 13:59:39
ですね。

Luaはインタプリタの状態がグローバルにならない作りになってる。

198:デフォルトの名無しさん
09/09/28 21:44:36
V8も以前は・・・

199:デフォルトの名無しさん
09/09/29 09:55:14
Lua Programming Gems に、
Lua のコルーチンを改造してマルチスレッドにするという記事があるみたい。

URLリンク(www.lua.org)
本は読んでないけど、サンプルコードがダウンロードできる。
Enhanced Coroutines in Lua
Patrick Rapin


200:デフォルトの名無しさん
09/09/29 14:32:03
何かが引っかかると思ったら、コルーチンでLuaを複数回して
更にLua内でもコルーチンを使うからか
なんか富豪だな

201:デフォルトの名無しさん
09/09/29 15:38:36
総合的な処理速度はSquirrelとLuaではどちらが上ですか?

202:デフォルトの名無しさん
09/09/29 15:49:56
>>201
単純な数値計算ではLuaの方が倍くらい早い。
が、いずれにせよCなどの静的型付言語よりは10分の1以下のスピードなので、
あまりヘビーな処理はさせないようにすること。
とはいえ、80:20の法則で大部分のコードはスクリプト側に移行できるはず。
処理能力が足りなくなったら下回りからC/C++に再度移植していく。

203:デフォルトの名無しさん
09/09/29 15:55:21
>>202
そうですか、一見するとSquirrelはLuaの欠点を補い
構文もC/C++に近いなど利点ばかりかと思っていたけど
それなりに欠点があってゲーム用に改良された割には
未だ使用例が少ないのが現状みたいですね

204:デフォルトの名無しさん
09/09/29 16:14:07
>>203
いや、C++で書いてたころは普通にSquirrel使ってたよ。
とりあえず基本的なレベルでの不満はない。
オブジェクトの寿命は常に問題になるけどね。

今はもうC++でプログラムは書かないようにしてるから関係なくなった。

205:デフォルトの名無しさん
09/09/30 18:40:24
>>204
気になるなw

> 今はもうC++でプログラムは書かないようにしてるから関係なくなった。
今は何で書いてるんですか?
.NET系?

206:デフォルトの名無しさん
09/10/02 05:46:32
>>204
C#+IronPythonだ。レポはこのスレに何回も書いてるのでログを見てくれ。
しかし静的型付言語でいいならBooでもいいかも……(はっきり言ってこっちの方が速いし)
まあ今回は途中まで作ったからIronPythonでやってしまう予定だけど。

207:デフォルトの名無しさん
09/10/02 05:47:14
204 → 205

208:デフォルトの名無しさん
09/10/03 12:21:55
Luaステートを増やした(同時実行した)場合のGC負荷は
単純計算でステート数分増えるのかな?
検証してるサイトないか探したけど見当たらない

209:デフォルトの名無しさん
09/10/03 12:29:14
そりゃ当たり前のことを検証する人は居ないだろう

210:デフォルトの名無しさん
09/10/04 13:35:48
たまにLuaではcontinueやbreakは出来ないが
それを可能にするパッチがある、とあるけど
実際どこで配布されてます?
ここ数日ずっと探してるけど見つからず

211:デフォルトの名無しさん
09/10/04 16:57:50
breakはできるだろ
continueは
URLリンク(lua-users.org)
とか
URLリンク(lua-users.org)
だな。

212:デフォルトの名無しさん
09/10/04 18:56:28
初心者な質問なのですが、
VC++6.0でLua環境を構築しています。

「スクリプト言語による効率的ゲーム開発- C/C++へのLua組込み実践」 の中で
紹介されているtolua++を適応しています。
あるクラスの関数をtolua++を用いてLuaに公開しようと実装したのですが、
extern宣言した関数がリンカエラーでビルドする事が出来ません。

やりたい事は下記の様な感じです。
class CHoge
{
public:
char* GetName( CHage* pHage );

};

このGetName関数をtolua++でグルーコードに出力して、
VCのプロジェクトに登録しています。
出力したグルーコードに記述されている、GetName関数がリンカエラーになってしまいます。
*今はグローバル関数にして、extern宣言で対応しています。

クラスの関数をLuaに公開するには何か特別な方法が必要なのでしょうか?

上記の本にはクラスの関数の場合について記述されていない様なので質問しました。

宜しくお願いします。

213:デフォルトの名無しさん
09/10/04 20:20:58
>>211
thx、無事適用完了しました

214:デフォルトの名無しさん
09/10/06 04:29:51
>>212
URLリンク(www.codenix.com)
ここみると、クラスごとバインドするしかなさそう。
あるいは、登録したい関数をクラスメソッド(static 宣言)にするといいのかな。


215:デフォルトの名無しさん
09/10/06 17:54:33
Luaでチャンクの区切りを改行ではなく ; (セミコロン)にしたいのだけど
それを可能にするパッチとか出てたりします?
自分で改造しようにも手に負えなくて

216:デフォルトの名無しさん
09/10/06 18:01:45
配列を0から扱えるように悪銭苦闘したオレに似てるな
オレの場合は自力でやったけど複雑過ぎて無理だった orz
Luaってなんで配列が1からなのかね
いまでもムズムズ、どうにかならないものか

217:デフォルトの名無しさん
09/10/06 18:28:12
lparser.cのstatement()のswitch文のreturnの前に
check(ls, ';');
って書けばいいんじゃないかな

218:デフォルトの名無しさん
09/10/06 22:06:32
社会常識は1からだからな。

219:デフォルトの名無しさん
09/10/06 23:39:10
マジでLuaの配列を0から扱えるようにするpatchありませんかね?

220:デフォルトの名無しさん
09/10/07 01:28:23
>>214
回答ありがとうございます。
クラスのバインドで試してみます。

221:デフォルトの名無しさん
09/10/07 12:03:44
>>216
ニューメリカルレシピ・イン・C っていう本にその逆のことが書いてあったな。
一般的な数学では添え字は 1 からはじまるのに C だと 0 からだから困ると。
で、その本では添え字を 1 から始めるように、配列のポインタを 1 つ前にずらしてた。

つまり、int arr[10] みたいな配列をつくったら、
int *arr1 = arr - 1 と定義しておけば、arr1[1]、arr1[2]、……、arr1[10]
っていうふうにアクセスできる。

222:デフォルトの名無しさん
09/10/07 12:29:33
Fortranな人のための小ワザだけど、
厳密には、配列の範囲から外れたところを指してるポインタに
まつわる動作は未定義なので、仕様に煩い人には不評。
(C FAQ より URLリンク(c-faq.com)

223:デフォルトの名無しさん
09/10/07 13:11:48
>>215
>>219
SquirrelとかAngelScriptじゃダメなの?

224:デフォルトの名無しさん
09/10/07 13:16:16
そもそも0とか1とかいうマジックナンバーを使ってはいけない。
パッチではなく、リファクタリングするべき。
#define FIRST 1

225:デフォルトの名無しさん
09/10/07 13:16:36
言語はそのままの仕様で使うのが無難ではあるよなー

226:デフォルトの名無しさん
09/10/07 13:21:29
>>223
Lua以外にするとメモリ消費や処理速度が劣ってしまうのが嫌で
やっぱり仕様に従って使うしかないですか

227:デフォルトの名無しさん
09/10/07 14:04:47
      ∩∩ ;
      ;|ノ||`      ┬-‖
   __,/●●| __    | | ‖     L...Lua..
   | ; |`(_●)/ ミ   . Y ‖
   | .彡|∪||、 , .|     |  ‖
  /:~ ̄ ̄ ̄ ̄:/.|    |  ‖
  ,|:::::.   .......::/>>    /  ‖
 /.:::::  .. ...::::::|'(/\_/  ‖
../:.:::    .. :.:::/.:/     /‖\
/.:::.   ....:::..:::/.:/
' ̄ ̄ ̄ ̄ ̄ _/
|_| ̄ ̄ ̄ ̄|_|

228:デフォルトの名無しさん
09/10/07 18:31:00
BASICでも配列作ると0からなのに・・・・

229:デフォルトの名無しさん
09/10/07 18:57:15
ここは中間をとって0.5に

230:デフォルトの名無しさん
09/10/07 19:28:51
BASIC はたいていの実装が OPTION BASE とかで配列の開始インデックスを変更できるぜ

231:デフォルトの名無しさん
09/10/07 20:37:21
もう連想配列だけにしちゃおうぜ


232:デフォルトの名無しさん
09/10/07 23:24:33
>>230
なつかしすぎてどっかから鼻血でたわw

233:デフォルトの名無しさん
09/10/07 23:41:07
0からってのはポインタ的な発想で好かんわ

234:デフォルトの名無しさん
09/10/08 13:50:08
Pythonでシステム組んでるが、配列のインデクスが何番からかほとんど意識することないな。
for文ではそのままイテレータをまわしてしまうし。

235:デフォルトの名無しさん
09/10/09 19:50:43
Lua標準だと1ステートあたりのスタックサイズは1Kだけど
消費を抑えたくて手動設定する場合
どれくらいの値がベストだろう?

236:デフォルトの名無しさん
09/10/09 23:42:36
デフォで使用メモリ量が80MBを越える俺の構築した処理系からすれば、
数十キロバイトの仮想スタックなんて小さな問題だ。

237:デフォルトの名無しさん
09/10/11 01:41:47
新しい必殺技を思いついた
>>236 に捧ぐ
"O"zapper!!

238:デフォルトの名無しさん
09/10/11 03:42:20
次こそはうまくやりますコンピューター!

239:デフォルトの名無しさん
09/10/11 19:42:49
>>232
「どっかから」てお前はケツから鼻血がでるのかよw

>>236
RubyでフレームワークとしてRailsを搭載したかのようなメモリ消費量だなおいw

240:デフォルトの名無しさん
09/10/11 19:52:53
>>239
IronPythonがもりもりメモリ食うからな。
ほんと環境にやさしくないスクリプトエンジンだぜ。

まあ、C#で組むにはこれが一番「普通」なスクリプティングエンジンなので。

241:デフォルトの名無しさん
09/10/11 21:24:50
IronPythonすげえwそんなにメモリ食いすぎなのかw

242:デフォルトの名無しさん
09/10/14 02:42:38
luaについてちょっと質問なんだけど、
乱数を表示させたあとに、もう一度同じプログラムを実行すると
シード値が変わらずにまったく同じ乱数が表示されてしまう。
どうすればこのシード値を初期化して、実行するたびに違う乱数を
表示させられるの?

243:デフォルトの名無しさん
09/10/14 02:54:44
それこそシード値を「適当に」初期化してやればいい。
一般的には、タイマーの値とか、ユーザ入力の時間差を測定したりして、それを srand() につっこんで対応する。


244:デフォルトの名無しさん
09/10/14 03:04:26
>>243
レスありがとう

まだはじめたばっかりでホームページさがしながらの手探り状態なんだけど、
math.random()で()の中に1から10までの値をいれるよね?
そしたらそれ以外にmath.randomseedを書けばいいってこと?

245:デフォルトの名無しさん
09/10/14 03:16:42
そう。

プログラムの頭で math.randomseed(os.time()) とでもしておきなされ。


246:デフォルトの名無しさん
09/10/14 03:22:08
できました!
本当にありがとうございました。

これからもっと勉強してきます

247:デフォルトの名無しさん
09/10/14 13:48:26
実行中のLuaスクリプトを停止させるには
lua_errorで強制的に例外を発生させる方法以外に
何かありませんか?

1つのスクリプトを実行する一般的な使い方なら問題ないのですが
スレッド毎で同時に複数のスクリプトを実行させる場合
リソースの保護をしても違うスレッドからスクリプト(ステート)を閉じようとすると
原因不明のエラーで強制終了してしまいます

248:デフォルトの名無しさん
09/10/14 14:52:00
>>247
コルーチン化していつでも終了できるように作っておくのがLWL流 :)

249:デフォルトの名無しさん
09/10/14 14:57:04
つlua_yield

250:デフォルトの名無しさん
09/10/14 15:03:25
>>248
肝心な部分を説明し忘れてました
私が今作ってるのは>>190の方が言われたような
luaを同時実行させてプラグイン機能を実現するもので

それをコルーチンでやるとなると実質スレッド1つで
全処理をすることになるのでCPUリソースの消費が激しく
ステートも一つだから変数の重複などが問題になって
それらを回避するためにマルチスレッド上で
それぞれスクリプトを動かす必要があるのです

しかしあるプラグインでエラーが起こり
それに関連するスクリプトを全部停止(解放)したい時
現スレッドから他スレッドのステートを閉じようとすると
強制終了につながるエラーが起きてしまう状況で

251:デフォルトの名無しさん
09/10/14 15:35:28
>>250
ちがうよー。
コルーチンというのはプログラマが入力した任意のタイミングで
動作を中断できるようにした仕組み(yield)のことであって、
それを使って複数の仕事を1スレッドで同時に実行というのは二次的なものに過ぎないんだよ。

したがって複数のスレッドで実行しても(エンジンの実装に問題が無いなら)問題ない。

で、中断されて制御が戻ってきたタイミングでそのまま開放してあげればいい。

252:デフォルトの名無しさん
09/10/14 15:54:24
>CPUリソースの消費が激しく
>変数の重複などが問題

>強制終了につながるエラーが起きてしまう状況

戦況が悪化してるが、今さら撤退する気はない
典型的なパターンですね

253:デフォルトの名無しさん
09/10/14 16:07:52
>>250
lua はスレッドセーフじゃないから、別スレッドからの制御は根本的にできないよ

コルーチンでうごかせってのは、呼び出しに lua_call を使うんじゃなくて、lua_resume と while
ループでスクリプトを駆動させて、スクリプト側では定期的に yield するようにすれば、
その区切りで安全に実行中断できるよ、ってこと。

それぞれのスクリプトはそれぞれのスレッドで立ち上げて、ほかのスレッドから停止させるときは
フラグをたてておいて、そのフラグがたってたらwhileを抜けて速やかにスレッドを自滅させる
ような書き方にする。

コルーチン駆動&記述が面倒ってことなら、裏技チックだけど、lua_sethook を使って、
関数呼び出し、ないしは行ごとに終了フラグチェックさせて、もしフラグたってたら
lua_error で速やかにスクリプトを abort させるという手もある。
残念ながらhookにユーザパラメータは存在してないので、変数かレジストリに
参照するフラグのCポインタを格納しておく、とかの小ざかしいテクが必要。

254:デフォルトの名無しさん
09/10/14 16:12:26
なるほど
Luaスクリプトを同時実行する際は
マルチスレッドのみでの制御は無理ということですか
改めてコルーチンについて勉強し直してきます
どうも助かりました


255:デフォルトの名無しさん
09/10/14 17:04:30
スレッドって名前が紛らわしいな。
関係ないかもしれないが、非推奨な手法を使いにくくするとかいう話を思い出した。

256:デフォルトの名無しさん
09/10/14 23:15:46
Luaは普通の呼び出しと、lua_yieldで一時停止して再度呼び出す場合とで使う関数が違うのが面倒くさくて逃げちゃったな俺…
AngelScriptだと同じ呼び出し方でOKなんだよなぁ…

257:デフォルトの名無しさん
09/10/15 05:43:27
>>256
coroutine.wrap をつかえば、普通の関数呼び出しと同じように resume もできるよ。


258:デフォルトの名無しさん
09/10/15 11:25:20
変態文法&バイトコードがエンディアン依存なluaを広めるのやめようぜ
手間が増えてスクリプトにしてる意味がねえよ

259:デフォルトの名無しさん
09/10/15 11:27:46
luaって、oracleにアクセスするライブラリないですか?

260:デフォルトの名無しさん
09/10/15 22:50:58
JavaからLuaを使うことってできる?

261:デフォルトの名無しさん
09/10/15 23:24:54
JavaからC言語を使うことってできる?

262:デフォルトの名無しさん
09/10/16 10:56:47
>>259
URLリンク(www.keplerproject.org)
Lua for Windows についてくるよ。使ったことないけど。
URLリンク(luaforwindows.luaforge.net)

263:デフォルトの名無しさん
09/10/16 11:14:25
>>259
というかそんな『重い』プロダクトを扱うなら、
素直にPythonやRubyなんかのライブラリの整備されたスクリプト言語使ったほうがよくなくね?

264:デフォルトの名無しさん
09/10/16 11:16:27
まあそんなこといいつつ、俺もPythonで軽量なDBラッパー探したら見つからなかったので
ActiveRecord互換のORMライブラリを自作したんだがな。

265:デフォルトの名無しさん
09/10/16 11:24:25
>>258
Luaの速度に魅力を感じてる人がなんとなく多い気がするね。
あとは、リスとかに比べるとドキュメントの多さなんかが人気の秘訣?

266:デフォルトの名無しさん
09/10/16 11:27:28
某MMORPGで使っているからだったりして。

267:デフォルトの名無しさん
09/10/16 12:17:07
ああ、別にROに限らず採用実績っていうのは使う基準に十分なるだろうし。

268:デフォルトの名無しさん
09/10/16 12:25:08
組み込みに求められるのは速度と少ないメモリ消費だから
多少なりと癖があろうとlua使っちゃうんだよね
他に比べて採用例も多い分、多言語との連携も充実してるし

269:デフォルトの名無しさん
09/10/16 12:53:36
ORMの次は、C/C++とスクリプトのマッピングだ、というアナロジーだけで
動いてるやつがいるような気がしてきた

270:デフォルトの名無しさん
09/10/16 13:04:45
>>組み込みに求められるのは速度と少ないメモリ消費だから
なんで? 別にそれは前提条件にならないと思うけど。

オレはゲームシステムを組んでいるところだが別にメモリ消費量は大して気にしてないぞ。
速度は大切だが、どうせ1スレッドでは間に合わなくなるのでマルチスレッド化するし、
ボトルネックはスクリプト部分ではないので問題ない。

271:デフォルトの名無しさん
09/10/16 13:14:26
ヤマハ RTX1200 に Lua 実行機能搭載だってさ
URLリンク(www.rtpro.yamaha.co.jp)

272:デフォルトの名無しさん
09/10/16 13:17:06
AngelScript使おうぜ

273:デフォルトの名無しさん
09/10/16 13:37:08
まぁ、なんだかんだでluaが一番なんだけどね

274:デフォルトの名無しさん
09/10/16 13:58:37
>>273
俺はそうは思わないけどな……。
触ったことあるけど文法がちょっと癖あるし、整数型がないし。

Pythonの方がよっぽどいい。

275:デフォルトの名無しさん
09/10/16 14:01:01
>>274
いやいや、個人的にではなく一般的にね
上でも出てるけど書籍や採用例が多いとかさ

276:デフォルトの名無しさん
09/10/16 16:06:28
このスレはIronPython使いと、AngelScript使いが一人ずつ常駐してるんだなw

277:デフォルトの名無しさん
09/10/16 17:20:01
こんだけで組み込み言語として使えるわけで、
URLリンク(alpha.mixi.co.jp)

でもphpに組み込みってなんだ。
URLリンク(www.mediawiki.org)
まあPECL拡張は2年前で止まってるみたいだけど

278:デフォルトの名無しさん
09/10/17 00:50:19
PHPはインタプリタを組み込めないライセンスだからなー。
この制限さえなければ今までなかった用途が色々できると思うんだけど。

279:デフォルトの名無しさん
09/10/17 15:11:07
>>278
??どういうこと?

280:デフォルトの名無しさん
09/10/17 15:38:39
>>279
うう〜ん……。問われたので改めて調べてみたが、どうやら間違った認識が一部あったようだ。
PHPインタプリタ本体はPHP License 3.01で配布されていて、
こいつは
・配布するソースコードまたはドキュメントに著作権表示、ラインセンス本文を記載すること
・PHP Groupから許可を得ずにPHPという名前を使用しないこと
(PHP Fooやphpfooはだめ。Foo for PHPはOK)
・文言の表示強制("This product includes PHP, freely available from <URLリンク(www.php.net)")

だけだな。インタプリタ自体を内蔵することは問題なさそう。
契約なしに内蔵できないのはZendライブラリなんだそうな。
(Zend Frameworkは修正BSDライセンス。Zendライブラリとは何ぞや?)

281:デフォルトの名無しさん
09/10/17 23:30:49
ここでzlibライセンスのSquirrelとAngelScriptの出番ですね!


282:デフォルトの名無しさん
09/10/18 01:54:10
luaスクリプト上でコルーチンを作成をした場合は
明確的に破棄する方法はないようなのだけどC側から

//コルーチンを実行するのスレッド(ステート)を作る
lua_State *L = lua_newthread(luaL_newstate());

//C側からコルーチンの操作

//コルーチンのスレッドを閉じる
lua_close(L);


とした場合はコルーチンを実行する為に確保されたメモリは解放されますよね?

283:デフォルトの名無しさん
09/10/18 03:54:02
そいや、Ioって言語はどうよ?
シンプル、軽量というのが売りらしいが。

284:デフォルトの名無しさん
09/10/18 09:02:18
>>282
lua_newthreadで作成したコルーチンはlua_closeしちゃ駄目だよ。
開放はGCにまかせる。>>121あたりから同じ様な質問出てるから見てみ。


285:デフォルトの名無しさん
09/10/18 09:33:44
>>284
指摘ありがとうございます
つまりスタックに積まれたコルーチンのスレッドを
lua_popで削除すればいいのですか
でもそれだとGCまかせでスグにコルーチン破棄はされないので

>>282のを
//コルーチンを実行するのスレッド(ステート)を作る
lua_State *L = luaL_newstate();
lua_State *T = lua_newthread(L);

//C側からコルーチンの操作

//ステートを閉じる
lua_close(L);

とすれば閉じるのはコルーチンのステートではないものの
lua_newthread は元のステートのオブジェクトを共有するみたいなので
コルーチンで確保されたメモリも同時に解放されますよね?

286:デフォルトの名無しさん
09/10/18 10:07:08
>コルーチンで確保されたメモリも同時に解放されますよね?

まぁ、そらそうだが。
任意開放ならlua_gcじゃ駄目な理由でもあるの?

287:デフォルトの名無しさん
09/10/18 10:29:55
駄目な理由はないのだけど
GCという目に見えない物に頼るより
自分で明確的に管理したくて

288:デフォルトの名無しさん
09/10/18 10:37:32
つまりC#くそくらえってことですね

289:デフォルトの名無しさん
09/10/18 10:43:50
(#^ω^)

290:デフォルトの名無しさん
09/10/18 11:14:07
(C#^ω^)

291:デフォルトの名無しさん
09/10/18 11:22:19
(Ruby#^ω^)

292:デフォルトの名無しさん
09/10/18 11:27:18
>>287
Luaでは文字列もテーブルも関数もuserdataもGCで管理されてる訳だが、そういうのも自分で管理したいの?

293:デフォルトの名無しさん
09/10/18 11:31:28
>>292
そこまではこだわってないです
それらはスクリプトに自分で定義しないと生成されないから
ある程度は管理出来るので

294:デフォルトの名無しさん
09/10/18 11:54:51
>>285
元のステートごと閉じてたら、そのコストがでかすぎて全然うれしくないと思われ。
GCいやな人は lua 使うな、が精神的には正しい。squirrel にしときなされ。

295:デフォルトの名無しさん
09/10/18 12:06:48
>>283
遅い
検索しづらい

296:デフォルトの名無しさん
09/10/18 12:07:49
>>283
言語としては面白いよ
組み込みも簡単に出来るし
でもWinの開発環境を整えるの面倒

297:デフォルトの名無しさん
09/10/18 12:26:45
ネットでの検索しやすいのさは大切だよね
iPhone 3G S もジョブスが発表後に iPhone 3GS に改名させたそうだ


298:デフォルトの名無しさん
09/10/18 12:28:16
> ネットでの検索しやすいのさは大切だよね
「ネットでの検索のしやすさ」の間違いです…


自分でワロタ


299:デフォルトの名無しさん
09/10/18 12:37:33
>>294
>元のステートごと閉じてたら、そのコストがでかすぎて
具体的にkwsk

300:デフォルトの名無しさん
09/10/18 13:09:55
>>299
や、普通にグローバルな関数や変数も全部毎回順次解放&登録しなおすハメになるじゃん
そういったコストを下げるために共有させる仕組みなのに本末転倒だろう

それぞれのスレッドが完全独立で頻繁に起動するものでもないのなら止めはしない。

301:デフォルトの名無しさん
09/10/18 13:17:45
>>285を見る限りコルーチンを実行し終わった時に
不要になったのを解放するのだから問題ないでしょ

302:デフォルトの名無しさん
09/10/18 14:09:07
実際にはluaL_openlibsが必要だからコストが大きいよ
擬似コードにはいちいち書かないだろうけど
擬似コードを書くとどうしても、目に見えない物に頼りがちだよね

303:デフォルトの名無しさん
09/10/18 16:00:28
ちょっと前にLuaで乱数を作っていたものだけど
今度は重複しない乱数を表示させたいと思っている。
でも何度やってもできない。。。
ヒントだけでも教えてください

304:デフォルトの名無しさん
09/10/18 16:05:01
そもそも重複しないものは乱数とは言わない。もはや lua とは関係ない話なので手頃なアルゴリズム系の質問スレに移るのをオススメする
ヒント:シャッフル

305:デフォルトの名無しさん
09/10/18 16:19:02
>>304
レスありがとう

ということは、最初に規定量の数値を指定しておいてそれをシャッフルすればいいってことか!
ありがとう。

306:デフォルトの名無しさん
09/10/18 16:59:56
個人情報が流出しても、ニュー速民は困る人いないよね?
スレリンク(news板)

307:デフォルトの名無しさん
09/10/18 23:54:16
(C#^ω^)

308:デフォルトの名無しさん
09/10/23 14:27:21
以下のようなプログラムで
クリティカルセクションの所有権を放棄し
それぞれのスレッド、スクリプトの実行を
安全に終了させるにはどうしたらいいでしょうか?

-- test.lua
while true do
foo()
end
-- test2.lua
while true do
foo()
end
-- main.cpp
void thread1(){
・・・
if(luaL_dofile(L,"test.lua")){
・・・
}
void thread2(){
・・・
if(luaL_dofile(L,"test2.lua")){
・・・
}
int foo(luaState* L){
EnterCriticalSection(&CriticalSection);
// 少し重めの処理
LeaveCriticalSection(&CriticalSection);
}


309:デフォルトの名無しさん
09/10/24 00:21:40
1つ1つのLuaステートをLua_yield使って個別に動かすのはダメなの?

310:デフォルトの名無しさん
09/10/24 00:42:33
あれ もしかしてAngelScriptって結構良いんじゃね?
名前が可愛いからちょっと舐めてたわ

311:デフォルトの名無しさん
09/10/24 00:51:08
>>310
できたら、どの辺りが気に入ったか詳しく

312:デフォルトの名無しさん
09/10/24 06:30:35
ついでに、このスレに常駐しているAngelScript信者の方にお聞きしたいのだが、
LuaやSquirrelと比べて優れている点は何がありまんすか?

313:デフォルトの名無しさん
09/10/24 06:39:49
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ AngelScript!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ


314:デフォルトの名無しさん
09/10/24 07:09:44
AngelScriptの@がよくわからん。
オブジェクトの参照なのか?

 Hoge@ hoge;

みたいなの。
C++みたいに、インスタンス入れる変数と参照がわかれているのか?(C++詳しくないからなんtねいったらいいかわからん)
LLなのに面倒な言語だな…
全部、デフォで参照でいいと思うんだが

315:デフォルトの名無しさん
09/10/24 12:38:48
>>314
スクリプト言語の癖に静的型付言語だからなぁ。
それって本当に意味あるのか? って思ってしまう。

Booとかも触ってみてその動作速度は認めるけど、スクリプトの記述が面倒に感じる。

316:デフォルトの名無しさん
09/10/24 13:28:09
ActionScript3.0 もいちおうスクリプト言語だけど、静的型付言語。
まぁ、インタプリタじゃないけどね。

317:デフォルトの名無しさん
09/10/24 23:43:43
>>312
・文法がC++まんまなので書きやすい
・C++との連携が簡単
・クラスとかほぼそのまま使える
・const〜やenumなど、定数定義が可能
・#includeも可能
こんなところか?

>>314
その例だと、「Hogeクラスの参照型」って扱いになる。
C++のHoge &という記述に近い。

318:デフォルトの名無しさん
09/10/25 00:41:08
スクリプトを自分で改造して使いたいんですが、ライセンスが緩くて
ソースが読みやすく短い組み込みライブラリのお勧めを教えてもらえませんか?
今のところLuaが最有力候補だと思ってます。

319:デフォルトの名無しさん
09/10/25 01:10:08
Squirrelがソース短いんじゃなかったっけ。読みやすさは知らんが。

320:デフォルトの名無しさん
09/10/25 05:11:42
>>319
実質としてはそんなに悪いコードではないが、しかし決して良いコードではない。
そして、SqPlusは絶対に読むな。頭が痛くなること請け合い。

それはそうと、Xtalのコードは大変いいと思うぞ。
言語自体の仕様は首を傾げたくなるところがあるが。

321:デフォルトの名無しさん
09/10/25 08:12:58
         \   l´⌒\⌒\ \\ \
           \ ヽ   )  )   \\ \\   
              (   \ \∩___∩ \\ 
           \   \  ⌒⌒| ノ      ヽ  \\      
              \ \   /  ●   ● ト、\ \\\ 
               \  Y |    ( _●_)  ミ\  \\\  
               \ / 彡、_  |∪| ノ   \  \\\
                 (____)―ヽノ' ヽ      ̄ ̄ ヽ\\
                                \,  j  l l .l }
                         Lua!   l (_ノノノノ



322:デフォルトの名無しさん
09/10/25 17:53:23
>>320
Xtalのコードは俺の頭じゃ解析不可能だからLua読んでます。

323:デフォルトの名無しさん
09/10/25 18:55:12
SqPlus使おうと思ったらもう全然更新してないのか
いったいどれにすれバインダ

324:デフォルトの名無しさん
09/10/25 20:22:51
そもそもSquirrel自体全然盛り上がってないというか終わってるというか
始まる前に終わっちゃったよ的な

325:デフォルトの名無しさん
09/10/25 20:29:35
Lua 5.2まだー

326:デフォルトの名無しさん
09/10/25 22:01:57
>>323
SqPlusはダメすぎる、忘れましょう、使ってる人はたぶんいません
squirrelのバインダは自分で使い易いように自分で書いた方が1024倍マシよ

327:デフォルトの名無しさん
09/10/25 22:15:15
そこでバインダとか無くても全然問題のないAngelScriptの出番だな

328:デフォルトの名無しさん
09/10/25 22:36:22
>>326
ごめん、動いてるものはさわるな原則にのっとって使い続けてる^^;
一部手はいれてあるけど。
時間あったら新しいバインダにしたいんだけどなかなか……

329:デフォルトの名無しさん
09/10/25 23:08:08
スクエニのゲームはSqPlus使ってるって
cedecのスライドに書いてあったよね。

330:318
09/10/26 01:03:53
SquirrelとXtal読んでみます。
ありがとうございました。

331:デフォルトの名無しさん
09/10/26 02:05:58
こうなったらLuaとSquirrelとAngelScriptの合わせ技でいくか

332:デフォルトの名無しさん
09/10/26 14:10:36
angelscript初めて知った。いいなこれ!!
スタックゴニョゴニョしなくていいからコード読みやすいし
なによりデフォルトでメモリ上から「のみ」スクリプトコードをロードできるってのがイイ!
ゲーム開発だと裸のままスクリプトファイルが置いてあることなんてないからね。。。
モジュールのロードとかもオブジェクト指向で非常に素直に書けるぽいし
さっそくLuaを破棄して組み込んでみよう

333:デフォルトの名無しさん
09/10/26 14:25:29
AngelScript つかう場合は、これ C++ だけでよくね?という思考に陥らないように注意な


334:デフォルトの名無しさん
09/10/26 16:01:05
まんまC++なのがメリットでありデメリットでもある

335:デフォルトの名無しさん
09/10/26 20:39:28
>>AngelScript つかう場合は、これ C++ だけでよくね?という思考に陥らないように注意な
前使おうとして陥った
ちょっと聞きたいんだが、AngelScriptを使っている人や使わなくなった人(他の言語に移った人)は
なんで使っている、使わなくなった?

C++そのままというか継承に制限があるのが大きくてSquirrelに移ろうと思ってるんだけど、
他の人はどう思ってるのか気になる
アプリ実行時にちょこちょこ書き直したり、コンパイル/リンク時間の省略とかスクリプト自体の
メリットは分かるんだが…


336:デフォルトの名無しさん
09/10/26 21:10:20
コルーチン

337:デフォルトの名無しさん
09/10/26 23:17:06
コルーチン

338:デフォルトの名無しさん
09/10/26 23:21:46
チンコール

339:デフォルトの名無しさん
09/10/27 08:20:18
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ Lua!!
 彡、   |∪|  /
/ __  ヽノ /
(___)   


340:デフォルトの名無しさん
09/10/27 09:35:24
>>335
C++との連携が簡単、C++クラスをほぼそのままで使える、複数のコンテキスト(LuaStateに相当?)を同時に処理させるのも簡単、
定数定義や列挙型も使える、といった点が便利なんで使ってる。

特にC++との連携はLuaやSquirrelより簡単だし、マニュアルもサンプルも英語だけどわかりやすい。

341:デフォルトの名無しさん
09/10/27 18:19:47
コルーチン

342:デフォルトの名無しさん
09/10/28 00:13:00
AngelScriptに乗り換えようかな
細かいとこがc++と違和感無くて簡単だわ

343:デフォルトの名無しさん
09/10/28 04:00:43
そこで敢えてPawnという選択肢も

344:デフォルトの名無しさん
09/10/28 04:39:16
コルーチ

345:デフォルトの名無しさん
09/10/28 13:47:14
AngelScript と Luaって
メモリ消費や処理速度はどれほど違う?

346:デフォルトの名無しさん
09/10/28 14:09:25
   /ヽ /ヽ
  ':' ゙''"  `':,
  ミ   ・ω・ ;,
 :; . っ     ,つLua!
  `:;      ,;'
   `( /'"`∪


347:デフォルトの名無しさん
09/10/28 14:17:51
Pawnつえーな、使い勝手とか全然知らないけど
URLリンク(codeplea.com)

348:デフォルトの名無しさん
09/10/28 14:48:51
これ見るとリス使いの俺涙目だわ

349:デフォルトの名無しさん
09/10/28 15:50:27
・メモリ消費低
・静的型付
・スレッドセーフ
・スタック操作なし(またはLuaより容易)

で選ぶとしたら
やっぱりAngelScriptがいいのかな〜

350:デフォルトの名無しさん
09/10/28 15:51:52
おなじくリス使いの俺涙目(笑)

まあ、リスはわかりやすいからいいんだよ!とか言ってみる。
でも Pawn の性能は魅力だな。とりあえず組み込みテストして
みてよさそうなら、静的スクリプト言語としての併用もかんがえてみよう

351:デフォルトの名無しさん
09/10/28 15:53:37
まあなんとかとかんとかはトレードオフってやつだな

352:デフォルトの名無しさん
09/10/28 18:03:22
Pawnはスクリプト内で日本語文字列を扱わなくてもいいならいいかも

353:デフォルトの名無しさん
09/10/28 18:17:32
リスのバグ発見。

setdebughookを仕掛けた状態で_callメタメソッドをコールすると死ぬ。(SQVMでぬるぽ発生)

ちなみにdebughook関数の中身を空にしても同様です。
公式フォーラムの垢を紛失してしまったので誰か報告たのむ
URLリンク(squirrel-lang.org)


function debughook(event_type, sourcefile, line, funcname) {
 local fname = funcname ? funcname : "unknown";
 local srcfile = sourcefile ? sourcefile : "unknown";
 ::print(::format("%s:%d: [DEBUGHOOK:%c] %s\n", srcfile, line, event_type, fname));
}
::setdebughook(debughook);
class FOO {
 function test() { ::print("FOO::test()\n"); }
 function _call(orig_this) { ::print("FOO::_call()\n"); }
};
local foo = FOO();
foo.test();
::setdebughook(null);
foo();
::setdebughook(debughook);
foo(); // Segmentation fault (core dumped)


354:デフォルトの名無しさん
09/10/28 18:39:16
>>353
すんまそ、環境を書いてなかった。
Squirrel 2.2.3 stable
VisualC++, cygwin, Linux, 何れでも発生。
Squirrel 3はまだ試していません。

355:デフォルトの名無しさん
09/10/29 12:22:06
Pawn Language Guide っていうドキュメントみてみたけど、無名関数がつくれないっぽいね。
だとするとクロージャが作れないから、ちょっと不便かな。
状態遷移とかの記述に特化しているようだし、UnrealScript に似ているかも。


356:デフォルトの名無しさん
09/10/29 17:27:53
347のリンク先見て思ったが、GameMonkeyが何気に性能いいな。

357:デフォルトの名無しさん
09/10/29 20:25:50
>>353
拙い英語ですが報告しておきました。
temp_regがメタメソッドコール前にhookで使われるのが一因っぽいです。


358:デフォルトの名無しさん
09/10/30 04:54:40
Squirrel フォーラムに代理の報告をしてもらえるなら、 sq_mem.cpp をはじめ
メモリ確保失敗についてまったく考慮してないのを修正してくれ、と頼んでみて
もらえまいか?

組み込み言語としてリソースの乏しい環境で使うことを考えれば、メモリ確保が
失敗しないなどという前提で組まれるとツライものがある。

359:デフォルトの名無しさん
09/10/30 04:56:12
s/sq_mem/sqmem/

360:デフォルトの名無しさん
09/10/30 04:57:50
なんで自分で報告しないのん?

361:デフォルトの名無しさん
09/10/30 05:00:20
残念ながら英語で会話ができる自信がない。
リファレンスマニュアルを読む程度ならなんとかなるんだけど。

362:デフォルトの名無しさん
09/10/30 05:20:40
パッチ作って送れば英語できなくてもだいじょぶじゃないかな。
here is a patch for memory allocation error
とか一文だけ書いとけば通じると思う。

363:デフォルトの名無しさん
09/10/30 05:42:29
うーん。問題はコード全体に散らばってるんで、まずは全体的な方針をはっきり
決めてからじゃないとマズイ感じ。

sq_malloc や sq_realloc がいくつかのマクロを通して間接的に使われてるんだけど、
どれも呼び出し元で NULL が返ってくることが考慮されてない。

典型的なのは配列伸ばすのに p = SQ_REALLOC(p,oldsize,newsize) してるところ。
NULL 返したら元の領域がリークするうえに後続のコードでは確保成功したものとして
余裕でアクセスしてくる。

最初は、C++だからsqmem.cppの関数から例外投げろってことかと思ったんだけど、
呼び出し側で例外の発生も考慮されてないからまた別の理由でリークするし。

364:デフォルトの名無しさん
09/10/30 10:21:32
AngelScriptでマルチバイト文字列を使おうとする場合の不具合も報告したほうがよさそうなんだけどなぁ…

365:353
09/10/30 14:26:46
>>357
ありがとう!!

366:デフォルトの名無しさん
09/10/30 17:39:48
>>364
なんか不具合あるの?
AngelScript試してみようと思ってるんで気になる
UTF8扱いたいんだ


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4274日前に更新/247 KB
担当:undef