2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

プログラミング言語 Lua  その2

1 :デフォルトの名無しさん:03/09/16 20:20
久しぶりに見ようと思ったら落ちてたよ・・・。
他の人サポ−ト頼む。
前スレ
http://pc2.2ch.net/test/read.cgi/tech/1034182349/l50
本家
http://www.lua.org/
5.0日本語訳
http://www.uri.sakura.ne.jp/~cosmic/yuno/lab/lua5_manual_ja.html

848 :デフォルトの名無しさん:2006/08/30(水) 23:11:24
>>847
そりゃ大まかに括ればその通りなんだけど。イメージとしては
UMLの実行モデル見たくして部分部分をC++に置き換えて
いけるような物に出来ないかなーと。まあ、単なる妄想だけど。

それは兎も角、
”..”とか使って生成た文字列が以前生成した文字列と内容が
同じな場合、以前の文字列に参照を追加して同じ文字列を複数
生成されない最適化が行われてるみたいね(多分)。
ただ、文字列が多くなると以前の文字列との比較に時間がかかって
しまい文字列生成のパフォーマンスが徐々に落ちてくるっていう、
マイナス面もあるみたい。
某所のGCパフォーマンス調査で文字列を大量に生成&破棄を
繰り返して調査してたけど、GCよりも文字列生成のパフォーマンス
を調査してるようなもんだと思った。


849 :デフォルトの名無しさん:2006/09/01(金) 03:11:20
一通り眺めてみたがGameMonkeyが使いやすそうだった。
スクリプト側で出来ることが少なくなるかもしれないが、
組み込みに関してC言語側の負担も小さそう。
小ぶりなフリーゲーム作るならこんなんで十分かも?

850 :デフォルトの名無しさん:2006/09/01(金) 11:40:56
>848
Lua 内で利用する文字列はすべて、参照時に「以前と同じ文字列があるかどう
か」をチェックしているよ。生成する経路はべつに関係ない。
またそのチェックはハッシュだから、理想的には文字列が増えてもパフォーマ
ンスはそれほど落ちない。

ただ、大量生成&破棄の繰返しの場合、ハッシュテーブルの再構成や再配置が
頻発すると思うので、そのコストが効いてくるんじゃないかと推測するがどう
か。


851 :デフォルトの名無しさん:2006/09/01(金) 13:23:27
>>850
Rehashする必要が増えてくるとハッシュテーブルのサイズを大きくとったりするようなタイプなの?
もしそうなら初期化時のような大量に文字列生成の可能性のある場所であらかじめテーブルサイズ拡大すると実行時のコスト下がるよね?
(ソースを読み下してないからそういうインターフェース無かったらごめん)


852 :848:2006/09/01(金) 19:37:10
>>850
私が試したコードは
collectgarbage("stop");for i=1,50000 do ; a=i.."aaaa..(ここ沢山)..a" ; end
です。長い文字列に関しては全文字がHash計算対象ではないので
Hash値が一致する文字列が多くなり、最後の文字列全比較に時間が
かかっているのではと考えています。

>>851
Hashテーブルのサイズは32固定っぽいです(ハードコーディング)
そこから倍々で増やしていくタイプです(多分)
少なくとも文字列用Hashテーブルサイズを指定するインターフェースは
私はしらないです。

問題はプログラム中で固定的に使用する文字列、例えば以下のコード
function set_abc(v) a["abc"]=v end
の”abc”と、実行時に毎回変わる文字列、例えば次のようなコード
function write_abc_with_n(n,v) io.write("abc"..n) end
で生成される文字列["abc"..n]が同じ扱いってのに問題があるのではと
思うのです。

まあ、試したコードが現実的では無いのはたしかですが。

853 :850:2006/09/01(金) 20:31:37
>852
あーなるほど、ハッシュ値の一致については考えてませんでした。そういう例
では頻発するかも。

文字列用のテーブルでサイズ指定するインタフェースはマニュアルには公開さ
れていないようですね。こっそり luaS_resize すれば出来ちゃいそうな気は
しますが。


209 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)