トップページtech
981コメント297KB

【Lua】組み込み系言語総合 その4【Squirrel】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/03/30(水) 01:00:58.93
LuaやSquirrelやAngelScriptなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです
まとめ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
0097デフォルトの名無しさん2011/05/01(日) 12:31:36.26
Luaでエラーが発生したり、
coroutine.yield したりしてスクリプトが中断状態にあるときに、
その時点で実行中のスクリプトファイル名(または関数名)と行番号
を得るにはどうすればいいんですか?
0098デフォルトの名無しさん2011/05/01(日) 12:38:54.26
>>97
lua_Debug
0099デフォルトの名無しさん2011/05/01(日) 22:19:09.86
>>92
返信遅くなって申し訳ないです。
参考になりました。ありがとうございました。
0100デフォルトの名無しさん2011/05/01(日) 23:16:56.19
>>96
露骨にAndroidを狙ってくる・・・いやらしい・・・
ん?スマフォはARMv5TEとv7か
0101デフォルトの名無しさん2011/05/01(日) 23:52:10.31
LuaJITのCPU移植は、スポンサー(=商業的に有益な会社)がいたらやるスタンスなので、
今回も、スマートフォン的に中途半端なので、組み込み目的だと思う。

QUALCOMM Inc. has sponsored an ARM port of LuaJIT 2.0 in January 2011.
http://luajit.org/sponsors.html
0102デフォルトの名無しさん2011/05/01(日) 23:55:46.89
汎用性の全くないPPC e500v2への移植と違って、今回は、Androidでも動くから有難いけどね。
0103デフォルトの名無しさん2011/05/02(月) 00:06:56.38
まだJIT無しなのか。
JIT無しで、x1-4
JIT付けると算術系などさらに一部が、x4-16
http://luajit.org/performance_arm.html
0104デフォルトの名無しさん2011/05/02(月) 03:21:20.06
wxlua、更新されへんねー。
http://wxlua.sourceforge.net/
0105デフォルトの名無しさん2011/05/05(木) 12:22:52.16
AngelScriptで、スクリプト側で #define が使えるようにしたいんだけど、
手軽に組み込めるCプリプロセッサある?
それともScriptBuilderアドオンを改造するほうが楽?
0106デフォルトの名無しさん2011/05/05(木) 22:30:17.67
boost使っていい環境なら、boost::wave使うのもいいかも。
#include使った時にエラーの場所がきちっと出せないって難点があるけど。
0107デフォルトの名無しさん2011/05/06(金) 21:26:46.31
LuaとC/C++の連携ってbindツール使うのが一般的なのですか
スタックガリガリやるとか自分でツールつくっちゃうとかでも行けちゃうような気がするのですが
初心者の僕にアドバイスください
0108デフォルトの名無しさん2011/05/06(金) 21:29:12.13
車輪の再発明でググってください
0109デフォルトの名無しさん2011/05/06(金) 22:52:00.09
手動で2〜3個クラス登録してみればなぜツールが必要かは理解できるかと思います。
あとは自分で作るか、誰か作ったのを使うか、の話でしかないです
0110デフォルトの名無しさん2011/05/06(金) 23:07:10.26
どうぞどうぞ
0111デフォルトの名無しさん2011/05/06(金) 23:16:21.06
C++のバインディングこんなにあったのか。
http://lua-users.org/wiki/BindingCodeToLua
0112デフォルトの名無しさん2011/05/06(金) 23:54:56.84
JavaならクラスとGCがあるのに、なぜクラスのないLuaとGCのないC/C++を使うのか
理解できないと思う。
少なくとも再利用という観点では絶対に理解できない。
0113デフォルトの名無しさん2011/05/07(土) 00:13:18.60
Javaみたいなリッチな環境が必要なものはお呼びでないのでお引き取り下さい
0114デフォルトの名無しさん2011/05/07(土) 00:15:37.08
クラスがあれば再利用性が高いとか未だに信じてるひとは
お呼びでないのでお引き取りください
0115デフォルトの名無しさん2011/05/07(土) 00:18:59.49
AngelScript|Д`)ジー
0116デフォルトの名無しさん2011/05/07(土) 00:27:32.93
Javaなんて一番中途半端でいらない子じゃないか
0117デフォルトの名無しさん2011/05/07(土) 00:35:42.54
確か世界で一番使われているプログラミング言語がJavaだったはず。
2位3位がC、C++だった。
0118デフォルトの名無しさん2011/05/07(土) 00:41:30.27
そりゃ一山いくらのIT土方専用言語だし・・・
0119デフォルトの名無しさん2011/05/07(土) 07:51:27.06
バインダって細かい所に手が届かなくてもどかしくなりませんか?
0120デフォルトの名無しさん2011/05/07(土) 08:18:54.41
「確か世界で一番使われているプログラミング言語がJavaだったはず。
2位3位がC、C++だった。」
キリッ

0121デフォルトの名無しさん2011/05/07(土) 12:28:37.11
なんで煽ってるのかわからん。
0122デフォルトの名無しさん2011/05/07(土) 14:06:44.88
煽ってるんじゃなくて、大雑把な事しか喋れないのだ
例えば、Cは別としてC++はJavaに似てるよね、みたいな細かい話になったら困るわけだ
0123デフォルトの名無しさん2011/05/07(土) 14:31:07.66
>>119
ソースが公開されてないバインダなんてないんだぜ
0124デフォルトの名無しさん2011/05/07(土) 22:32:15.82
>>119
手書きと似ても似つかないようなのは駄目だよな
CGIみたいに、手書きに近い手続きで出力すればいいかもしれない
0125デフォルトの名無しさん2011/05/08(日) 11:37:22.48
VBAからLua使えますか?
0126デフォルトの名無しさん2011/05/08(日) 14:10:52.79
DynaWrapでDLLを呼び出す方法
var Lua = new ActiveXObject("DynamicWrapper");
Lua.Register("lua5.1.dll", "luaL_newstate", "f=s", "r=h");
Lua.Register("lua5.1.dll", "lua_close", "f=s", "i=h");
Lua.Register("lua5.1.dll", "luaL_openlibs", "f=s", "i=h");
Lua.Register("lua5.1.dll", "luaL_loadstring", "f=s", "i=hs", "r=l");
Lua.Register("lua5.1.dll", "lua_pcall", "f=s", "i=hlll", "r=l");
var L = Lua.luaL_newstate();
Lua.luaL_openlibs(L);
Lua.luaL_loadstring(L,
"f=io.open('out.txt','w')" + "\n" +
"f:write('Hello World!')" + "\n" +
"f:close()" + "\n");
Lua.lua_pcall(L,0,-1,0);
Lua.lua_close(L);

あとはCOMで包んであげる方法があるね
0127デフォルトの名無しさん2011/05/11(水) 01:21:57.29
LuaとSquirrelどっちが良いんだよ?
0128デフォルトの名無しさん2011/05/11(水) 01:28:45.54
実行速度と普及度はLua
言語仕様はSquirrel
0129デフォルトの名無しさん2011/05/11(水) 03:16:44.94
だれか Lua VM で動く squirrel つくってくれ
0130デフォルトの名無しさん2011/05/12(木) 09:49:02.13
Javascript(V8)でRubyを実装した
ColdRubyなんて処理系があるそうな。
0131デフォルトの名無しさん2011/05/12(木) 21:45:45.01
LuaJIT 2.0.0-beta7 has been released

キタ━━━━(゚∀゚)━━━━ッ!!

って思ったらコンパイル通せねぇ('A`)
0132デフォルトの名無しさん2011/05/12(木) 21:48:56.08
なんでLuaJIT2はこんなに速いんだ?
LuaJIT1から比較しても圧倒的じゃないか
0133デフォルトの名無しさん2011/05/13(金) 00:19:18.74
これで文法にへんな癖が無ければいうことないんだが…
0134デフォルトの名無しさん2011/05/14(土) 14:45:01.99
スクリプトななくてもGCCコンパイラをアプリに組み込んだ方が速い動的コードを生成出来るんじゃないですか?
0135デフォルトの名無しさん2011/05/14(土) 15:32:01.58
したければどうぞ。誰も止めたりはしないよ!
0136デフォルトの名無しさん2011/05/14(土) 17:45:57.29
GPLに感染するんじゃね?
0137デフォルトの名無しさん2011/05/14(土) 20:29:58.37
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ Lua JIT2!!
 彡、   |∪|  /
/ __  ヽノ /
(___)   
0138デフォルトの名無しさん2011/05/14(土) 20:38:07.67
弟がGPLに感染してしまった
何とかして救ってやりたい
0139デフォルトの名無しさん2011/05/14(土) 22:25:29.54
救えないから諦めろ
0140デフォルトの名無しさん2011/05/15(日) 12:06:39.90
AngelScriptJIT|Д`)ジー
0141デフォルトの名無しさん2011/05/15(日) 12:56:36.41
jitよりjetのほうがかっこいいし速そう
0142デフォルトの名無しさん2011/05/15(日) 13:08:28.27
java のJETは、商用AOTですた。
0143デフォルトの名無しさん2011/05/16(月) 22:18:08.26
AngelScriptが地味にバージョンアップしてた
0144デフォルトの名無しさん2011/05/16(月) 22:21:46.50
LuaでサクっとGUIる為のフレームってありましたっけ?
0145デフォルトの名無しさん2011/05/18(水) 00:11:48.88
>>144
iupluaとかwxlua?
0146デフォルトの名無しさん2011/05/25(水) 08:38:14.37
質問です。どなたかお答えいただけると助かります。

Lua側からC言語の関数を呼んでいるときに、
関数内でブレークポイント貼ると、
パソコンがフリーズすることあります。
(luaL_newstate() 〜 lua_close()の間)
どこか想定されるミスはありますでしょうか…。

特に他特殊なことはしてないですが、
スレッド作って回しています。

(Windows7でVisualStudio2005使用です←だからかな…?)
0147デフォルトの名無しさん2011/05/25(水) 12:21:20.88
>>146
直接関係があるか分からんが、
デバッグ実行を開始するとフリーズする



のかと思えるくらいDLL読み込みで待たされることはよくあるな。
0148デフォルトの名無しさん2011/05/25(水) 20:34:38.61
>>147
ぐーぬぬ。
なんかもう完全にフリーズしてしまうんですよね…。
2010とか試してみますわ〜
0149デフォルトの名無しさん2011/05/25(水) 22:09:36.57
2010Express試したけどステップオーバーしてるとやっぱりフリーズ。
まいりました…
0150デフォルトの名無しさん2011/05/25(水) 22:51:52.31
Lua使わなくてもスレッド2つ以上動かしながらデバッグしてると
結構な頻度でフリーズしたよ
0151デフォルトの名無しさん2011/05/25(水) 23:41:50.53
>>150
マジっすか…。
もうしょうがないんですかね〜。

「詳細なテキストサービス」をオフにすると改善する可能性がある。
っていう情報を得たので試してみたんですけど、結果は同じでした。

Lua関係ないとしたらスレチですね。
調べてみます…。
ありがとうございました。
0152デフォルトの名無しさん2011/05/26(木) 09:55:23.27
>>151
古い話だけどマルチスレッドでデバッグしたときにフリーズする話が色々書いてある
ttp://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200307/03070010.txt

VS2010でも直ってないんだなぁ
0153デフォルトの名無しさん2011/05/26(木) 18:50:13.77
luaで文字列の状態テーブルがあって、それをテーブルに直すのに最も早い方法は?
s="{1,2,3}"
t= {1,2,3}
sからtに変換する感じで
0154デフォルトの名無しさん2011/05/26(木) 19:28:28.48
>>153
s="{1,2,3}"
t={}
asert(loadstring("t="..s))()
0155デフォルトの名無しさん2011/05/26(木) 19:34:01.75
typoった
> asert(loadstring("t="..s))()
assert(loadstring("t="..s))()
0156デフォルトの名無しさん2011/05/26(木) 20:26:40.54
スコープとか考えると
t = loadstring('return '..s)()
の方が個人的には好みかな
assertはお好みで
0157デフォルトの名無しさん2011/05/27(金) 00:39:01.71
Luaで配列をループ処理させるときに、

tbl = { 1, 2, 3}
for i, v in tbl do
doSomeThing(v)
end

みたいなfor文を書いて、使いもしないインデックス'i'を書くことが非常に美しくないと感じているのだが、貴兄はどのように処理しているのだろうか?
0158デフォルトの名無しさん2011/05/27(金) 01:49:19.17
for _, v in ... do とかで捨てる
0159デフォルトの名無しさん2011/05/27(金) 06:46:58.59
使わないダミー変数なんてよくある話でさ
0160デフォルトの名無しさん2011/05/27(金) 07:13:23.47
luaの配列って
x = {}
x[100000]=0
x[100000]=nil
ってしたら今後xがなくなるまでずっとメモリ上のサイズは100000要素分のまま?
0161デフォルトの名無しさん2011/05/27(金) 11:45:34.81
>>158
その書き方がインデクスを使わないことを明示していて良さそうですね。
0162デフォルトの名無しさん2011/05/27(金) 12:18:08.02
くだらねぇー
0163デフォルトの名無しさん2011/05/27(金) 13:35:12.76
いちいちくだらねえとか書くなよと思って念のために読み返したら確かにくだらなかった
0164デフォルトの名無しさん2011/05/27(金) 16:17:32.08
お前らの書き込みの方が下らない
0165デフォルトの名無しさん2011/05/27(金) 16:29:13.74
なんというブーメラン
0166デフォルトの名無しさん2011/05/27(金) 23:12:39.16
luaってまともなリファレンス無いよね
なんかどのドキュメントも筆者の書くのだりぃって気持ちが伝わってくる
0167デフォルトの名無しさん2011/05/28(土) 03:23:56.48
>>166
web
0168デフォルトの名無しさん2011/05/28(土) 05:38:27.11
>>166
具体的にどういった部分がまともではないのかを提起しないと話にならん
0169デフォルトの名無しさん2011/05/28(土) 18:49:08.28
VC2008でC++を使っています。
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"}
でLuaのヘッダのインクルードまでは動作しましたが
lua_State* L;でLuaステートの作成を行ってから
lua_open()やlua_newstate()等どのLua関数を呼び出しても
「1>○○○.obj : error LNK2001: 外部シンボル "_luaL_newstate" は未解決です。」
のエラーが表示されます。
何を行えば解決するでしょうか
0170デフォルトの名無しさん2011/05/28(土) 18:50:47.59
libファイルをリンクしましょう
0171デフォルトの名無しさん2011/05/28(土) 19:05:15.01
解決しました、ありがとうございます
ものすごくテンションあがってきました
0172デフォルトの名無しさん2011/05/28(土) 19:14:45.58
lua_pushstringなどで内部でメモリ確保に失敗した場合にできる悪あがきはありますか?
0173デフォルトの名無しさん2011/05/28(土) 20:27:52.42
メモリを増設する
0174デフォルトの名無しさん2011/05/28(土) 20:52:20.05
>>172
スタックが足りなくなる可能性があるならlua_checkstackで確認
メモリが足りなくなる可能性があるならlua_newstateでアロケータ指定
0175デフォルトの名無しさん2011/05/28(土) 21:12:21.58
メモリが足りなくなってるなら、自前のアロケータ使ってるならそいつに追加メモリを
割り当てられないか検討
もしデフォルトのmallocなら割と詰んでる。キャッシュ処理とか実装してるなら掃除するとか
0176デフォルトの名無しさん2011/05/29(日) 00:09:29.70
luaでprintの出力先変えるのってどうするのが正しいの?
0177デフォルトの名無しさん2011/05/29(日) 00:16:27.58
print = myprint
0178デフォルトの名無しさん2011/05/30(月) 17:34:20.92
luaとc++でオブジェクトを共有したいときはどうすればいいんだ?
ルアのガベコレとCPPの参照カウントで二重管理になってもったいない気がするんだが……
今はCPPの参照カウントをルアのガベコレでデクリメントさせてるけど
0179デフォルトの名無しさん2011/05/30(月) 17:36:49.75
C++側で管理するならluaにポインタだけ渡すとか。
逆もできる。
0180デフォルトの名無しさん2011/05/30(月) 17:37:46.17
あー

>CPPの参照カウントをルアのガベコレでデクリメントさせてる

ならほぼ最適解じゃない?
0181デフォルトの名無しさん2011/05/31(火) 21:36:48.46
>>179
Cで管理してluaにポインタだけ渡してたら型チェックめんどくさくね?
luaL_checkudataが使えないと自分で型チェック書かないといけない
0182デフォルトの名無しさん2011/06/01(水) 09:28:40.47
Lua の assert を全無視するような(リリース版コンパイルみたいな)
オプションってある?
0183デフォルトの名無しさん2011/06/01(水) 09:39:41.55
int main(void) {
lua_State *L = lua_open();
#ifdef NDEBUG
if(luaL_loadstring(L, "assert = function(...) return ... end") || lua_pcall(L, 0, 0, 0))
{
puts("err"); return 1;
}
#endif
//いつもの処理
lua_close(L);
return 0;
}
Cに合わせてデバッグ切り替えるならこんな感じかな
0184デフォルトの名無しさん2011/06/01(水) 09:50:00.87
なるほど、上書きしてしまうのか。

assert("ほげほげ")
コンパイル済みソースに "ほげほげ" の部分が現れないようにしたかったんだけど、
プリプロセッサでもつくらないと無理ぽいね

#define assert(x) true

みたいなのが一発でできればいいのに...
0185デフォルトの名無しさん2011/06/01(水) 21:44:06.76
AngelScript|Д`)ジー 
AngelScript|Д`)つboost::wave
AngelScript|`)      boost::wave
0186デフォルトの名無しさん2011/06/02(木) 02:42:57.43
>>184
assert(...)
assert(...)()
a,b,..=assert(...)
用法マチマチだから厳しいと思うよ
0187デフォルトの名無しさん2011/06/04(土) 17:01:23.98
lightuserdataの型を調べるにはどうすれば?
0188デフォルトの名無しさん2011/06/04(土) 18:50:35.21
そういう関数を自分でつくる

lighuserdata はよーするに lua はいっさい関与しませんよ、ってデータなので、
その管理の全責任は作った人にある
0189デフォルトの名無しさん2011/06/04(土) 20:55:35.61
struct MyData {
 int type;
 void *ptr;
};

てのをつくって、必ずこれを渡すようにすれば。

MyData data;
data.type = MyObject;
data.ptr = (void *)myObject;
lua_pushlightuserdata(ls, &data);


MyData *arg = (MyData*)lua_tolightuserdata(ls, -1);
switch (arg->type) {
case ...
};
0190デフォルトの名無しさん2011/06/04(土) 21:14:38.66
グローバルか、Luaレジストリに型定数をおいておけばいい
0191デフォルトの名無しさん2011/06/05(日) 10:37:54.80
LuaとC++一緒に使ってるとプログラミングの仕方に迷うわぁ。
Luaのほうにオブジェクト指向を意識してインスタンスのsetter/getterメソッド作ってるのがなんか馬鹿らしい。
0192デフォルトの名無しさん2011/06/05(日) 16:00:05.88
Luaで例外ってどうやって使うのか
インクルードヘッダみろって言われて見てもよくわからないし
0193デフォルトの名無しさん2011/06/05(日) 18:08:06.75
>>191
setgetのないクラス設計にすればいいよ
0194デフォルトの名無しさん2011/06/05(日) 21:04:53.23
AngelScript|Д`)ノ<OOPと聞いて飛んできました
0195デフォルトの名無しさん2011/06/05(日) 21:09:07.40
自分はluabindで
.property("x", &A::GetX, &A::SetX)
ってやって、C++からはget/setで、Luaからはpublic変数みたいにして
アクセスしちゃう感じで統一してる
0196デフォルトの名無しさん2011/06/05(日) 22:35:27.70
メソッドを作るのが馬鹿らしいっていうのは
(多重)継承しないでコンポジションをするのが馬鹿らしいっていうのと同じに見える
だからたぶん(多重)継承の問題と同じ結論になる
■ このスレッドは過去ログ倉庫に格納されています