トップページtech
582コメント172KB

プログラミング言語 Lua

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
Lua について語ろう。

http://www.lua.org/
0459デフォルトの名無しさんNGNG

漏れは、

if(...){
}

の方が楽で良いな。あと関数はfuncがよくない?

なんつーか、最近の言語ってキーワードが長過ぎて萎え萎え
0460デフォルトの名無しさんNGNG
>>457
begin無いほうがすっきりするよ。
Wirth先生もModula-2ではbegin無くしてたし
0461デフォルトの名無しさんNGNG
構文が嫌いなら他の言語使えっての。
0462山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0463デフォルトの名無しさんNGNG
つーかこのスレ、実際にLua使ってる人がいない気がする。
なんか宣伝とか比較とか実験とかそんなのばっかりだし。
0464デフォルトの名無しさんNGNG
まあ、間違ってもメジャーな言語ではないしね。組み込み向けというのも特殊だし。
前に C もどきのマクロ言語作ったことあったけど、
次にそういう仕事があったら Lua 使うかも。
言語仕様考えるのって大変。
0465デフォルトの名無しさんNGNG
>>463
漏れはプライベートプログラムじゃ活用しとるが、仕事ではまだ使うには
情報不足やねぇ。で、こんなスレに足げに通ってるワケだ。

でも、何となくだけどアマチュアプログラムの組み込みにLuaはちょっと来
るんじゃないかという予感もあるよ。HSPとかあの辺の層を一気に取り込む
だけの動きがあるんじゃないかと。もちろん漏れはそんなのには興味ないが
そういうコミュニティからLuaへのフィードバックは期待できるしなー。
0466デフォルトの名無しさんNGNG
http://www.acc.umu.se/~arvid/luabind/
これ何?
0467山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0468デフォルトの名無しさんNGNG
<<465

おいらは、Lua使って弾幕記述言語作ってる。
HSP用のプラグインもついでに作ってるんだが、並列で走らせる方法
とwait時抜け出す方法が分からなくて・・・。
hook使うの分かってるんだがどうも。
0469デフォルトの名無しさんNGNG
ue
なにそれ?
0470デフォルトの名無しさんNGNG
もしや BML の実装?
0471デフォルトの名無しさんNGNG
まぁ、いずれにせよ、luaを使う気はせんなぁ〜。
構文違うし、これといったメリットないし、
さらに、マイナーで、究めつけはまだバグが多くて、仕様がよく変わる。

やはり、組込み向けぐらいかね?漏れは知らんけど。。。
0472デフォルトの名無しさんNGNG
はいはいそーですかーyかったですね
0473GoLuaNGNG
>>363-GoLua 開発計画はどーなった?
0474デフォルトの名無しさんNGNG
そんな計画ないし。
0475デフォルトの名無しさんNGNG
まずはparserから解析しないとね。
Yaccとかそういうのつかっててくれればなぁ…。
0476デフォルトの名無しさんNGNG
GOLua Overrides Lua
0477デフォルトの名無しさんNGNG
俺がGOLua作ってもいい?
0478デフォルトの名無しさんNGNG
いいよ。
0479468NGNG
白い弾幕君で真面目にサポートしてる<W
このスレもしかして見られてるのかな?
0480デフォルトの名無しさんNGNG
>>479
見てます。別の弾幕記述言語として、
Lua使ってみたいなーと思って検索したらこのスレ見つけました。
ゲームの組み込みには本当にいいですね。
0481468NGNG
luaXMLって言うのもあるので。BulletMLとチャンポンも・・・ゲフンゲフン
0482デフォルトの名無しさんNGNG
コンパイル済みのLuaは公式サイトのどこにありますか?
0483デフォルトの名無しさんNGNG
コンパイル済みのLuaなんかで何をやるつもりなの?
…としょうがないから反応してみる。
0484デフォルトの名無しさんNGNG
コンパイル前のソースだけで使えるソフトウェアなどない!
…としょうがないから反応してみる。

MinGWでうまくコンパイルできないんです。
0485デフォルトの名無しさんNGNG
ん?普通に出来るよ?
mame32plus!のコンパイルに使ったmingwセットだけどw

cygwinで-mno-cygwinだとライブラリは問題なくコンパイルできるけど
lua.exeがなんかうまくcygwinフリーにならない…
0486デフォルトの名無しさんNGNG
D言語とどちらが先に滅ぶか競争だ!!
0487デフォルトの名無しさんNGNG
D言語は滅ぶ前に使ってる人いるの?
0488449NGNG
すれ違いだけど、あれから
2) 66msec
3) 564msec
にまで上がった。
ちなみにもう700行じゃない。
(Cで2000行、schemeで5000行程度)
2)と3)で、またかなり差が開いたが、
2)はループ全体をネイティブコードに変換できた結果。
簡単な演算なら全てネイティブ変換可能にした。
環境に対しての変数参照の手数が結構ある事と、
毎回デクリメントで型変換が発生するのでC言語程速くはならない。
これ以上は型について解析しないと改善されない。
3)はloop呼び出しで一旦ネイティブコードの中断が起きるのと、
毎回環境フレームの移動が起こる結果。
このケースではフレームの直接上書きが可能な事に着目すれば
もうちょっと改善される。whileに形式変換してしまう手もある。
GCは明示的にcons等やclosureを生成していかない限り、起動されることはない。
0489山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0490デフォルトの名無しさんNGNG
Luaを弄って遊んでる最中。

関数も含めた内部状態を丸ごと保存・丸ごと復帰したいんだけど
方法が判らんぜよ。
luacみたくluaL_loadfile()してluaU_dump()する方法なら問題なく
できるんだけど・・・もしかしてluaL_dofile()、lua_dostring()した
結果は保存不可?
0491デフォルトの名無しさんNGNG
他のLuaスクリプトファイルで定義されている関数を呼び出すには
どうすればよいでしょうか?
Cのincludeのようなものがあるのでしょうか?

それともlua_Stateを使ってなんらかのバインド処理を行うことが
できるのでしょうか?
0492デフォルトの名無しさんNGNG
スクリプトなのにそんな面倒なことをしないといけないの?
0493デフォルトの名無しさんNGNG
>>23
またまたご冗談を・・・・
猿がそんなことできるわけないでしょ。
0494デフォルトの名無しさん NGNG
>>491
dofile("")
0495デフォルトの名無しさんNGNG
> ("")
一瞬顔文字に見えたし。
0496デフォルトの名無しさんNGNG
>>493
8ヶ月前にレスするなんて遅すぎでは?
0497デフォルトの名無しさんNGNG
静かすぎ。保守。
0498デフォルトの名無しさんNGNG
      ☆ チン     マチクタビレタ〜
                        マチクタビレタ〜
       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ ___\(\・∀・) < Incremental GCまだ〜?
            \_/⊂ ⊂_ )   \_____________
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       |  愛媛みかん  |/
0499デフォルトの名無しさんNGNG
折返し(500)目前にしてペース落ちたね。
GOLuaどーなってるの? >>477
0500500NGNG
折返し点 get!
0501デフォルトの名無しさんNGNG
俺もLuaで弾幕(というか敵キャラモーション)記述言語に挑戦中。
coroutineつかって1キャラ1スレッドとかやってみた。
BulletMLみたいに逐次っぽく書けるやつ。それっぽく動いてる。

LuaXMLとかやったひといる?使い勝手とかどうなんでしょ。
http://lua-users.org/wiki/LuaXml
0502480NGNG
>>501
期待っす。面白いものができたらぜひ公開してくださいな。
coroutine って速度的にはどうですか?

LuaXML に関してはなんで Lua から XML を
いじる必要があるんだろうかと思ってしまいますが…
たぶん C/C++ 側で処理した方が良いのでは。
0503デフォルトの名無しさんNGNG
Luaは5.0でライセンスかわっちゃってちょっと使いにくくなったかも。
0504デフォルトの名無しさんNGNG
■■■かわいそうな「ゲーム君」を2ちゃんの力でトップにしよう!■■■

HSPプログラムコンテスト2003オンライン投票
http://www.onionsoft.net/hsp/contest2003/entryn1.html
                                     
HSPプログラムコンテスト2003に一番乗りで出展したものの
Windowsに標準でついてくるゲームを手軽に起動できるという(というかただのショートカットつめあわせ)
しょーもないプログラムでたたかれまくっているプログラミング暦3年(!)の高校生の
作品、ゲーム君をみんなの力で一位にしよう。
【【【 投票方法 】】】            
http://www.onionsoft.net/hsp/contest2003/entryn1.html の一番下、エントリーNo8の「ゲーム君」
評価を「A」で選んでコメントを記入して「送信」(コメントいれるとなおよし)           
http://www.onionsoft.net/hsp/contest2003/eval/eval.cgi?md=cmt&id=8
でいままで送信されたコメントが見えるよ!(けっこう笑える)             
0505デフォルトの名無しさんNGNG
うーむ、coroutine(thread)を途中で止めて(関数の終わりまで実行せず)、かつ、
そのcoroutineを再利用したい場合、どうしたらいいんだろう?
あ、再利用ってのは、lua_newthread()で作ったthreadの再利用ね。

スレッド毎回作るのは重そうだから、プールしといて再利用しようと思ったんだけど、
実行が終わってないと、再利用してlua_resume()呼んでも前の関数の続きが
実行されちゃうんだよね(あたりまえだが…)。
0506505NGNG
ということで、lua_stopthread()を適当に作ってみた。ldo.cとかに入れてね。
今のところうまく動いているように見える。

LUA_API void lua_stopthread (lua_State *L) {
 lua_lock(L);
 L->ci = L->base_ci; /* go back to initial level */
 L->base = L->ci->base;
 L->nCcalls = 0;
 luaF_close(L, L->base); /* close eventual pending closures */
 restore_stack_limit(L);
 lua_unlock(L);
}

>>503
MITライセンスだから、ほとんど制限無いと思うんだが。
0507505=501NGNG
>>502
>coroutine って速度的にはどうですか?
とりあえず、スレッド付きオブジェクトを200個くらい表示させてみても
60FPSは出てたみたいだから、そんなに遅くないみたい(Pen!!!866Mhz)。
ソース見ても関数呼び出しとほとんど同じだしね。
0508デフォルトの名無しさんNGNG
>>501
god!
できたら実装例キボンヌ。

> MITライセンス
見てみたけど、BSDライセンスと同様に扱ってOKって感じかな?
0509デフォルトの名無しさんNGNG
Reference Manualの3.20の
> Each thread has an independent global environment table.
> When you create a thread, this table is the same as that of the given state, but you can change each one independently.
> 各スレッドは独立したグローバル環境テーブルを持っている。
> スレッドを作ったときは、このテーブルは元のテーブルと同じ状態であるが、それぞれ独立して変更を加えられる。
って嘘?

関数はクロージャになってるからそのままではスレッドのグローバル領域に
アクセスできないのはわかるけど、getfenv(0)とかやっても、やっぱりスレッドごとに
別のグローバル変数領域が作られてるようには見えない…

まぁ、lua_newtable(L); lua_replace(L, LUA_GLOBALINDEX);で作ることが出来るわけだけど。。
0510デフォルトの名無しさんNGNG
スレッドのグローバル変数テーブルをまっさらなテーブルに置き換えると
pairs()やipairs()が使えなくなることに気づいた!

イテレータ間数の取り出しが元のグローバル変数テーブルに依存してんだね。
0511デフォルトの名無しさんNGNG
なんだか誤訳っぽいかも。
「スレッドを作ったときは、このテーブルは元のステートのものと同じであるが、それぞれ独立に変更できる。」 かな?
0512デフォルトの名無しさんNGNG
ああ、そうか。
最初は「同じテーブルオブジェクト」を指してるけど、別々のものに
置き換えることも出来るという意味なんだね。
1文目が微妙なんだよなぁ…。あれじゃ、テーブルへのリファレンスの
話じゃなくてテーブル本体の話だと思っちゃうよ。

MLの方には、こう直したほうがいいとかいう話題も上がってた。
"Thread may have an independent table for global variables."
これなら解る。
0513501NGNG
>>508
Luaでモーション記述する部分はだいたいできてきたんでアップしてみるよ。ソース付き。
luaに関する処理は、luasht.cppに大体まとまってるので、見てみてくださいな。

あと、BulletMLからLuaへのコンバータも適当に書いてみた。
まだうまく動かないのもあるけど、それなりに動いてるっぽい。
ちなみに、あたり判定無いのでゲームにはなってないです。

http://gamdev.org/up/img/030.zip (本体+ソース)
http://gamdev.org/up/img/031.zip (白弾くんのBulletMLから変換)
0514デフォルトの名無しさんNGNG
>>513
(・∀・)イイヨイイヨー
0515デフォルトの名無しさんNGNG
>>513
す・・すごいな・・
0516デフォルトの名無しさんNGNG
もうちょっといかしたLUA用IDEはないもんか・・・
5.0用だと、wxLuaをつかわざるをえないのかな
0517デフォルトの名無しさんNGNG
>>516
emacs+lua-mode.el

というか、IDEったってやることなさそう。
0518デフォルトの名無しさんNGNG
>>517
ありがとう!ためしてみます。
ひょいひょい使える環境をさがしてたもんで。
wxLuaもなかなかのもんでした。
0519デフォルトの名無しさんNGNG
また、スレッドの話なんだけど、lua_resume()して、yieldで戻ってきてサスペンドしてる
スレッドでlua_call()とかすると落ちちゃうんだね...
まぁ、なんとなく駄目かもとかいう予感はあったけど(lua_Stateの構造から)。

でも、スレッドのグローバル変数領域とlua_call()で呼ばれる関数から見えるグローバル
変数領域を同じにしたいんだな...。どうしたものか。
0520デフォルトの名無しさんNGNG
もういっこスレッドを作って、それで call すれば?変数は共有できるっしょ、たしか
0521デフォルトの名無しさんNGNG
いっぱいあるスレッドから、毎回グローバル変数領域取ってきて共有させて実行とか
結構越すとか借りそうかと思ったら、Lua関数3つ呼び出すだけでグローバル変数領
域移せるんだね。
lua_pushvalue(fromL, LUA_GLOBALSINDEX);
lua_xmove(fromL, toL, 1);
lua_replace(toL, LUA_GLOBALSINDEX);
そんなコストかから無そうだから、これで逝くことにした。
サンクス!
0522デフォルトの名無しさんNGNG
>>521
ずいぶんと有益な情報だな・・・
0523521NGNG
あ、>>521は、全部のLuaスレッドにあらかじめ別々のグローバル変数領域を
設定しているときの話ね。普通にスレッド作ると、グローバル変数領域は、
全部一緒の領域が共有されてるから。
0524デフォルトの名無しさんNGNG
:と.の使い分けがいまだにわからん・・・
0525デフォルトの名無しさんNGNG
obj:method(hoge)
は、
obj.method(obj, hoge)
と同じ。
0526デフォルトの名無しさんNGNG
わ〜いサンクス>525

話は変わるけど、
eclipse+Luaやってみたい。
0527デフォルトの名無しさんNGNG
wxLua2.1 あげ
0528デフォルトの名無しさんNGNG
wxLuaってただのバインディングだと思ってたら、
すごい気合の入ったIDEもどきのエディタが入ってるんだね。
ステップ実行できるのはかなりイイ!

これ、自分のアプリに組み込めないかな。。。
0529デフォルトの名無しさんNGNG
>>528
たのむ、VS.NET2003でコンパイルできようにしてくれ・・・
0530山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0531デフォルトの名無しさんNGNG
保守
0532デフォルトの名無しさんNGNG
wxLuaに使われてるwxWindowsのライセンスって結構厳しいな…
0533デフォルトの名無しさんNGNG
>>532
なになに?
どんなやつよ?GPLよりしょっぱい?
0534デフォルトの名無しさんNGNG
LGPLとwxLuaライセンスのデュアルライセンス。
wxLuaの方は、バイナリ配布時にソース公開義務のないGPLかな。

BSDスタイルやMITのまま配る場合、ちょっときついねってだけでつ…
0535デフォルトの名無しさんNGNG
純粋にLuaのプログラムだけを配布するぶんには、
関係ないでしょ?
(まぁ・・ないとは思うけど)

wxLuaは開発環境なわけだし。
0536デフォルトの名無しさんNGNG
wxLuaは開発環境じゃなくてGUIツールキットです。
「サンプルとして」気合の入った開発環境が付いてます。
0537デフォルトの名無しさんNGNG
>LGPLとwxLuaライセンスのデュアルライセンス。
LGPLと"wxWindows"のデュアルライセンスだね。
0538デフォルトの名無しさんNGNG
>>536
そうでした!
wxなとこは全然つかってなかったもんで・・・
0539デフォルトの名無しさんNGNG
lua to python dochiga ii?
0540デフォルトの名無しさんNGNG
>>539
mazu nanini tsukaitaika ie.
0541デフォルトの名無しさんNGNG
GCはPythonのほうが優秀(のハズ)。
サイズはPythonのほうが大きい。
スピードは知らん。上のほうに比較したページのリンクがあった。
LuaはPCのゲームで使用された実績が結構ある。
Pythonはコンシューマゲームで使われた実績があるらしい。
Pythonはリモートデバッグ環境があるらしい(↑で使われた)。

というか、Python少ししかやったこと無いんで、これぐらいしか言えん。
0542デフォルトの名無しさんNGNG
>>539
http://lua-users.org/wiki/LuaVersusPython
必ずしも最新の情報じゃないが。
0543デフォルトの名無しさんNGNG
>>542のページにもあるが、coroutine(+thread)がお気に入り。
generatorもcoroutine的に使えないことも無いけど、ちょっと制約多いね。

あと、↓が本当ならリアルタイム向けにはちょっと厳しいかも。
>Everything is an object allocated on the heap in Python, including numbers.
0544デフォルトの名無しさんNGNG
Boots使うとPythonのが簡単に使えるなー。スレッドもファイバのあるPython
のが扱いやすいかも知れぬ。

しかし・・・Luaの文法のほうが一般には受けやすいと思うぞナ。
0545デフォルトの名無しさんNGNG
>>544
Luaの文法・・・これは微妙でしょ。
#一般の定義なんてできるわけないから、煽りは無しの方向で。

Luaでも、オブジェクト指向っつーか(lua-users.org参照)
それっぽいことできるから
C++に浸かってる人にも、にゃかにゃかいけるんでは無いかな?
0546デフォルトの名無しさんNGNG
>>544
bootsってboost?ファイバってなんでしょ。興味あります。
(検索しても出てこないし…)

>>545
LuaのOOはプロトタイプベースだしねぇ。
メタテーブルでいろいろやると暮らすベースに近いシステムも組めると思うけど。
(その場合の速度比はどれくらいだろ?)
0547デフォルトの名無しさんNGNG
>>546
ゴメンboostだ。ただのタイプミス。ファイバもマイクロスレッドのほうが
一般的な呼び方だったかも。重ね重ねスマソ。

個人的にPythonはあの構文が受け付けなさ杉です。
0548デフォルトの名無しさんNGNG
ファイバは一般的だろ。むしろマイクロスレッドの方がはつみみだよ。
0549デフォルトの名無しさんNGNG
boost/pythonなんてのがあるのか。
ファイバは、stacklessのほうね。generatorはいまいちだったので、
そっちの方を調べてみるか。組み込み用途的にはstacklessはどうなんだろ?
0550デフォルトの名無しさんNGNG
>>546
速度もそうだけど、メモリ効率がいまいち?
インスタンス?は、メソッドをコピってるから、
オブジェクトの生成ごとっつーかオブジェクト毎に
そのメソッドのためのメモリを食ってるかと思うと・・・
#ようするにVirtualTableが無い。


0551デフォルトの名無しさんNGNG
>>550
LuaでOOについてはここね。クラスの作り方も書いてある。
http://lua-users.org/wiki/ObjectOrientationTutorial

metatableを使う場合、1回テーブルの検索を失敗してから
metatableを検索に行くみたいなので、その辺のオーバヘッドが
どれくらいかかるのかなぁと。
0552ためしてみたNGNG
こんなふう↓に定義しといて、
-------------
Hoge = {}
mt = {}
function Hoge:new()
return setmetatable({}, mt)
end
function Hoge:foo()
end
mt.__index = Hoge
-------------

metatable経由で呼び出し: 0m2.827s
-------------
h = Hoge:new()
for i = 0, 10000000 do
h:foo()
end
-------------

テーブル内の関数を呼び出し: 0m1.843s
-------------
h = {foo=Hoge.foo}
for i = 0, 10000000 do
h:foo()
end
-------------

ちなみに、
空ループ: 0m0.327s
fooをグローバルに定義して呼び出すだけ: 0m1.608s
となった。
0553デフォルトの名無しさんNGNG
>>552
うあ。ありがと。参考になる〜
ってことは、テーブルの要素がふえればふえるほど・・・
0554デフォルトの名無しさんNGNG
つーかluaは大して速くないので。
OOやりたいならRubyとか専用のやつ使った方がいいよ。
0555デフォルトの名無しさんNGNG
まぁ、LuaのOO風機能はおまけみたいなもんだ。
0556デフォルトの名無しさんNGNG
ちなみに、>>554は、Luaより早い言語として何を想定してる?
いや、いっぱいあるのは分かるけど、代表的なものとして。
もしかして、自作処理系ですか?(上のほうにもそんな話題があったけど)。
0557デフォルトの名無しさんNGNG
組み込みスクリプトにおう。とにかくサイズが小さい。
ゲームにつかうとき、
パラメータやシナリオの流れをLuaに逃がすとウマー
OOするための言語じゃねーぞ。
やろうと思えばできる。それで十分じゃねーか。
0558デフォルトの名無しさんNGNG
組み込み言語としては、メモリ関連の処理がイマイチだったりと、
中途半端なところが多かったりするんだな。
まぁ、PCで使う分には全く問題はないんだけど(そのためのOSだし)。

というか、自世代GCまだ〜?ヽ(`Д´)ノ
■ このスレッドは過去ログ倉庫に格納されています