【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
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.030769デフォルトの名無しさん
2011/10/08(土) 21:22:57.77記述的にももう少しスマートにして欲しいと考えるのはある種当然の成り行きとも言えるなぁ
Luaの記述は分かりやすい!Lua最高!な人ほどむしろ別のスクリプト言語選ぶべきと思う
0770デフォルトの名無しさん
2011/10/08(土) 21:43:55.160771デフォルトの名無しさん
2011/10/08(土) 21:47:07.000772デフォルトの名無しさん
2011/10/08(土) 22:45:26.860773デフォルトの名無しさん
2011/10/08(土) 23:03:19.840774デフォルトの名無しさん
2011/10/09(日) 00:28:45.10AppleScript書きまくってから言えー
0775デフォルトの名無しさん
2011/10/09(日) 00:32:47.05何かと思ってググってみたが、日本語で記述できるんだな…
0776デフォルトの名無しさん
2011/10/09(日) 01:33:22.070777デフォルトの名無しさん
2011/10/09(日) 07:14:00.57/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0778デフォルトの名無しさん
2011/10/09(日) 07:56:02.970779デフォルトの名無しさん
2011/10/09(日) 13:37:17.000780デフォルトの名無しさん
2011/10/09(日) 13:39:55.980781デフォルトの名無しさん
2011/10/11(火) 12:03:55.72ぐぐるの Javascript 狙いうち?な新言語
やっぱみんなクラス欲しいのなw
0782デフォルトの名無しさん
2011/10/11(火) 12:17:54.43アーカイバ作ってて、拡張子のテーブルにコマンド入れといてos.executeとか
local FileExtTable={lua={SrcExt="lua",DstExt="lbc",Cmd="luajit.exe -b $FileName.$SrcExt $FileName.$DstExt"},...}
テーブルとstring.gsub "%$(%w+)"が便利でにやけちゃう
0783デフォルトの名無しさん
2011/10/13(木) 12:46:17.22\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
0784デフォルトの名無しさん
2011/10/17(月) 23:00:09.22- Implemented the shared class feature
- Fixed bug in CSerializer add-on
他のモジュールで書いたクラスも使えるようになったということか
0785デフォルトの名無しさん
2011/10/18(火) 05:29:04.41〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
0786デフォルトの名無しさん
2011/10/18(火) 08:34:48.450787デフォルトの名無しさん
2011/10/18(火) 11:03:06.070788デフォルトの名無しさん
2011/10/20(木) 00:19:11.36同意してしまう。
Dijkstraのところなんて、あれは糞だ。
0789デフォルトの名無しさん
2011/10/20(木) 00:42:29.26同意w ある程度囓ってから本買いにいったお蔭で変なの掴まないですんだわw
0790デフォルトの名無しさん
2011/10/20(木) 08:46:09.200791デフォルトの名無しさん
2011/10/20(木) 14:19:01.46それ、いいとは思うが日本国内に置いてあっても発展は望めないような。
ドキュメントなどを英訳して海外に出したほうがいいような。
0792デフォルトの名無しさん
2011/10/20(木) 19:18:24.98海外の人達はそれだけ、物好きで技術高い人が多いってこと?
0793デフォルトの名無しさん
2011/10/20(木) 19:25:01.55人が多いってこと
かと。
0794デフォルトの名無しさん
2011/10/20(木) 19:36:57.730795デフォルトの名無しさん
2011/10/20(木) 22:09:02.340796デフォルトの名無しさん
2011/10/23(日) 02:10:32.05英語かー。読むのも満足にできないしなあ。
知り合いに、使ってもらうための努力もしろとは言われたけれど。
いざ完成すると大したもの作った気がしなくて、宣伝なんて恥をかくだけじゃ?って思ってしまうのは、日本人だからか。
0797デフォルトの名無しさん
2011/10/23(日) 22:21:36.38むしろ反響が全く無いほうが萎える
0798デフォルトの名無しさん
2011/10/23(日) 22:31:22.49> いざ完成すると大したもの作った気がしなくて、宣伝なんて恥をかくだけじゃ?って思ってしまうのは、日本人だからか。
現時点で
個人サイトに公開し2chに貼り付けて宣伝してると思うw
0799デフォルトの名無しさん
2011/10/23(日) 22:51:09.29だよね。レスもらえるだけでうれしいもの。
励まされたよ。ありがと。
>>798
その通りw
自己顕示欲とのせめぎあいだわ。
苦労した分だけ、けなされるのが怖い。
0800デフォルトの名無しさん
2011/10/25(火) 01:02:09.68配列が1から始まるとかnilとfalse以外は0でも真扱いされる部分とかは賛否両論ありそうだけど
0801デフォルトの名無しさん
2011/10/25(火) 01:12:50.150802デフォルトの名無しさん
2011/10/25(火) 01:16:47.411オリジンはBASIC出身だから「おっ、久し振りだな1オリジン」ってしか思わなかったし
nilとfalse以外真ってのもRubyは私用でよく使うから「Rubyと同じだな」としか思わなかったな
配列を連想配列で擬似的に実現してるってのも何かの言語でやったような…
0803デフォルトの名無しさん
2011/10/25(火) 01:52:29.18流行ってしまったな
0804デフォルトの名無しさん
2011/10/25(火) 02:18:40.48breakはあるのにcontinueが無いのはなぜ?と2日前に思ったよ
■ このスレッドは過去ログ倉庫に格納されています