【Lua】組み込み系言語総合 その4【Squirrel】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/03/30(水) 01:00:58.93使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/
その他の参考URLは>2から
■前スレ
【Lua】組み込み系言語総合 その3【Squirrel】
http://hibari.2ch.net/test/read.cgi/tech/1272643397/
■過去スレ
その2 http://pc12.2ch.net/test/read.cgi/tech/1243210301/
その1 http://pc12.2ch.net/test/read.cgi/tech/1205208141/
プログラミング言語 Lua
その3 http://pc11.2ch.net/test/read.cgi/tech/1160799232/
その2 http://pc8.2ch.net/test/read.cgi/tech/1063711237/
その1 http://pc5.2ch.net/tech/kako/1034/10341/1034182349.html
0669デフォルトの名無しさん
2011/08/17(水) 19:11:08.78スレッド運用可能程度で。
0670デフォルトの名無しさん
2011/08/17(水) 19:15:17.29馬鹿だと思われるから気をつけた方が良いよ
0671デフォルトの名無しさん
2011/08/17(水) 19:18:32.78CPython と CRuby は GIL で実現してるので実質同時に動くスクリプトは一つだけど、まあ、実現はしてる。
他の実装だと、MacRuby は既に GIL 無しになってて、実際に複数スレッドで同時にスクリプトが走る。
あとは Rubinius もたしか開発ブランチでは GIL 排除してる。
CPython は GIL 排除は目標にあがってたけどまだ実現はしてなかったはず
Jython と JRuby はJava上の実装だけど完全に複数スレッド対応ずみ
>>663
「スクリプトだけでなんでもやる」的なスクリプト言語では、現実に求められてる要望だよ。
マルチコア時の性能がかなり上がるからね。
もっとも、俺も Lua でする必要はさっぱり無いと思う。適材適所やね
0672デフォルトの名無しさん
2011/08/17(水) 20:01:03.74AngelScript|Д`)<boost::threadと組み合わせて複数のスクリプト動かした時は問題なかったけど。
0673644
2011/08/18(木) 00:37:04.54とりあえず >>647 の認識で合ってるか気になったんだ。
前の流れのときは(今もいるっぽいが)悪口雑多撒き散らしてまで
「一般的にスレッドセーフ」でまとめたい人がいたから。
これに関しては定義を決めないと結論出ないし、これでまとめるには
誤解を招くと思ったんで、 >>647 でおkなのを確認したかった
>>670
関数はそれでいいと思うんだけどvectorもLuaも状態を持ってるから、
ちょっと前提が違う。関数もstatic変数で状態持ってたら崩れる
でなんか面白い議論になってるLuaStateを単一でマルチスレッド化に
需要あんの?って話だけど、ちょっとずれてるかもしれんがGameProgrammingGemsの
7か8にそういう話が載ってたような。確か、変数、関数をスレッド数分
コピーしたくないから、一箇所に集めてアクセスさせる話だったと思う。
State自体はスレッド数あったかもしれんからずれてるかもしんない。
本は会社においてるから確認できなくてすまん。
ただ、最近は8コアとかざらだから無視できないのかもしれないね
あとほんと、なんか自分の自身が無いのに巻き込んだようですまない。
0674デフォルトの名無しさん
2011/08/18(木) 02:08:07.86> >>661
> CPython と CRuby は GIL で実現してるので実質同時に動くスクリプトは一つだけど、まあ、実現はしてる。
それで良しとするならLuaでも同じじゃないの?
countフックしてスイッチングするだけじゃん
0675デフォルトの名無しさん
2011/08/18(木) 10:20:35.12という本の
Enhanced Coroutines in Lua
という記事で、Lua のコルーチンをネイティブスレッドに対応させる拡張が紹介されてます。
ソースコードだけダウンロードできます。
使った事ないけど。
0676デフォルトの名無しさん
2011/08/18(木) 15:18:24.60多分この中でお前だけ話を理解できてない。
0677デフォルトの名無しさん
2011/08/22(月) 22:05:23.49http://www.gamedev.net/topic/609014-angelscript-2211-released/
asOBJ_ASHANDLEを使えばvalue typeをハンドルのように扱えるらしい
CScriptHandleは・・・どんな型の変数でもreference typeのように扱えるアドオンか?
Win64とMinGWでのnative calling conversionか・・・、うちには関係ないな
CSerializerというアドオンはモジュールの変数を、スクリプトを再コンパイルした後も内容を維持するためのものっぽい
0678デフォルトの名無しさん
2011/08/22(月) 22:11:06.820679デフォルトの名無しさん
2011/08/22(月) 22:28:51.39┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
0680デフォルトの名無しさん
2011/08/23(火) 14:24:57.18( ・∀・) < Lua!!
⊂/ 9) \____
q( /
> >
0681デフォルトの名無しさん
2011/08/23(火) 20:53:31.84これがsuspendで一時停止させたスクリプトの状態まで保存してくれるとなるとすげぇ便利なんだけどなぁ…
今度調べてみよう。
0682デフォルトの名無しさん
2011/08/26(金) 14:17:09.170683デフォルトの名無しさん
2011/08/26(金) 18:59:01.22┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
0684デフォルトの名無しさん
2011/08/31(水) 21:00:58.75同じメタテーブルを設定したテーブルのXとYがあって、
X = X + Y と X = Y + X を区別するために、
今、呼び出されているメタテーブルがXとY、どちらのメタテーブルか、
判定する方法はないでしょうか?
同じメタテーブルを設定しているので、getmetatableでも判定できないので困ってます。
0685デフォルトの名無しさん
2011/09/01(木) 00:41:00.580686デフォルトの名無しさん
2011/09/04(日) 11:49:09.40前からキモイと思っていたけど病気だったんだな
ttp://livedoor.blogimg.jp/hamusoku/imgs/1/c/1cd6fc3e.jpg
「俺ごときが知ってる事を答えれない奴はどんなに見下してもいい」
とか顔を真っ赤にして反論してくれよw
0687デフォルトの名無しさん
2011/09/04(日) 12:50:40.32http://s.journal.mycom.co.jp/news/2011/09/01/079/
効果は言語によって違うのだろうけど、LuaJITなどに移植し易い機能だったら、
patch対応出来るのだろうか
0688デフォルトの名無しさん
2011/09/04(日) 13:20:09.35詳細項目みると単純ループや数値計算まわりで、LuaJITの最適化済みの得意分野になるので、あんまり期待できないかも。
0689デフォルトの名無しさん
2011/09/04(日) 16:12:14.33482 :名無しさん@初回限定:2007/09/10(月) 02:39:05 ID:+7lLhCDw0
2chで調べ物をしたい時は「教えてください」って書いても
なかなか教えてもらえない。
そういう時は、知ったかぶり風に間違ったことを自信満々に書く。
そうすると、ものすごい勢いでツッコミを入れてもらえる。
0690デフォルトの名無しさん
2011/09/04(日) 21:07:22.31この板でもっと流行らせるべき
0691デフォルトの名無しさん
2011/09/06(火) 00:38:09.21webGLもあるしどうなるかな
0692デフォルトの名無しさん
2011/09/07(水) 20:36:46.82普通にバイナリにコンパイルしてDLLかなんかにするっていう
そんな魔法のようなことできませんか?
0693デフォルトの名無しさん
2011/09/07(水) 21:28:07.120694デフォルトの名無しさん
2011/09/08(木) 09:02:27.07ネイティブバイナリにするのが重要なのか、DLLにするのが重要なのか、
どちらなのかでアプローチが変わると思う。
0695デフォルトの名無しさん
2011/09/08(木) 20:57:31.40ひどい…そんな風に言わなくたっていいじゃない!
>>694
配布形式は全部バイナリで、
開発中はVMにDLL読み込ませて呼び出し〜みたいにできたらいいなぁ。
ということで両方知ってたら教えてください。
0696デフォルトの名無しさん
2011/09/08(木) 21:04:45.620697デフォルトの名無しさん
2011/09/08(木) 21:40:20.80単体でコンパイルして意味があるのかよくわからん。
0698デフォルトの名無しさん
2011/09/08(木) 22:48:17.38DLLにLuaを埋め込めばいいのでは?
0699デフォルトの名無しさん
2011/09/09(金) 09:50:27.31ネイティブの速度が必須とかじゃなきゃ、698の言うとおり
Luaを丸ごとDLLにすれば良いだけじゃ。
配布形式は全部バイナリでというのは、スクリプトが別ファイルになってるのが
嫌なのだろうか?
もしそうならスクリプトのソースをバイナリに埋め込めばいい。
0700695
2011/09/09(金) 22:00:26.22…現状で遅いんで、ちょっとでも早くならないかなと思って聞きました…。
0701デフォルトの名無しさん
2011/09/09(金) 22:57:30.61どの部分が遅いのかテストしてみたら?
なんかよう分からんけどLuaは遅いという理由だと
全部Cで書けとしか言えない
0702デフォルトの名無しさん
2011/09/10(土) 00:10:13.570703デフォルトの名無しさん
2011/09/10(土) 06:44:17.73適材適所。
0704695
2011/09/10(土) 07:21:42.29ムリポ ナイポですかね。理解した。
0705デフォルトの名無しさん
2011/09/10(土) 10:19:46.790706デフォルトの名無しさん
2011/09/10(土) 10:48:28.840707デフォルトの名無しさん
2011/09/10(土) 13:01:35.780708デフォルトの名無しさん
2011/09/10(土) 14:18:37.550709684
2011/09/14(水) 22:00:02.88>>685で言われてる通りの質問なのでそのメソッドの中で判別する方法を聞きたいのですが。
0710デフォルトの名無しさん
2011/09/14(水) 22:48:38.64もし__addがXのものでもYのものでもない普通の関数だったら、
「__addは誰のものか」という質問は存在しない。
だから質問が無視されているのだと思います。
0711684
2011/09/14(水) 23:39:19.08普通の関数というのがよくわかりませんが、
__add=function(operand1,operand2) … end
という要素が入ったメタテーブルを使ってます。
このメタテーブルをXとY両方にsetmetatableしているので、
XのものでもYのものでも無く共用、というか、
XとYは同じクラスのオブジェクトです。
0712デフォルトの名無しさん
2011/09/14(水) 23:57:20.68一例として
X = { 1,2,3,4,tonumber=function(self) ret=1; for i,v in ipairs(self) do ret = ret * v end; return ret end}
Y = { 1,2,3,4,tonumber=function(self) ret=0; for i,v in ipairs(self) do ret = ret + v end; return ret end}
mt = {__add=function(op1,op2) return op1:tonumber() + op2:tonumber() end}
setmetatable(X,mt); setmetatable(Y,mt)
print(X+Y); print(Y+X)
0713デフォルトの名無しさん
2011/09/15(木) 15:40:50.46X+YとY+Xをなぜ区別したいのかわからないので
適切な回答が思いつかない。
ひょっとしてX=X+YのときXの束縛を変更するんじゃないくて、
Xに束縛されているオブジェクトに副作用を起こしたいとかか?
0714684
2011/09/15(木) 22:03:12.20これはX+YもY+Xも値が一緒だから判定は無理ってことでしょうか・・・?
>>713
順番を保持した値が重複の無いリストを作りたいのですが、
X = {1,2,3},Y = {2,4} とあって両方に__addメソッドがついた同じメタテーブルが設定されているとき
X = X + Y なら Y が後ろなので X = {1,3,2,4} に、
X = Y + X なら Y が前なので X = {2,4,1,3} になるといった形で
足されるリストの並びを優先するようにソートしたいのです。
0715デフォルトの名無しさん
2011/09/15(木) 22:47:00.74一例として
X = {1,2,3}
Y = {2,4}
mt = {__add = function (op1,op2)
local t = {}
local s = {}
for i,v in ipairs(op1) do
table.insert(t,v)
s[v] = true
end
for i,v in ipairs(op2) do
if not s[v] then
table.insert(t,v)
end
end
return setmetatable(t,getmetatable(op1))
end}
setmetatable(X,mt)
setmetatable(Y,mt)
print(unpack(X+Y))
print(unpack(Y+X))
0716デフォルトの名無しさん
2011/09/15(木) 23:17:55.02普通だったら
X + Y => {1,3,2,4}, Y + X => {4,1,2,3}
もしくは
X + Y => {1,2,3,4}, Y + X => {2,4,1,3}
ってすると思うんだけど、
なんで
X + Y => {1,3,2,4}, Y + X => {2,4,1,3}
になるの?
ただの誤記なら>715でいいけど
0717デフォルトの名無しさん
2011/09/16(金) 14:48:55.75可能なはずでは?無理ならCやアセンブリコードへ変換して
手作業で最適化すればいいと思う。
>>704
言語の速度に文句を言う前にプロファイラ使って
遅い部分を見つけて最適化しては?マシン買い換えるのも手。
0718デフォルトの名無しさん
2011/09/16(金) 16:42:46.02たぶんプログラマに向いてない。
0719684
2011/09/16(金) 20:41:28.97X = X + Y なら代入されるのは X なので重複される値を
X から消して Y を後ろから足すという風にしたかったのです。
X = Y + X でも同様に X に代入されるので
重複される値を X から消してから Y を前から足す、といった形です。
代入されるのを Y に変えれば
Y = X + Y → Y = {1,2,3,4} Y = Y + X → Y = {4,1,2,3}
と言う風に計算したかったのですが、自分で書いてて気づきましたが、
どちらのoperandのmetatableが呼ばれたかを判定するだけじゃなくて
代入先の変数が何かも判定しないといけないから無理っぽいですね…。
すみません。お騒がせしました。
0720デフォルトの名無しさん
2011/09/16(金) 20:52:46.08まあLua 遅くて不満なら、Cコードの吐ける Euphoria 4.0.3 でも使えば?
LL言語の癖に嫌でも低級メモリ操作とC言語と向き合わなくては Win32 API すら
叩けないから脱童貞にはいいんじゃない? 必要ならスレ立てておいで。
0721デフォルトの名無しさん
2011/09/16(金) 21:22:33.940722デフォルトの名無しさん
2011/09/16(金) 22:20:28.280723デフォルトの名無しさん
2011/09/16(金) 22:54:08.67X+Yの場合 {1,2,3}+{2,4} -> {1,2,3}+{4} -> {1,2,3,4}
Y+Xの場合 {2,4}+{1,2,3} -> {4}+{1,2,3} -> {4,1,2,3}
という事なら
X = unq.new({1,2,3})
Y = unq.new({2,4})
function unq.concat(op1,op2,[,base])...end
というような関数で操作した方がいいんじゃない?
メタメソッドでやるとすると
どちらを基準とするのかという情報をX,Yに埋め込んだり
他から参照したりする必要があるから汚くなる
0724684
2011/09/17(土) 16:33:14.72確かにクラスやメソッドでやったほうがいいですね…。
テーブルをテーブルのままに処理を加えられるメタテーブルっていいなと思いましたが、
制限多すぎるのでやっぱりやめておきます。
0725デフォルトの名無しさん
2011/09/26(月) 18:31:24.78http://www.gamedev.net/topic/611415-angelscript-2212-released/
0726デフォルトの名無しさん
2011/09/26(月) 18:48:04.05ヒープではなくスタックに確保するようにして高速化
・64bit LinuxとMac OS Xでnative calling conventionsに対応するための変更
3次元ベクトルのようなPODの構造体ではコピーコンストラクタやデストラクタが実装されず、
この機能がうまく働かないことがあるらしい
全てのメンバーがint,float,doubleの場合、asOBJ_APP_CLASS_ALLINTSやasOBJ_APP_CLASS_ALLFLOATSのフラグをつけることで解決した
全ての組み合わせをカバーできるわけではないが、ほとんどのものはこれでカバーできる
・サンプルゲーム
・クラスメンバーにもメタデータを付けられる
ABIってなんだろ?64bit LinuxとMac OS XのABIは複雑で、
メンバーの型によっては違うレジスタに渡される事があると書いてあるが
0727デフォルトの名無しさん
2011/09/26(月) 19:20:42.04ABIという言葉にはもっと他のものも含まれるけども
0728デフォルトの名無しさん
2011/09/26(月) 23:00:45.100729デフォルトの名無しさん
2011/09/27(火) 08:14:54.52なんだかグダグダだな
0730デフォルトの名無しさん
2011/09/27(火) 08:20:21.82/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0731デフォルトの名無しさん
2011/09/27(火) 09:09:08.59というわけで性能を稼ごうとレジスタ渡しを頑張ると規則が複雑怪奇になる。というトレードオフ。
0732デフォルトの名無しさん
2011/09/27(火) 09:40:13.82クロスコンパイルと同じで
ターゲットごとに処理を振り分けりゃいいだけなんらからw
0733デフォルトの名無しさん
2011/09/28(水) 01:10:06.200734デフォルトの名無しさん
2011/09/28(水) 07:07:59.80( ・∀・) < Lua!!
⊂/ 9) \____
q( /
> >
0735デフォルトの名無しさん
2011/09/29(木) 00:27:13.650736デフォルトの名無しさん
2011/09/29(木) 07:29:47.360737デフォルトの名無しさん
2011/09/30(金) 22:57:03.23ファイルを読み込みをライブラリに頼らず
自分でやればいいだけ
0738デフォルトの名無しさん
2011/10/01(土) 00:50:39.290739デフォルトの名無しさん
2011/10/01(土) 01:07:11.130740デフォルトの名無しさん
2011/10/01(土) 02:37:23.52それ最初に出とるわw
0741デフォルトの名無しさん
2011/10/01(土) 02:41:46.32他の言語の同じようにvm内(とファイルエンコーディング)はutf8でやって
変換かませてたわ。
0742デフォルトの名無しさん
2011/10/01(土) 08:33:44.980743デフォルトの名無しさん
2011/10/01(土) 08:41:17.42他にも何か理由あるのかな
0744デフォルトの名無しさん
2011/10/01(土) 08:53:42.520745デフォルトの名無しさん
2011/10/01(土) 12:36:38.69もっと単純に小さくて速い組み込みやすいスクリプト言語で、
開発者がよく知っている言語をゲーム内のスクリプトに使いたかっただけじゃないの
ゲームとは関係ないが、unix系ツールの組込みスクリプトが
lua,python,tclあたりでデファクト争ってて、ただのユーザーとしては面倒きわまりない
0746デフォルトの名無しさん
2011/10/01(土) 13:27:05.52ゲームは特に速度気にする傾向が強いような気がする。
0747デフォルトの名無しさん
2011/10/01(土) 15:15:08.080748デフォルトの名無しさん
2011/10/01(土) 22:32:28.93例えば
static luaL_Reg l_foo);[] = {
{ "bar", lua_bar },
{ NULL, NULL }
};
luaL_register(L, "foo", l_foo);
で設定した後にC側で
foo.varに3を設定し
Lua側で
a = foo.var
などのように利用したいのですが
0749デフォルトの名無しさん
2011/10/02(日) 00:01:23.77lua_setfield(L, -2, "bar");
lua_pop(L,1);
luaL_dostring(L,"foo.bar=3");
lua_pop(L,1);
luabind::globals(L)["foo"]["bar"] = 3;
lua_pop(L,1);
0750デフォルトの名無しさん
2011/10/02(日) 00:06:59.72barの部分をvarに読み替えてちょーだい
0751デフォルトの名無しさん
2011/10/02(日) 02:14:44.52ユーザー(ゲームだから、プレイヤーか)も速度を求める人が多いからね
そりゃ開発側も速度に気を使うだろうと思うよ
0752デフォルトの名無しさん
2011/10/02(日) 11:35:03.09lua_getglobal(L, "foo");
lua_pushinteger(L, g_"3");
lua_setfield(L, -2, "var");
lua_pop(L,1);
これで登録できました
モジュール名でテーブルが作成され、そこにモジュール内部の関数等が登録されるのですね
0753デフォルトの名無しさん
2011/10/02(日) 11:52:41.94ちょっとゴミが残ってた、正しくは以下です
lua_getglobal(L, "foo");
lua_pushinteger(L, "3");
lua_setfield(L, -2, "var");
lua_pop(L,1);
0754デフォルトの名無しさん
2011/10/02(日) 14:31:39.30日本語よめる?
0755デフォルトの名無しさん
2011/10/06(木) 00:51:42.500756デフォルトの名無しさん
2011/10/06(木) 21:04:40.100757デフォルトの名無しさん
2011/10/06(木) 23:59:45.350758デフォルトの名無しさん
2011/10/07(金) 02:21:46.970759デフォルトの名無しさん
2011/10/07(金) 05:39:15.60(´・ω・) いやどす
ハ∨/^ヽ
ノ::[三ノ :.、
i)、_;|*く; ノ
|!: ::.".T~
ハ、___|
"""~""""""~"""~"""~"
0760デフォルトの名無しさん
2011/10/08(土) 13:47:41.250761デフォルトの名無しさん
2011/10/08(土) 14:28:58.23英語が母国語の国の幼稚園児でも意味が分かる。これがLuaのいいところ。
if (〜) {〜}
これを幼稚園児が理解することはおそらくない。
なのに後者がいいという奴は、単に自分が好きな言葉で書かせろって
わがままいってるだけ。つまり、ぴゅーた日本語ベーシックを作った奴と同じ発想。
0762デフォルトの名無しさん
2011/10/08(土) 14:39:18.330763デフォルトの名無しさん
2011/10/08(土) 14:58:29.15>>761
>>761
0764デフォルトの名無しさん
2011/10/08(土) 16:34:14.65高速な動作,ポータビリティ,拡張の容易さなどを
重視して設計されたコンパクトな汎用スクリプト言語.
今月の TIOBE Programming Community Index では
Ruby の一つ下の12位にランキングされている*1.
これは,iPhone アプリの開発者による利用が増えている
というのが大きい*2と思うが,プログラム言語の設計者た
ちへのインタビューを纏めた Masterminds of Programming
(邦訳: 言語設計者たちが考えること)に Lua の設計者の
インタビューが取り上げられたり,その設計者の一人
Roberto Ierusalimschy による Programming in Lua や
入門書(入門Luaプログラミング)など日本語の書籍も出版さ
れたりしているので,ここ数年で日本でも認知/普及が進ん
でいるのは間違いなさそうだ.
0765デフォルトの名無しさん
2011/10/08(土) 18:15:09.600766デフォルトの名無しさん
2011/10/08(土) 19:38:04.68if〜then〜endだとVBのようにゴチャッとした印象になるし、タイプミスが発生する可能性も高くなる。
分かりやすいことが必ずしも優れているとは限らないしな。
それにスクリプトを使うのは幼稚園児ではないのだし。
0767デフォルトの名無しさん
2011/10/08(土) 19:40:30.240768デフォルトの名無しさん
2011/10/08(土) 20:48:23.03■ このスレッドは過去ログ倉庫に格納されています