プログラミング言語 Lua
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGhttp://www.lua.org/
0413デフォルトの名無しさん
NGNGlight wight 言語萌え
0414デフォルトの名無しさん
NGNG0415デフォルトの名無しさん
NGNGLua5.1か…。意外とリリースは早いのかな?ところで次世代GCと呼ばれる
ものはどういうものを指すのかな?GC+SmartPointerと見て問題なさげ?
smallって開発止まってたと思い込んでいたけどそうでもなかったのね。
ところで軽量スクリプト言語でリコンストラクトをサポートしているモノ
ってありますか?記憶領域ブロックを保存することで同じ状態を再現でき
るようなもの。
Unrealに使われているスクリプトエンジンがそんな感じっぽかったんだ
けど、さすがに汎用ではそんなのないか…。
0416デフォルトの名無しさん
NGNGsin()とかcos()とかを自前の奴に差し替えたいんですがどうしたらいいんでしょうか?
0417デフォルトの名無しさん
NGNG>次世代GC
ナニソレ?
>記憶領域ブロックを保存することで同じ状態を再現できるようなもの。
これは永続化の事を言ってるの?だとしたら、全てのオブジェクトを
GCのマークフェーズの様に辿れる状況であれば、オブジェクトの
アドレスをインデックスに変換するだけでファイルから読み書きできる。
自作の言語でも使ってるけど、昔いくつかのLISP処理系でも見かけた。
あと、この機能を抜き出した単体製品もあった。
ただし、ポインタを辿らせる関係で色々設定が必要。
0418デフォルトの名無しさん
NGNGgenerational GC のことを言っているなら「次世代 GC」じゃなくて「世代別 GC」
どういうものかは Paul R. Wilson の
Uniprocessor Garbage Collection Techniques あたりでも参照してください。
0419デフォルトの名無しさん
NGNG0420デフォルトの名無しさん
NGNGttp://lua-users.org/wiki/BindingCodeToLua
0421デフォルトの名無しさん
NGNGゴミになるオブジェクトのほとんどが新規作成されたオブジェクトであるという
仮定の元に作られた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メッチャ、サンスコ。
0423デフォルトの名無しさん
NGNGmarkを世代別にすればさらに無駄が少なくなる。
0424デフォルトの名無しさん
NGNGまぁなんていうか知らないけど、漏れは再構築機構と呼んでます。漏れの
Luaのな使い方はアプリケーションのステータスやインストラクション情報の
構築なんかなんだけど(ゲームで言えばステージセットや敵の配置やイベント
処理ね)、これをLuaコードで吐き出すのではなくLuaに確保した配列情報を
そのままLuaバイナリイメージで保存してそのまま復元できたりすると便利だろうなぁと。
例えばアプリのコンフィグデータを扱うような場合を考えてみると便利
さが解ると思います。更に将来的にデータが拡張されたりユーザ数によって
サイズが可変したりなんて場合にも連想配列で扱えると便利ですよね?
0425デフォルトの名無しさん
NGNGしかしインタプリタの実装が変わったらアウトなんでは?
コルーチンを永続化したいのでない限りは、
単にテーブルをシリアライズして持っとけば十分と思うんだが。
0426山崎渉
NGNG0427デフォルトの名無しさん
NGNG0428デフォルトの名無しさん
NGNGつーか主語が何なのか書けよ。質問する前に日本語なんとかしろ。
0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNG演算(+-*/)とif文だけ作って、strip しても既に30kB
luaは脅威だ!!
0432デフォルトの名無しさん
NGNGネタですか?
手元にある、
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ってそういう話題じゃないか…。
0434431
NGNGでも700行でなにがでるんだろう?
今の段かいでwc-lしてみたけど、約2000行いってた。
もちろん、これを1行で書くことも出来るわけだが。。。(w
0435431
NGNG足し算して合計を求めてみたが。。。
<2000行>
real0m1.234s
user0m1.230s
sys0m0.010s
<lua>
real0m1.538s
user0m1.530s
sys0m0.010s
<ruby>
real0m8.752s
user0m8.710s
sys0m0.010s
と、とりあえずは早いみたい。32ビットコードに変換して
実行させてるからかな?(大きさ&速度)
激しくオフトピなのでsage
0436デフォルトの名無しさん
NGNGrubyってもっと遅くない? >>32
0437デフォルトの名無しさん
NGNG書けることが実証されていますが…
ttp://www.ioccc.org/1990/dds.c
0438デフォルトの名無しさん
NGNGBASICではないように見えるが…
0439>>436
NGNG十分遅いとおもうけど?(w
0440デフォルトの名無しさん
NGNGうpしる!!!!
ていうかして下さいお願いします(=´ω`)
0441デフォルトの名無しさん
NGNGなにいれてもOkしか帰って来ない?
0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNG$ ./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デフォルトの名無しさん
NGNGttp://www0.us.ioccc.org/1990/LANDER.BAS
0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNGすまそ。自己解決。
日本語マニュアル良い感じで訳されて( ・∀・)イイ!!
0447>>443
NGNGなるほど出来た、たいしたもんだね。
100万回ループさせたら、桁溢れしたけど(桁溢れを考慮すると)
値は正しいものだった。
ちなみに、速度は。。。
同一環境で。。。
real0m4.990s
user0m4.980s
sys0m0.000s
こちらも、このソースを考えればすごい!
rubyは、オブジェクト指向なので単純比較は出来ないのかもしれんが、
やはり遅いようだね。
0448デフォルトの名無しさん
NGNG0449デフォルトの名無しさん
NGNGfunction 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デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNGその次に経験が重要で、それらがあれば知識は自然に付いてくる。
ちがうかなぁ?
0453デフォルトの名無しさん
NGNGソース見てみると結構煩雑に見えるけど。
0454デフォルトの名無しさん
NGNGたしか、上のほうで誰かがHP書いてくれてたけど、
他のスクリプトと比べてもかなり良い線入ってる漢字がした。
配列がやや遅い漢字もするが、これはハッシュと同一なので
納得できるきもする。
いかが?>ALL
0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNGend
萎える
あと、 functionなんで古スペル?
0457デフォルトの名無しさん
NGNGお前もか。
俺も、
if ... then begin
end
でないと、と思ったよ。
> function
さすがに、funcとか、fnだと萎えるだろ?
0458デフォルトの名無しさん
NGNGLuaは生涯、この手の話題で無限ループだな。
0459デフォルトの名無しさん
NGNG漏れは、
if(...){
}
の方が楽で良いな。あと関数はfuncがよくない?
なんつーか、最近の言語ってキーワードが長過ぎて萎え萎え
0460デフォルトの名無しさん
NGNGbegin無いほうがすっきりするよ。
Wirth先生もModula-2ではbegin無くしてたし
0461デフォルトの名無しさん
NGNG0462山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0463デフォルトの名無しさん
NGNGなんか宣伝とか比較とか実験とかそんなのばっかりだし。
0464デフォルトの名無しさん
NGNG前に C もどきのマクロ言語作ったことあったけど、
次にそういう仕事があったら Lua 使うかも。
言語仕様考えるのって大変。
0465デフォルトの名無しさん
NGNG漏れはプライベートプログラムじゃ活用しとるが、仕事ではまだ使うには
情報不足やねぇ。で、こんなスレに足げに通ってるワケだ。
でも、何となくだけどアマチュアプログラムの組み込みにLuaはちょっと来
るんじゃないかという予感もあるよ。HSPとかあの辺の層を一気に取り込む
だけの動きがあるんじゃないかと。もちろん漏れはそんなのには興味ないが
そういうコミュニティからLuaへのフィードバックは期待できるしなー。
0466デフォルトの名無しさん
NGNGこれ何?
0467山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0468デフォルトの名無しさん
NGNGおいらは、Lua使って弾幕記述言語作ってる。
HSP用のプラグインもついでに作ってるんだが、並列で走らせる方法
とwait時抜け出す方法が分からなくて・・・。
hook使うの分かってるんだがどうも。
0469デフォルトの名無しさん
NGNGなにそれ?
0470デフォルトの名無しさん
NGNG0471デフォルトの名無しさん
NGNG構文違うし、これといったメリットないし、
さらに、マイナーで、究めつけはまだバグが多くて、仕様がよく変わる。
やはり、組込み向けぐらいかね?漏れは知らんけど。。。
0472デフォルトの名無しさん
NGNG0473GoLua
NGNG0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNGYaccとかそういうのつかっててくれればなぁ…。
0476デフォルトの名無しさん
NGNG0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG0479468
NGNGこのスレもしかして見られてるのかな?
0480デフォルトの名無しさん
NGNG見てます。別の弾幕記述言語として、
Lua使ってみたいなーと思って検索したらこのスレ見つけました。
ゲームの組み込みには本当にいいですね。
0481468
NGNG0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNG…としょうがないから反応してみる。
0484デフォルトの名無しさん
NGNG…としょうがないから反応してみる。
MinGWでうまくコンパイルできないんです。
0485デフォルトの名無しさん
NGNGmame32plus!のコンパイルに使ったmingwセットだけどw
cygwinで-mno-cygwinだとライブラリは問題なくコンパイルできるけど
lua.exeがなんかうまくcygwinフリーにならない…
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNG0488449
NGNG2) 66msec
3) 564msec
にまで上がった。
ちなみにもう700行じゃない。
(Cで2000行、schemeで5000行程度)
2)と3)で、またかなり差が開いたが、
2)はループ全体をネイティブコードに変換できた結果。
簡単な演算なら全てネイティブ変換可能にした。
環境に対しての変数参照の手数が結構ある事と、
毎回デクリメントで型変換が発生するのでC言語程速くはならない。
これ以上は型について解析しないと改善されない。
3)はloop呼び出しで一旦ネイティブコードの中断が起きるのと、
毎回環境フレームの移動が起こる結果。
このケースではフレームの直接上書きが可能な事に着目すれば
もうちょっと改善される。whileに形式変換してしまう手もある。
GCは明示的にcons等やclosureを生成していかない限り、起動されることはない。
0489山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0490デフォルトの名無しさん
NGNG関数も含めた内部状態を丸ごと保存・丸ごと復帰したいんだけど
方法が判らんぜよ。
luacみたくluaL_loadfile()してluaU_dump()する方法なら問題なく
できるんだけど・・・もしかしてluaL_dofile()、lua_dostring()した
結果は保存不可?
0491デフォルトの名無しさん
NGNGどうすればよいでしょうか?
Cのincludeのようなものがあるのでしょうか?
それともlua_Stateを使ってなんらかのバインド処理を行うことが
できるのでしょうか?
0492デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNGまたまたご冗談を・・・・
猿がそんなことできるわけないでしょ。
0494デフォルトの名無しさん
NGNGdofile("")
0495デフォルトの名無しさん
NGNG一瞬顔文字に見えたし。
0496デフォルトの名無しさん
NGNG8ヶ月前にレスするなんて遅すぎでは?
0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNGマチクタビレタ〜
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・) < Incremental GCまだ〜?
\_/⊂ ⊂_ ) \_____________
/ ̄ ̄ ̄ ̄ ̄ ̄ /|
| ̄ ̄ ̄ ̄ ̄ ̄ ̄| |
| 愛媛みかん |/
0499デフォルトの名無しさん
NGNGGOLuaどーなってるの? >>477
0500500
NGNG0501デフォルトの名無しさん
NGNGcoroutineつかって1キャラ1スレッドとかやってみた。
BulletMLみたいに逐次っぽく書けるやつ。それっぽく動いてる。
LuaXMLとかやったひといる?使い勝手とかどうなんでしょ。
http://lua-users.org/wiki/LuaXml
0502480
NGNG期待っす。面白いものができたらぜひ公開してくださいな。
coroutine って速度的にはどうですか?
LuaXML に関してはなんで Lua から XML を
いじる必要があるんだろうかと思ってしまいますが…
たぶん C/C++ 側で処理した方が良いのでは。
0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNGHSPプログラムコンテスト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を再利用したい場合、どうしたらいいんだろう?
あ、再利用ってのは、lua_newthread()で作ったthreadの再利用ね。
スレッド毎回作るのは重そうだから、プールしといて再利用しようと思ったんだけど、
実行が終わってないと、再利用してlua_resume()呼んでも前の関数の続きが
実行されちゃうんだよね(あたりまえだが…)。
0506505
NGNG今のところうまく動いているように見える。
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=501
NGNG>coroutine って速度的にはどうですか?
とりあえず、スレッド付きオブジェクトを200個くらい表示させてみても
60FPSは出てたみたいだから、そんなに遅くないみたい(Pen!!!866Mhz)。
ソース見ても関数呼び出しとほとんど同じだしね。
0508デフォルトの名無しさん
NGNGgod!
できたら実装例キボンヌ。
> MITライセンス
見てみたけど、BSDライセンスと同様に扱ってOKって感じかな?
0509デフォルトの名無しさん
NGNG> 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デフォルトの名無しさん
NGNGpairs()やipairs()が使えなくなることに気づいた!
イテレータ間数の取り出しが元のグローバル変数テーブルに依存してんだね。
0511デフォルトの名無しさん
NGNG「スレッドを作ったときは、このテーブルは元のステートのものと同じであるが、それぞれ独立に変更できる。」 かな?
0512デフォルトの名無しさん
NGNG最初は「同じテーブルオブジェクト」を指してるけど、別々のものに
置き換えることも出来るという意味なんだね。
1文目が微妙なんだよなぁ…。あれじゃ、テーブルへのリファレンスの
話じゃなくてテーブル本体の話だと思っちゃうよ。
MLの方には、こう直したほうがいいとかいう話題も上がってた。
"Thread may have an independent table for global variables."
これなら解る。
■ このスレッドは過去ログ倉庫に格納されています