【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
0253デフォルトの名無しさん
2011/06/13(月) 07:08:32.27LuaもSquirrelも数千行の短いプログラムでできてんだろ?
なら俺達でも作れるんじゃね?
0254デフォルトの名無しさん
2011/06/13(月) 07:24:09.210255デフォルトの名無しさん
2011/06/13(月) 07:25:55.860256見習い中
2011/06/13(月) 12:15:07.57数値はDouble型。型指定は基本的にできない。ポインタ型を32ビット変数として使う方法がある。
Doubleのせいで計算速度が遅くなるだけでなく、キャストで化けることあり。
SciTEの読みはサイト(らしい)。ゼロの使い魔か?
エラーの際のlua_atpanicにはお世話になりそう。
日本語未対応。対応バージョンもなくもない。
C言語と相互運用が可能だが、なんかしょっぱなからめんどくさい。
Lua側はシンプルなので、間違ってはいないのかも。
squirrel との比較
クラスがなく、冗長な記述になる。
C++との親和性が低い
continue がない。やっぱり必要?
ビット演算 が弱い。あれ?ライブラリは・・
>>214
> Squirrelの前にはLuaとかもあって、海外とかだとわりと積極的に使われていたのではないでしょうか。
> 汎用的なものと組み込み言語というのはメジャーになってきた、というような雰囲気ですね。
>
> Squirrelの場合、クラスベースの考え方が通用する分、僕はやさしいなと感じます。
> Luaとかはわりとかけ離れているというか、かけ離れているとまでは言わないですが、単純に見た目としての問題って言うんですかね、
> ある程度プログラミングのたしなみのある人が見えればやってることは理解できるんですけども、
> ほんとにSquirrelの方が分かりやすいなっていう感じがします。
> PythonやRubyも文法とか文化が違う感じが若干しますね。
なるほど
0257デフォルトの名無しさん
2011/06/13(月) 14:14:43.26( ・∀・) < Lua!!
⊂/ 9) \____
q( /
> >
0258デフォルトの名無しさん
2011/06/13(月) 16:59:30.650259デフォルトの名無しさん
2011/06/13(月) 18:18:08.350260デフォルトの名無しさん
2011/06/13(月) 22:31:47.51http://bitop.luajit.org/
PerlのMoose(Coat)ぽいOOなら、lua-Coatで
http://lua-coat.luaforge.net/
lua-Coatは、MOP使ってて重いので
LuaJIT使える環境ならそっちがいいかも
0261デフォルトの名無しさん
2011/06/13(月) 22:48:06.58>数値はDouble型。型指定は基本的にできない。ポインタ型を32ビット変数として使う方法がある。
数値型はdouble以外にも割り当てられなかったっけ?
>Doubleのせいで計算速度が遅くなるだけでなく
そもそも計算速度が問題になるほど大量の四則演算を行う処理を
luaで書くの?そういう所はアルゴリズムを固定小数点化やSSEで
対応等するべきであってスクリプト言語でどうこうする所じゃないような。
0262デフォルトの名無しさん
2011/06/13(月) 23:02:15.51下手にテーブル引いてキャッシュミスしてもたもたするより速い。
0263デフォルトの名無しさん
2011/06/13(月) 23:02:38.60http://www.lua.org/source/5.1/luaconf.h.html#LUA_NUMBER
@@ LUA_NUMBER is the type of numbers in Lua.
0264デフォルトの名無しさん
2011/06/13(月) 23:12:55.06http://attractivechaos.github.com/plb/
これ以上速度求めるなら、逆に型推論がある静的型評価の言語を組み込んだ方がいいかも?
0265デフォルトの名無しさん
2011/06/13(月) 23:23:38.600266デフォルトの名無しさん
2011/06/13(月) 23:32:15.380267デフォルトの名無しさん
2011/06/14(火) 09:11:12.44\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
0268デフォルトの名無しさん
2011/06/14(火) 22:38:55.380269デフォルトの名無しさん
2011/06/15(水) 07:51:02.77┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
0270見習い中
2011/06/15(水) 10:38:14.65だから日本語扱えないのと整数値型がそろってないのはかなり痛い。
Luaも日本語化パッチがあったりするけど・・・
ビット演算があったりするけど・・・
セットアップがめんどくさいと配布がしにくいし
squirrel もいいなと思ったけどC++解説サイト見たら「なんか出来そうだな」と思ってみたり。
そうするとAngelScriptってC++にかなり近いから無駄にならないかも?
AngelScriptってGNUでソース配布?まさかプロジェクト全部に感染?
squirrel で日本語
ttp://monsho.blog63.fc2.com/blog-entry-49.html
squirrel はASCIIなので、日本語対応はUNICODE宣言が必要。
#define _UNICODE
それだけではwprintf() や vwprintf() で文字化けするので、ロケールを指定する。2007/05/19(土)
setlocale( LC_ALL, "Japanese" ); // 日本語にする
setlocale( LC_ALL, "" ); // 環境に合わせる
@__john_ 悟
Luaはダメだ。 AngelScriptを試してみよう… これでダメだったら、機能を絞るしかないわな…
4月30日 webから
@__john_ 悟
AngelScriptではとりあえず実装可能っぽいけど… 呼び出しコストとかどうなんだろ? GC処理がLuaより管理しやすい分早いかな?
試すしかないかなぁ… はぁ… 資料少ないなぁ。
5月1日 webから
0271デフォルトの名無しさん
2011/06/15(水) 12:22:38.060272デフォルトの名無しさん
2011/06/15(水) 14:43:23.05':' ゙''" `':,
ミ ・ω・ ;,
:; . っ Lua!, つ
`:; ,;'
`( /'"`∪
0273デフォルトの名無しさん
2011/06/15(水) 22:32:32.50有志のShiftJIS版も一応ある。
ただし、UTF16には対応してないので注意。
0274デフォルトの名無しさん
2011/06/15(水) 23:02:22.61第一引数がテーブル自身で第二引数以降が呼び出しの時の引数だけど、
テーブル(引数)だけじゃなくてテーブル.メソッド(引数)で呼び出したときにも使えるようにならないものか…。
メソッドまでメタテーブル指定するのは面倒くさい。
0275デフォルトの名無しさん
2011/06/16(木) 00:34:27.570276デフォルトの名無しさん
2011/06/16(木) 07:04:19.72だと勘違いしてプログラミングしてたからメソッド名が無いって気づいてげんなりして
メソッド名なかったから、使い道あるのかなこれと思って。
0277デフォルトの名無しさん
2011/06/16(木) 10:41:59.96関数がファーストクラスでクロージャやコルーチンがあるLuaの範囲じゃ
確かに使いどころが思いつかない
0278デフォルトの名無しさん
2011/06/16(木) 11:24:53.98/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0279デフォルトの名無しさん
2011/06/16(木) 19:21:04.600280デフォルトの名無しさん
2011/06/18(土) 19:37:04.89他の言語みたいにこういう関数や記法でやれって堅苦しく決まってる奴は面倒くさくてもしぶしぶ従うけど、
標準モジュールが何もないLuaだとテーブル操作も関数にしようか、メタテーブルにしようか、
変数名はどうしようか、クラスは使うか使わないかとかそんなことばかり考えて
修正ばかりで全然先進まない…orz
自分の開発設計技術が無さ過ぎるのが問題っていうのはわかってるけど。
0281デフォルトの名無しさん
2011/06/18(土) 21:49:44.42http://www.hakkaku.net/articles/20081118-286
> このように、Lua のオブジェクト指向は、その実現方法が様々です。
> Lua のユーザーズ Wiki を確認すると、オブジェクト指向の実現方法がいくつか列挙されています。
> 好きな方法を利用してオブジェクト指向を実践すると良いでしょう。
重いしC++と互換性がないけどLua-CoatかわいいよLua-Coat
http://perldoc.perlassociation.org/pod/Moose-Doc-JA/index.html
ManualとCookbook
0282デフォルトの名無しさん
2011/06/19(日) 00:15:39.15と考えると結局どう見てもユーザーデータ用としか思えない
0283デフォルトの名無しさん
2011/06/19(日) 09:35:43.66/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0284デフォルトの名無しさん
2011/06/19(日) 10:16:53.06継承されて整合性が破壊されないかとかメソッドをnilにされたらどうしようとか気になってしょうがない
0285デフォルトの名無しさん
2011/06/19(日) 10:39:13.08そういうもの作るんならprivateも必要になるんだろうけど。
その上に乗っかりそれの動作をカスタマイズ(設定orコールバックで)
するための言語だと思う。
0286デフォルトの名無しさん
2011/06/19(日) 11:51:17.360287デフォルトの名無しさん
2011/06/19(日) 15:46:01.400288デフォルトの名無しさん
2011/06/19(日) 17:46:32.65オブジェクトのメンバ関数のようにLuaコードを呼びたい時とかに重宝しそう
0289デフォルトの名無しさん
2011/06/19(日) 17:56:47.42その他のは・・・・
自分の得意な言語に似せようとするだけのオナニー型といわざるをえない。
0290デフォルトの名無しさん
2011/06/19(日) 19:47:59.72単一代入の組み込み言語が欲しくなってきた。
そのほうがデバッグもしやすいし。
0291デフォルトの名無しさん
2011/06/19(日) 21:26:55.87泡沫のようにオナニー言語が生まれては消えてゆくのであった
ああ無常・・・
0292デフォルトの名無しさん
2011/06/19(日) 22:46:25.86リテラルがあっちゃデバッグしづらくてしょうがねぇよ。普通エラーでしょ。
0293デフォルトの名無しさん
2011/06/19(日) 22:56:42.490294デフォルトの名無しさん
2011/06/19(日) 23:04:31.440295デフォルトの名無しさん
2011/06/20(月) 00:50:07.12それってどうやるの?
0296デフォルトの名無しさん
2011/06/20(月) 01:32:54.160297デフォルトの名無しさん
2011/06/20(月) 09:20:51.28〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
0298デフォルトの名無しさん
2011/06/20(月) 16:33:43.20いちいちWideCharToMultiByteをラップしたのを経由してユーザー変数に入るとか
しないといけないのはメンドイ。
0299デフォルトの名無しさん
2011/06/20(月) 16:36:29.38[[文字列]]
と書けばSJISリテラルも使えるのか。
ごめん
0300デフォルトの名無しさん
2011/06/20(月) 17:52:46.75getfieldでアクセスできる要素がnilを含めて存在するオブジェクト
であるかどうかを調べるスマートな方法はある?
再帰的にテーブルかどうか、__indexを持ってるかどうかを繰り返し調べるしかないかな
0301デフォルトの名無しさん
2011/06/20(月) 17:58:27.94その方がスマートな解答がでそう
0302デフォルトの名無しさん
2011/06/20(月) 21:41:56.73メソッド作らないとipairsとかでテーブルの中身が呼び出されないことに気がついた。
何この使えん言語。
0303デフォルトの名無しさん
2011/06/20(月) 21:53:14.110304デフォルトの名無しさん
2011/06/20(月) 23:24:50.41ありがとう。
古いバージョン使ってるから、そういうのあるの知らなかった。
0305デフォルトの名無しさん
2011/06/21(火) 06:05:04.30エスパーするとpcall
>>302
内包したんでしょ?
言語の問題ではない
0306デフォルトの名無しさん
2011/06/21(火) 08:11:00.31( ・∀・) < Lua!!
⊂/ 9) \____
q( /
> >
0307デフォルトの名無しさん
2011/06/21(火) 10:46:26.14lua_State *p2 = lua_open();
p1のスタックからテーブルを取り出してp2のスタックに積むにはどうすれば?
数値や文字列は一回Cを経由すればできるんだけどテーブルは…
0308デフォルトの名無しさん
2011/06/21(火) 11:13:13.10フィールドが数値型や文字列型なら列挙していけば良いだろうけど
関数型あたりは無理だよね
そもそもlua_Stateを分離する必要があるのかってところから見直した方が良いんじゃない?
スクリプト毎にサンドボックス作りたいってだけならそれぞれ独自の環境を割り当てて
共有したいLuaオブジェクトはグローバル環境やレジストリに押し込めるってので過不足ないと思うけど
0309デフォルトの名無しさん
2011/06/21(火) 12:28:40.23数値や文字列でもLuaの値はメタテーブルを持てるので
Lua側のデータを共有したいなら
lua_State *p = lua_open();
lua_State *p1 = lua_newthread(p);
lua_State *p2 = lua_newthread(p);
でやるしかないよ
0311デフォルトの名無しさん
2011/06/21(火) 18:47:24.32loadstring()がグローバル変数見に行くんで詰んだ経験ががが。
0312デフォルトの名無しさん
2011/06/21(火) 20:02:15.490313デフォルトの名無しさん
2011/06/21(火) 20:10:25.76かつスクリプト間でLuaオブジェクトのやり取りが必要無いって状況くらしか思いつかないな
0314デフォルトの名無しさん
2011/06/21(火) 20:52:19.740315デフォルトの名無しさん
2011/06/21(火) 21:59:27.82ゲーム作る時に、敵1匹ごとに仮想マシン1個って感じでやるときかなぁ…
Luaだとそういう場合どうするんだろう。
0316デフォルトの名無しさん
2011/06/21(火) 22:20:12.070317デフォルトの名無しさん
2011/06/21(火) 22:53:31.640318デフォルトの名無しさん
2011/06/21(火) 23:06:15.770319デフォルトの名無しさん
2011/06/22(水) 01:10:29.57さすがにオーバーキル過ぎるだろ。
ロボットの並列制御やってるんじゃないんだから。
0320デフォルトの名無しさん
2011/06/22(水) 01:51:00.20なんか違和感がある
lua_Stateは複数作れるからシングルトンじゃないと思うけど
どういう意味でシングルトンと言ってるの?
0321デフォルトの名無しさん
2011/06/22(水) 07:31:24.17使い方間違ってるんじゃない?
lua_newthreadはコルーチンなので
問題の起きようがないと思うのだが。
0322デフォルトの名無しさん
2011/06/22(水) 07:36:23.92いくつかの動的確保とopenlibsやゲームAPIなどの各種初期化、解放時にはガベコレ
生成破棄が多いゲームでオブジェクトと1対1はどうかとおもう
lua_Stateは共有して環境テーブルをオブジェクトにもたせるのがいいと思うよ
0323デフォルトの名無しさん
2011/06/22(水) 09:37:58.694人格闘ゲーのCPUとかかもよ
0324デフォルトの名無しさん
2011/06/22(水) 11:08:27.41loadedとかいろいろあるけど全部自前でやらんとだめなのかな
0325デフォルトの名無しさん
2011/06/22(水) 12:19:05.47異論は認めるが自前の意見がないなら異論もなにもない
0326デフォルトの名無しさん
2011/06/22(水) 12:24:12.50hogeというモジュールなら
LUALIB_API int luaopen_hoge(luaState *L) {...}
という形で提供するのがお約束なので
単純にluaopen_hoge(L);すればいいよ
プリプロセスでLUALIB_APIがどのように置き換わるかは
ご自分で確認しましょう
0327デフォルトの名無しさん
2011/06/22(水) 12:52:33.09>require calls the loader with a single argument, modname.
とあるから
lua_pushcfunction lua_pushstring lua_pcallするべき
0328デフォルトの名無しさん
2011/06/22(水) 13:22:22.730329デフォルトの名無しさん
2011/06/23(木) 07:47:19.78\ ヽ ) ) \\ \\
( \ \∩___∩ \\
\ \ ⌒⌒| ノ ヽ \\
\ \ / ● ● ト、\ \\\
\ Y | ( _●_) ミ\ \\\
\ / 彡、_ |∪| ノ \ \\\
(____)―ヽノ' ヽ  ̄ ̄ ヽ\\
\, j l l .l }
Lua! l (_ノノノノ
0330デフォルトの名無しさん
2011/06/25(土) 08:39:57.670331デフォルトの名無しさん
2011/06/25(土) 08:51:11.14このスレより関数型言語スレの話題だと思うけど、
fact(x) = ... fact(x - 1) ...
みたいな感じで、再帰がある関数は、自分自身の定義の中に自分自身を使うわけだよね?
で、数学的に厳密な「定義」が必要な場合とか、循環定義は困るので、
fact_norec(f)(x) = ... f(x - 1) ...
みたいにして、
Y(fun) = fun(Y(fun))
(↑この定義ではここで循環定義を使っちゃってるけど、λ計算という理論では
循環定義のないものを定義できる。)
という「Yコンビネータ」を使って、
fact(x) = Y(fact_norec)
みたいに定義できる、という仕掛け。
0332デフォルトの名無しさん
2011/06/25(土) 08:52:46.54http://ja.wikipedia.org/wiki/%E4%B8%8D%E5%8B%95%E7%82%B9%E3%82%B3%E3%83%B3%E3%83%93%E3%83%8D%E3%83%BC%E3%82%BF
0333デフォルトの名無しさん
2011/06/25(土) 15:41:33.28まだ無いものは使えない、既に有るものは使える、でいいんだが
数学厨は (宗教的な理由で) 時間の概念を認めないんだよね
0334デフォルトの名無しさん
2011/06/25(土) 19:29:39.23認めるも認めないも無いだろ。
0335デフォルトの名無しさん
2011/06/25(土) 21:57:57.69どうもありがとう
なんだかよくわからなかった
0336デフォルトの名無しさん
2011/06/25(土) 23:13:16.65何がどう見えているのかよく分からない。
0337デフォルトの名無しさん
2011/06/26(日) 01:10:15.690338デフォルトの名無しさん
2011/06/26(日) 01:32:57.000339デフォルトの名無しさん
2011/06/26(日) 13:08:39.45Object1にindex,newindex,addなど複数のメタテーブルをセットして
Object2はObject1を継承してさらに複数のメタテーブルをセットしたいのですが、
setmetatableやオブジェクトをオーバーライドなど色々やってみましたが、
Object2はセットしたメタテーブルしか呼び出せません。
どうすればObject1も継承できるでしょうか?
0340デフォルトの名無しさん
2011/06/26(日) 13:31:25.50local b_ = base
local t_ = {}
setmetatable(t_ , { __index = base } )
local o_ = {}
setmetatable(o_, { __index = setmetatable() } )
0341デフォルトの名無しさん
2011/06/26(日) 13:34:24.14例えば__indexだけだったら↓みたいな感じでいいとおもう
new_hoge = function(base)
local o_ = {}
setmetatable(o_, { __index = setmetatable({ }, { __index = base }) } )
return o_
end
0342デフォルトの名無しさん
2011/06/26(日) 14:31:31.14メタテーブルを入れ子にすればいいだけじゃない?
mt = { oldmt = getmetatable(Object1) or {} }
for k,_ in pairs(mt.oldmt) do
mt[k] = mt.oldmt[k]
end
setmetatable(Object1,mt)
破棄するなら
mt.__index = function(self,k) ... end
super呼ぶなら
mt.index = function(self,k)
...
return mt.oldmt.__index and mt.oldmt.__index(self,k) or nil
end
とかで適当に上書き
0343デフォルトの名無しさん
2011/06/26(日) 14:34:23.120344デフォルトの名無しさん
2011/06/26(日) 14:38:06.18debug.getmetatableやC関数を介せばいけるけど普通はやらない
0345デフォルトの名無しさん
2011/06/26(日) 15:58:37.11テーブルの値にメタテーブルを指定すればいいんですね。
メタテーブルのことあまり理解していませんでした。
ありがとうございます。
0346デフォルトの名無しさん
2011/06/27(月) 07:54:43.92/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0347デフォルトの名無しさん
2011/06/27(月) 20:30:12.75local x = 0
local get = function()
return x
end
local inc = function()
x = x + 1
end
return { get = get, inc = inc }
end
obj = create()
obj.inc()
print(obj.get())
こういうふうに書いたほうが安全でよくね?
なんでみんな本やWebで推奨されてる方法を使うのか解らない
0348デフォルトの名無しさん
2011/06/27(月) 22:11:58.910349デフォルトの名無しさん
2011/06/27(月) 22:31:54.81それだと、インスタンスごとに関数を作ることになる
0350デフォルトの名無しさん
2011/06/27(月) 22:33:46.95どの方法が普及するかは自然の成り行きに任せればいいんじゃないの
0351デフォルトの名無しさん
2011/06/27(月) 22:58:35.96_this.Hoge();
とかできる
0352デフォルトの名無しさん
2011/06/28(火) 00:06:51.29■ このスレッドは過去ログ倉庫に格納されています