【Lua】組み込み系言語総合 その2【Squirrel】
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2009/05/25(月) 09:11:41使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/
その他の参考URLは>2から
■前スレ
【Lua】組み込み系言語総合【Squirrel】
http://pc12.2ch.net/test/read.cgi/tech/1205208141/
■過去スレ
その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
0809デフォルトの名無しさん
2010/02/03(水) 12:43:27>>4
0810デフォルトの名無しさん
2010/02/03(水) 12:46:040811デフォルトの名無しさん
2010/02/03(水) 12:49:100812デフォルトの名無しさん
2010/02/03(水) 13:02:55Cライクな文法が使える超軽量な組み込みないかな
LuaとかPawnも、小さい部類だろうけど不要な物が多すぎる
0813デフォルトの名無しさん
2010/02/03(水) 18:35:510814デフォルトの名無しさん
2010/02/03(水) 21:16:11たとえばSDLとか
ところで、Windows x64向けにビルドしてみたけど
> print(2^63 - (2^63+1))
でなぜか0が返ってくる
> print(2^31 - (2^31+1))
なら1になるけど
ちなみにlua_Integerの実体ptrdiff_tは8バイトになってる
どこがおかしいのかわからん
0815デフォルトの名無しさん
2010/02/03(水) 21:57:1164bit integerに対して64bit doubleじゃ精度足りないっての
パッチがあったからつっこんでみるが、ちゃんと動くか心配だ
0816804
2010/02/03(水) 21:57:40アドバイスありがとう。
luaL_loadbufferやluaL_loadstringを使うという発想は思いつきませんでした。
0817デフォルトの名無しさん
2010/02/04(木) 15:53:15Euphoria, t3x, moto, JavaなどCトランスレータを実装している言語は探すと色々あるものの、
トランスレート後に吐いたCソースとハンドコードしたCソースとのリンク方法が
文章化されてなかったりするするんだよな。
>>812
小さくはないが...elastiCは?
ttp://www.elasticworld.org/
0818デフォルトの名無しさん
2010/02/04(木) 19:12:280819デフォルトの名無しさん
2010/02/04(木) 19:41:200820デフォルトの名無しさん
2010/02/04(木) 21:35:40lua手を出しにくいのです。。。
0821デフォルトの名無しさん
2010/02/04(木) 21:52:420822デフォルトの名無しさん
2010/02/04(木) 21:53:060823デフォルトの名無しさん
2010/02/04(木) 21:57:42遭遇しまうまう・・・orz
0824デフォルトの名無しさん
2010/02/04(木) 22:02:220825デフォルトの名無しさん
2010/02/04(木) 22:04:46nmake -f makefile でビルドできるもんなんだろうか・・・
0826デフォルトの名無しさん
2010/02/05(金) 00:11:510827デフォルトの名無しさん
2010/02/05(金) 00:39:23必要なobjぐらいなら写せるだろ
0828デフォルトの名無しさん
2010/02/05(金) 00:52:13必要なc/cppファイルひろって Makefile 書き直すなり
Visual Studio でプロジェクトファイルつくるなりぐらいやりなされ。
そんな難しいもんじゃない。
0829デフォルトの名無しさん
2010/02/05(金) 11:59:44こういう問題を回避するためにSquirrelのソースパッケージをCMake対応にして
フォーラムに投げてみたら、いらないって言われた……。
0830デフォルトの名無しさん
2010/02/05(金) 18:05:550831デフォルトの名無しさん
2010/02/06(土) 12:14:44userdata
・lua側でアロケート
・lua側でデアロケート(GC)
・Cには参照のみが渡される
・Cからは寿命が分からない
lightuaserdata
・C側でアロケート
・C側でデアロケート
・luaには参照のみが渡される
・luaからは寿命が分からない
これ以外になんか有りますか?
それとluaとCでuserdata、lightuserdataの寿命を同期させる方法は有りますか?
0832デフォルトの名無しさん
2010/02/06(土) 12:41:410833デフォルトの名無しさん
2010/02/06(土) 14:15:34これは心の贅肉をそのまま箇条書きにしたみたいで面白いな
考え方としてはとりあえず
lightuserdataは無くても整数値で代用できる、と割り切ってしまうほうが簡単
そうすると、整数とuserdataを比較するのは無意味だとわかる
0834デフォルトの名無しさん
2010/02/06(土) 21:32:49|Д゚)つ[AngelScript]
|ミ サッ [AngelScript]
0835デフォルトの名無しさん
2010/02/06(土) 21:47:45/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ AngelScript!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0836デフォルトの名無しさん
2010/02/06(土) 23:25:21レスどうもです
メタテーブルの有無は重要ですね
いろいろいじってようやくユーザークラスをLuaに公開できるところまでこぎつけました
しかしlightuserdataは使い道がわからず・・・
0837デフォルトの名無しさん
2010/02/07(日) 10:50:270838デフォルトの名無しさん
2010/02/07(日) 14:36:10ゲームとかだとひとつのスクリプトで複数のオブジェクトを制御する必要があるし。
0839デフォルトの名無しさん
2010/02/07(日) 15:41:29C++/CLIならもっとすごいことになるな
0840デフォルトの名無しさん
2010/02/07(日) 17:14:33例えばスクリプトで
SetSpeed(1,20)
とかいうような関数があった場合、C++側でlightuserdataを取り出し、
//lightuserdataからObjectのポインタを取り出す
Object *lpObject=(Object*)GetLightUserData(L);
//Objectを操作する
lpObject->SetSpeed(x,y);
って感じの処理をするグルー関数を用意する。
0841デフォルトの名無しさん
2010/02/07(日) 18:22:00userdataでやれば上手くいくんだけどlightuserdataのほうが軽いらしいし・・・
C++側で
tableを作る
tableにインスタンスへのポインタをlightuserdataで格納
tableに各種メソッドを格納(メソッドはself(第一引数)tableからインスタンスへのポインタを取り出してクラスのメソッドをコールする)
さらにtableを積んで__gcフィールドにデリータを格納
最初のテーブルにメタテーブルとして設定
最初のテーブルを返す
という感じでやってるんだけどLua側で__gcが呼ばれてくれない
mt = getmetatable、mt.__gc(hoge)とすればちゃんとデリータを呼んでくれるのに・・・
こっちがDLL
http://codepad.org/5CuryxGE
こっちがLua
http://codepad.org/BON62sBh
0842デフォルトの名無しさん
2010/02/07(日) 18:44:41パソコンでできることがケータイではできないと嘆いているようなもんだぞ?
0843デフォルトの名無しさん
2010/02/07(日) 19:23:56そういうことができなくなってる分軽いわけなんだが……
0844デフォルトの名無しさん
2010/02/07(日) 19:31:07コールバック的な使い方でしょうか
0845デフォルトの名無しさん
2010/02/07(日) 19:44:120846デフォルトの名無しさん
2010/02/07(日) 19:51:50てか、マニュアルにもCのポインタそのものだって書いてあるだろう。
Cでよくあるハンドルスタイルやコールバックスタイルの構造を直接扱うためにある。
例えば fopenの帰り値の FILE* を void* にキャストして lightuserdata として持ってそのまま使う。
処理する時には、必ずCの関数をいちいち呼び出すのを前提として、
「LUA側は持ってるだけで何もさわらないデータ構造」として準備されてる。
これの使い方が直感的にわからない人がいるってのが驚きだった^^;
0847デフォルトの名無しさん
2010/02/07(日) 20:54:46ひどくなると「それはただの××だよ」と言われると反論してくる。
「お前はそうやって分かったつもりになってるだけだ」とか。
0848デフォルトの名無しさん
2010/02/07(日) 21:05:07自前のオブジェクトのアドレスや、OSから渡されるハンドルをキーにしてテーブルを参照すれば、同じアドレスやハンドルに同じuserdataを対応させることができる。
ちなみに、この時のテーブルはweak tableにしておくといい。
ということを初めて知った時は目から鱗だった。
0849デフォルトの名無しさん
2010/02/07(日) 22:40:470850デフォルトの名無しさん
2010/02/07(日) 23:14:160851デフォルトの名無しさん
2010/02/07(日) 23:22:510852デフォルトの名無しさん
2010/02/07(日) 23:50:34Luaから呼ばれるC++側の関数で取り出して使ってるんだけど、>>831
みるとuserdataはLua側でGCかかるの?
0853デフォルトの名無しさん
2010/02/08(月) 00:40:38うーんこんな感じですかね?
ポインタをキーにという発想はすごい便利そうな予感がしますね
しかしグルーコード内のエラー処理とかってどうすればいいんだろう
C++例外を投げるべきなのか、関数内でもみ消してlua_errorするべきなのか
0854デフォルトの名無しさん
2010/02/08(月) 07:40:28「C++側」と「Lua側」をきっちりと分離したいんだな。
組み込み言語は、そういう幻想にうんざりしてる人のためにあるんだと思うけどな。
0855デフォルトの名無しさん
2010/02/08(月) 10:48:050856デフォルトの名無しさん
2010/02/08(月) 11:02:47作られてないから駆逐されてない訳で
0857デフォルトの名無しさん
2010/02/08(月) 11:04:23実際のところLuaのバランスが優れているってことでしょ
0858デフォルトの名無しさん
2010/02/08(月) 12:13:32静的型 クラス メタプログラミング 並列処理 遅延評価 参照透明性 ・・・
0859デフォルトの名無しさん
2010/02/08(月) 12:58:590860デフォルトの名無しさん
2010/02/08(月) 13:04:33次点の理由はスタティックリンクできたから。
0861デフォルトの名無しさん
2010/02/08(月) 19:55:29自分の英語ができないのは分法を教えるからって口だろ
0862デフォルトの名無しさん
2010/02/08(月) 20:54:280863デフォルトの名無しさん
2010/02/08(月) 20:56:42逆だよ。
文法ができないから英語できないんだよ。
0864デフォルトの名無しさん
2010/02/08(月) 21:00:44>861が何を言ってるのか分かってるの?w
0865デフォルトの名無しさん
2010/02/08(月) 21:12:140866デフォルトの名無しさん
2010/02/08(月) 21:19:010867デフォルトの名無しさん
2010/02/08(月) 23:28:24>>347みる限り速度はでLua>>>>Sq
0868デフォルトの名無しさん
2010/02/08(月) 23:34:53C拡張に馴染む日はくるんだろうか俺・・・
0869デフォルトの名無しさん
2010/02/08(月) 23:37:30俺は2日で拡張できるようになったぞ
0870デフォルトの名無しさん
2010/02/09(火) 09:34:09ざっと見た感じは文法も特に変な感じじゃないから、使いやすそうな感じはするんだけどね。
日 本 語 資 料 皆 無 だ け ど な
0871デフォルトの名無しさん
2010/02/09(火) 11:26:11月並みなことを言うと
因果関係ではなく相関関係ならあるかもしれない
0872デフォルトの名無しさん
2010/02/09(火) 11:32:070873デフォルトの名無しさん
2010/02/09(火) 14:25:57代えられるほどのものではないということだろう
0874デフォルトの名無しさん
2010/02/09(火) 16:13:120875デフォルトの名無しさん
2010/02/09(火) 16:40:55SciTEとか
0876デフォルトの名無しさん
2010/02/09(火) 17:04:31もともとゲーム向けってわけじゃないしね
0877デフォルトの名無しさん
2010/02/09(火) 17:50:350878デフォルトの名無しさん
2010/02/09(火) 17:56:04TextAdept
http://caladbolg.net/luadoc/textadept2/manual/1_Introduction.html
半分以上 Lua で記述され、また Lua で拡張可能なテキストエディタ
iconv で読み書きし内部は UTF-8 なので、日本語も使用可
0879デフォルトの名無しさん
2010/02/09(火) 21:54:30tokyotyrantでLua知ったよ
0880デフォルトの名無しさん
2010/02/10(水) 14:33:21http://www.frykholm.se/files/markdown.lua
http://coderay.rubychan.de/
プロジェクト管理ツール を作ろう
Redmin, Retrospectiva, Trac
基本組み込み用途だよね、とツールを作る用途で
移行する気が起きない理由はこの辺にありそうだとさっき気がつきました・・・
0881デフォルトの名無しさん
2010/02/10(水) 17:47:01それとも__stdcallにしたほうがいいですか?
0882デフォルトの名無しさん
2010/02/10(水) 20:55:07たぶん__cdeclだけど仮に間違っていたとしても
name manglingの違いで簡単に見分けられるような気がする
0883デフォルトの名無しさん
2010/02/10(水) 20:57:16Cでしか使わないのなら目的にもよるがどっちでもいいと思うがな
0884デフォルトの名無しさん
2010/02/10(水) 22:45:42>>883
thxです
さっきluaのヘッダ見たところ呼び出し規約は書いてなかったので多分C言語デフォルトのcdeclでよさそうですね
0885デフォルトの名無しさん
2010/02/11(木) 14:50:36PDFで売ってくれりゃいいのに
0886デフォルトの名無しさん
2010/02/11(木) 15:59:410887デフォルトの名無しさん
2010/02/11(木) 16:49:250888デフォルトの名無しさん
2010/02/11(木) 18:52:41配列形式だったら #tbl で、出来るみたいだけど・・・。
0889デフォルトの名無しさん
2010/02/11(木) 20:14:39BOOL isHoge(lua_State *, index);
の形で使いたいんですが
luaのほうで予め提供されてる方法はありますか?
それとも、自分で独自にマップするものなんでしょうか?
0890デフォルトの名無しさん
2010/02/11(木) 20:46:48pairsやnextかな
0891デフォルトの名無しさん
2010/02/11(木) 21:04:58pairsを使った方がいいんじゃまいか
0892デフォルトの名無しさん
2010/02/11(木) 23:23:44bashにluaインタプリタ機能追加してbashの拡張ができる&
bashが生きている間luaインタプリタも生きているのでlua変数を
保持し続ける。これ重要。
ファイル操作が多いとやっぱりシェルスクリプトが楽だけど
コマンド間の結果の連携を環境変数orファイル書き出しで
実装するのはかったるい時に大活躍な予感。
0893デフォルトの名無しさん
2010/02/14(日) 01:40:15汎用的に使うには標準ライブラリ貧弱だし
thenとかdoとか書くの面倒だし
0894デフォルトの名無しさん
2010/02/14(日) 02:40:47wxFormBuilderから追加したイベント宣言を定義するのはどうしたらいいのでしょうか?
Generateで書き出した.hファイルにある
virtual void OnButton1( wxCommandEvent& event ){ event.Skip(); }
の{ event.Skip(); }をコメントアウトすることで
出来なくも無いのですが
ヘッダファイルの行頭に
// PLEASE DO "NOT" EDIT THIS FILE!
とありますし後々修正があったときに困りそうです。
// Virtual event handlers, overide them in your derived class
このコメントが鍵のような気もするのですが正直意味が分かりません・・・
0895デフォルトの名無しさん
2010/02/14(日) 03:09:570896デフォルトの名無しさん
2010/02/14(日) 11:30:21':' ゙''" `':,
ミ ・ω・ ;,
:; . っ ,つ Lua!
`:; ,;'
`( /'"`∪
0897デフォルトの名無しさん
2010/02/15(月) 16:13:25__gcをうっかり書き換えてしまわないように
メタテーブルを隠蔽あるいは変更不可にすることはできるだろうか?
0898デフォルトの名無しさん
2010/02/15(月) 19:19:53さらにメタテーブルに__metatableを追加しておけば隠蔽も可能になり、メタメソッドの変更、追加を防止できる。
ただしこれらはC側やdebugライブラリには効果がないし、制限する手段も(多分)無い。
0899デフォルトの名無しさん
2010/02/15(月) 21:52:18初期化以外でsetmetatable()を使うのか?
0900デフォルトの名無しさん
2010/02/15(月) 22:33:58__metatableというのがあったのか
というかユーザデータはもともと変えられないって知らなかったorz
レスthxでした
>>899
metatableをうっかり書き換えるのはクライアントで、クラスじゃない
RAIIをうっかり忘れるのとmetatableをうっかり書き換えるのは別次元の問題
そのクライアントのついうっかりを封印して出来なくしてしまえれば安心して寝れる
0901デフォルトの名無しさん
2010/02/15(月) 23:37:24なにが別次元だ
ファイルを読んだり書いたりdllをロードしたりする、普通の言語じゃないか
0902デフォルトの名無しさん
2010/02/19(金) 02:15:030903デフォルトの名無しさん
2010/02/19(金) 20:31:33〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ Lua!!
彡、 |∪| /
/ __ ヽノ /
(___)
0904デフォルトの名無しさん
2010/02/21(日) 15:46:380905デフォルトの名無しさん
2010/02/22(月) 16:32:070906デフォルトの名無しさん
2010/02/22(月) 16:55:480907デフォルトの名無しさん
2010/02/22(月) 17:51:500908デフォルトの名無しさん
2010/02/22(月) 20:06:58レス数が900を超えています。1000を超えると表示できなくなるよ。