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

プログラミング言語 Lua

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

http://www.lua.org/
0382デフォルトの名無しさんNGNG
>>377
漏れ的には演算やループや関数呼び出しにメモリ確保がない(=GCが呼ばれない)だけで
十分に利用価値があると思うけどなぁ。
03835.0しか知らない新参者NGNG
>>381
HISTORYによるとオブジェクト指向的な要素が追加されたのは、
1.1→2.0の時のようですな。1995年ころのことらしい。
0384381NGNG
なるほど、TNX!
0385デフォルトの名無しさんNGNG
LUAと直接関係無いですが、
どういった部分にスクリプト機能を導入すると、効果的でしょうか?
いろんな例を知りたいです。宜しくお願いします。
0386デフォルトの名無しさんNGNG
>>377
Luaを含め、内部にVM持ってる系はほとんどがそうだが。
0387デフォルトの名無しさんNGNG
>>377じゃなくて>>382だった。
0388デフォルトの名無しさんNGNG
あ、Luaはgc呼ばれるんだっけ。
寝ぼけてた。すんません。
0389デフォルトの名無しさんNGNG
>>385 いろんな例
ttp://www.lua.org/uses.html
0390デフォルトの名無しさんNGNG
へー、MKD2で使われてんだ
0391デフォルトの名無しさんNGNG
>>386
うん。で、言語的に他に遜色ない記述能力を持ち、かつ、処理系が小さい。
だから、Luaに注目してるわけだが…。
0392デフォルトの名無しさんNGNG
>>391
小さいつったら、他にも沢山ありそうだけど。
あえてLuaに拘る理由って何?
0393デフォルトの名無しさんNGNG
>>392
よければ他のよさげな候補を教えてクレー。
0394デフォルトの名無しさんNGNG
>>392
まぁ、別にどうしても拘ってるってわけじゃないけどね。そう見えた?

組み込みというと、PythonやRubyがそういうのを意識したつくりになってるね。
Perlはどうなんだろう?
Pythonは世代別GCをもってるみたいなんで、Luaよりはリアルタイムな組み込み系に
向いてるかもしれない。そういう実績もあるみたいだし。
Rubyも世代別GCが実装されて、バイトコード化もされたんだっけ?詳しく追ってない。

あとは、Mozillaなんかに使われてるJavaScriptエンジンとか、
Netscapeで使われてたJavaScriptエンジン(njs)とかあたりも、ブラウザ以外の
アプリに組み込みで使われることを意識して作られてるね。
njsは実行効率も結構良いらしい(というのはとある日記の受け売りだけど…)。

言語の速度比較サイトとかみてみると興味深いかも。
http://www.bagley.org/~doug/shootout/

あと、LISPとかScheme系で使えそうなのがいろいろありそうだけど調べてない。
おれも情報求む。
0395デフォルトの名無しさんNGNG
PythonやRubyは組み込むにはちょっとでかいなぁ。
誰でも使いこなせるほどにはコンパクトな仕様じゃない。
あと、ライブラリのスクリプトも同梱しなきゃなんないし。
0396デフォルトの名無しさんNGNG
>>394

lua思ったより早いですよね。

0397394NGNG
あー、そうだ、Luaに興味を持ったのはcoroutine(協調型thread)が使えるからだった。
glueとしてのスクリプトだけじゃなくて、各オブジェクトの振る舞い記述にも使えそう
かなぁ、と。だから拘って見えるのは正解だ。

ちなみにpythonもstackless pythonという実装があって、こいつもおんなじ様なことが
できるみたいね。
http://www.stackless.com/spcpaper.htm
0398デフォルトの名無しさんNGNG
最近の(Stacklessでない方の)Pythonにはgenerator
って仕組みがあってコルーチン的に使えるんだが、
これ以上はスレ違いなのでsage
0399デフォルトの名無しさんNGNG
>>396 tr 早 速
この速さ(と小ささ)は ruby も見習って欲しいです
0400デフォルトの名無しさんNGNG
 Luaの魅力はやっぱコードサイズの小ささだろ。後は組み込みの容易さ。
Pythonは気軽に使うにはちと繁雑。Rubyはライセンスうざいから無視。
 あと、複数帰り値や可変引数の扱いが非常にイイ。そんな訳でGCに絡む
メモリ周りはなんとかしたいですね…。
0401デフォルトの名無しさんNGNG
rubyウザクないよ。デマ流すな。
Artisticライセンス(Perlで使われてるもの)使えばいいでしょ。
0402デフォルトの名無しさんNGNG
Luaは特に小さいとは思えないが。
言語の大きさはほとんどがライブラリの大きさだよ。
0403デフォルトの名無しさんNGNG
>>402
比較するならなんかデータを示してほしーなーとか。
ポインタでもいいから。
0404デフォルトの名無しさんNGNG
ぽいんた?
0405デフォルトの名無しさんNGNG
既存の比較がないなら今から比較してもいいんだが、
組み込み型やクラスを外すとその型やクラスに関係した文法の
意味論が無効になるわけだがその場合同じ言語と呼べるのか否か。
0406デフォルトの名無しさんNGNG
LISP系は全部はずしたら何も出来なくなる…。
0407デフォルトの名無しさんNGNG
ぅあ
0408デフォルトの名無しさんNGNG
世代別GCは、今実装してるっぽい?
どの辺が、"some internal modifications"なんだろ?

http://lua-users.org/lists/lua-l/2002-10/msg00191.html

> what is the current plan for GC in Lua 5 [...]

We are planning to release 5.0, and then to start working in a
generational GC for 5.1. To make a new GC for 5.0 would delay too much
its final release.

-- Roberto

http://lua-users.org/lists/lua-l/2003-01/msg00147.html

>"incremental garbage collection"? Are there plans for an incremental
>collector or is the generational one being summerised (wrongly?) as an
>incremental one? Did I miss something?

You read it right, we plan to have incremental garbage collection in 5.1.
Lua 5.0 already has some internal modifications to allow this but the real
work will begin as soon as Lua 5.0 (final) is released officially.
--lhf
0409デフォルトの名無しさんNGNG
>>400
smallとかどうですか?
http://www.compuphase.com/small.htm

parser無しで50Kくらい。
JIT、デバッガつき。ポインタ、GCが無い。Cライク文法。
実績:
 halflife admin mod
 NoX: free Ultima Online Server
 他
0410デフォルトの名無しさんNGNG
>>409
いいねこれ。
#if とか使えるのが特に。
まさに組み込み向け?
0411デフォルトの名無しさんNGNG
ICIは割とよく聞く名前なんだけどどうかな
ttp://ici.sf.net/
0412デフォルトの名無しさんNGNG
>>ici はパブリックドメインなのがいい!
0413デフォルトの名無しさんNGNG
組み込み向け言語スレ、作った方がよくないか?
light wight 言語萌え
0414デフォルトの名無しさんNGNG
もう少しここで比較してもいいんじゃないかと思う
0415デフォルトの名無しさんNGNG
>>408
 Lua5.1か…。意外とリリースは早いのかな?ところで次世代GCと呼ばれる
ものはどういうものを指すのかな?GC+SmartPointerと見て問題なさげ?

 smallって開発止まってたと思い込んでいたけどそうでもなかったのね。
ところで軽量スクリプト言語でリコンストラクトをサポートしているモノ
ってありますか?記憶領域ブロックを保存することで同じ状態を再現でき
るようなもの。
 Unrealに使われているスクリプトエンジンがそんな感じっぽかったんだ
けど、さすがに汎用ではそんなのないか…。
0416デフォルトの名無しさんNGNG
初歩的な事なんで質問ですが、
sin()とかcos()とかを自前の奴に差し替えたいんですがどうしたらいいんでしょうか?
0417デフォルトの名無しさんNGNG
>>415
>次世代GC
ナニソレ?

>記憶領域ブロックを保存することで同じ状態を再現できるようなもの。
これは永続化の事を言ってるの?だとしたら、全てのオブジェクトを
GCのマークフェーズの様に辿れる状況であれば、オブジェクトの
アドレスをインデックスに変換するだけでファイルから読み書きできる。
自作の言語でも使ってるけど、昔いくつかのLISP処理系でも見かけた。
あと、この機能を抜き出した単体製品もあった。
ただし、ポインタを辿らせる関係で色々設定が必要。
0418デフォルトの名無しさんNGNG
>>415
generational GC のことを言っているなら「次世代 GC」じゃなくて「世代別 GC」

どういうものかは Paul R. Wilson の
Uniprocessor Garbage Collection Techniques あたりでも参照してください。
0419デフォルトの名無しさんNGNG
Lua で採用する次の GC の候補のことなんじゃねえの
0420デフォルトの名無しさんNGNG
>>416
ttp://lua-users.org/wiki/BindingCodeToLua
0421デフォルトの名無しさんNGNG
世代別GC(Generational GC):
ゴミになるオブジェクトのほとんどが新規作成されたオブジェクトであるという
仮定の元に作られたGC。通常は新しいオブジェクトのみを対象としたGCを
行うことで、対象オブジェクト数を減らしGCのスピードを稼いでいる。
http://ruri.csys.ce.hiroshima-cu.ac.jp/~masato/research/master-slide/
http://www.atmarkit.co.jp/fjava/rensai2/webopt06/webopt06.html

インクリメンタルGC(Incremental GC):
GCを分割して行えるようにしたもの。GC時間が分割できるのでリアルタイム向け。
全体のGC時間は大きくなる。
http://members.tripod.co.jp/zzyyb/gc/incremental-collector.html

両方の手法をあわせたものもあるみたい。
>>408のlhfが言ってるincremental garbage collectionがどれをさしてるのかは
分からないが。ただ、参照カウントにはならなそうだね。オーバーヘッドやら
実装の複雑性やらが云々とか書いてあった。
0422デフォルトの名無しさんNGNG
>>420

メッチャ、サンスコ。
0423デフォルトの名無しさんNGNG
sweepをlazyにしたm&s-gcが単純で速い。
markを世代別にすればさらに無駄が少なくなる。
0424デフォルトの名無しさんNGNG
>>417
 まぁなんていうか知らないけど、漏れは再構築機構と呼んでます。漏れの
Luaのな使い方はアプリケーションのステータスやインストラクション情報の
構築なんかなんだけど(ゲームで言えばステージセットや敵の配置やイベント
処理ね)、これをLuaコードで吐き出すのではなくLuaに確保した配列情報を
そのままLuaバイナリイメージで保存してそのまま復元できたりすると便利だろうなぁと。

 例えばアプリのコンフィグデータを扱うような場合を考えてみると便利
さが解ると思います。更に将来的にデータが拡張されたりユーザ数によって
サイズが可変したりなんて場合にも連想配列で扱えると便利ですよね?
0425デフォルトの名無しさんNGNG
コアダンプみたいなものね
しかしインタプリタの実装が変わったらアウトなんでは?
コルーチンを永続化したいのでない限りは、
単にテーブルをシリアライズして持っとけば十分と思うんだが。
0426山崎渉NGNG
(^^)
0427デフォルトの名無しさんNGNG
GCによっては、予期しないエラーが発生したりしないですか?
0428デフォルトの名無しさんNGNG
しない。
つーか主語が何なのか書けよ。質問する前に日本語なんとかしろ。
0429デフォルトの名無しさんNGNG
主語は書いてあるだろgolua!
0430デフォルトの名無しさんNGNG
在日はこれだから困る( ´A`)
0431デフォルトの名無しさんNGNG
luaに刺激されて新しいスクリプトを作ってみたんだけど。。。
演算(+-*/)とif文だけ作って、strip しても既に30kB
luaは脅威だ!!
0432デフォルトの名無しさんNGNG
>>431
ネタですか?
手元にある、
read.eval.gc.cons.car.cdr.quit.defun.lambda.quote.setq.eq.null.atom.
numberp.print.terpri.rplaca.rplacd.progn.cond.and.or.not.list.+.-.*./.divide.>.<
が組み込まれた習作LISPの実行ファイルは19kb、
quote.if.lambda.set!.macro.begin.define.while.with-input-from-file.with-output-to-file.
and.or.quasiquote.unquote.unquote-splicing.sharp-hook.car.cdr.cons.read.write.load.eq?.
strcat.gc.oblist.pair?.null?.symbol?.string?.number?.macro?.newline.memq.apply.substring.
read-char.write-char.list->string.string->list.not.add2.sub2.mul2.div2.mod2.<.>.<=.>=.display.
string-length.string->symbol.symbol->string.length.string->number.number->string.eqv?.
peek-char.back-char.getd.procedure?.closure?.set-car!.set-cdr!.eval.append2.identity
が組み込まれたSchemeの実行ファイルは26kbですが。
ちなみにUPXで圧縮するとそれぞれ10kb, 14kb,。
ソースは両方ともC言語で700行以下。mingw -O2 strip
0433デフォルトの名無しさんNGNG
call/ccも欲しい





ってそういう話題じゃないか…。
0434431NGNG
いや、本当だ。
でも700行でなにがでるんだろう?

今の段かいでwc-lしてみたけど、約2000行いってた。

もちろん、これを1行で書くことも出来るわけだが。。。(w
0435431NGNG
ちなみに、意味のないことかもしれんが1〜100万までを単純ループで
足し算して合計を求めてみたが。。。

<2000行>
real0m1.234s
user0m1.230s
sys0m0.010s

<lua>
real0m1.538s
user0m1.530s
sys0m0.010s

<ruby>
real0m8.752s
user0m8.710s
sys0m0.010s

と、とりあえずは早いみたい。32ビットコードに変換して
実行させてるからかな?(大きさ&速度)

激しくオフトピなのでsage
0436デフォルトの名無しさんNGNG
>>435
rubyってもっと遅くない? >>32
0437デフォルトの名無しさんNGNG
24行もあればBASICインタプリタが
書けることが実証されていますが…
ttp://www.ioccc.org/1990/dds.c
0438デフォルトの名無しさんNGNG
>>437
BASICではないように見えるが…
0439>>436NGNG
これみるとrubyはluaより5倍ぐらい遅いみたいね
十分遅いとおもうけど?(w
0440デフォルトの名無しさんNGNG
>>432
うpしる!!!!

ていうかして下さいお願いします(=´ω`)
0441デフォルトの名無しさんNGNG
>>437
なにいれてもOkしか帰って来ない?
0442デフォルトの名無しさんNGNG
lua の フックの仕方が今一よくわからない。
0443デフォルトの名無しさんNGNG
>>441
$ ./dds
Ok
100 S = 0
Ok
120 FOR I = 1 TO 100
Ok
130 S = S + I
Ok
140 NEXT I
Ok
150 PRINT S
Ok
RUN 100
5050
Ok
0444デフォルトの名無しさんNGNG
ttp://www0.us.ioccc.org/1990/dds.hint
ttp://www0.us.ioccc.org/1990/LANDER.BAS
0445デフォルトの名無しさんNGNG
いつのまにか俺言語自慢大会に?
0446デフォルトの名無しさんNGNG
>>422

すまそ。自己解決。
日本語マニュアル良い感じで訳されて( ・∀・)イイ!!
0447>>443NGNG
TNX!
なるほど出来た、たいしたもんだね。
100万回ループさせたら、桁溢れしたけど(桁溢れを考慮すると)
値は正しいものだった。

ちなみに、速度は。。。
同一環境で。。。

real0m4.990s
user0m4.980s
sys0m0.000s

こちらも、このソースを考えればすごい!

rubyは、オブジェクト指向なので単純比較は出来ないのかもしれんが、
やはり遅いようだね。
0448デフォルトの名無しさんNGNG
四則演算するにもオブジェクト参照とメソッドコールが発生するからね。
0449デフォルトの名無しさんNGNG
1) lua: while
function loop()
 local i = 1000000
 while i > 0 do
  i = i - 1
 end
 return i
end

2) 700行scheme: while
(define (a)
 (let ((i 1000000))
  (while (> i 0)
   (set! i (- i 1)))
  i))

3) 700行scheme: tail call
(define (b)
 (let loop ((i 1000000))
  (if (> i 0) (loop (- i 1))
   i)))

1) 842msec
2) 973msec
3) 2108msec

誤差はあるけど順位は変わらないです。
schemeはread時点でmacro-expand済み。
3)はgcの影響。ちゃんとフロー解析して2)に近づけるのが目標。
0450デフォルトの名無しさんNGNG
みんな、たいした門だ、
やっぱり、こういうことするには大学の情報系出てるか、
独学で難しい理論しってる必要あるの?
0451デフォルトの名無しさんNGNG
大学の情報系出てて難しい理論知ってても、こういう事できない人は多い。
0452デフォルトの名無しさんNGNG
最も大事なのは、やる気、努力、根性、など。
その次に経験が重要で、それらがあれば知識は自然に付いてくる。
ちがうかなぁ?
0453デフォルトの名無しさんNGNG
速度的にはLuaもいいセンいってるのかな?
ソース見てみると結構煩雑に見えるけど。
0454デフォルトの名無しさんNGNG
>>453
たしか、上のほうで誰かがHP書いてくれてたけど、
他のスクリプトと比べてもかなり良い線入ってる漢字がした。
配列がやや遅い漢字もするが、これはハッシュと同一なので
納得できるきもする。

いかが?>ALL
0455デフォルトの名無しさんNGNG
break の文法的制約が繁雑なのと continue がないのは結構不便。
0456デフォルトの名無しさんNGNG
if ... then
end

萎える

あと、 functionなんで古スペル?
0457デフォルトの名無しさんNGNG
>>456
お前もか。
俺も、

if ... then begin
end

でないと、と思ったよ。

> function
さすがに、funcとか、fnだと萎えるだろ?
0458デフォルトの名無しさんNGNG
また構文の話か。
Luaは生涯、この手の話題で無限ループだな。
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とチャンポンも・・・ゲフンゲフン
■ このスレッドは過去ログ倉庫に格納されています