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

プログラミング言語 Lua

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

http://www.lua.org/
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とチャンポンも・・・ゲフンゲフン
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って感じかな?
■ このスレッドは過去ログ倉庫に格納されています