XLua の基礎 1

XLua はナニができるの?


XLua は MMF2 で LuaScript が使えるようになるというエクステンションです。

話しの本題に入る前に MMF2 の基礎概念 6を見てください。

MMF2 は関係演算子と算術演算子が充実しているので計算関連ではオーサリングツールの癖に意外と複雑な計算もこなすし処理速度もそこそこ速いです。計算は得意だけど次に MMF2 の弱点、ループ処理の問題に当たります。MMF2 はループ処理に標準で付属する「高速ループ」を使うのが一般的です。

高速ループはプログラミング言語でいう「 for、while、repeat 」的な機能、しかし名前の割にこのループはたぶんそれほど速くないっぽい。加えて MMF2 だと条件式の構造が単純化されてしまっているため「 else 」とか「 elseif 」といった分岐処理が素直に扱えません。さらに特定の処理を関数化したい場合やら配列やら文字列検索置換やら出力やら、これら全部エクステンションを探したりエクステンションの使い方を覚えたり・・・仕様もそれぞれ違うし必要な機能が出るたびに異なるエクステンションに頼るのはいちいちめんどくさい!

こんな MMF2 の数々の弱点を、スクリプティング開発環境を用意してくれることで一手に解決するのが XLua です。LuaScript はサイズの小ささと速度に定評があります。処理速度はスクリプト言語としては最速の部類で、JIT と組めば更に速い。XLua は LuaJITコンパイラも実装してます。

参考(外部リンク):謎のベンチマーク

●XLua でできること一覧

  1. 「高速ループ」を XLua の「 On Function 」に置き換え > Lua のループ処理を使う
  2. if 〜 に対して else elseif など普通に使える
  3. 処理の関数化
  4. 配列変数
  5. 文字列の検索・置換
  6. 設定ファイルとして利用(ファイルの読み込みと書き込み)

処理速度改善について、速くなる?ならない?

ループの置き換えは高速ループの使用よりも処理が速くなると言われていますが、特殊な計算でもやらない限り一般的には劇的な(体感)処理速度改善は無いと思います。しかし上記 1 ~ 6 の問題解決に全部異なるエクステンションを使うよりは XLua でうまくやればデータオーバーヘッドも減るだろうしトータルで軽くできるかもしれません。

MMF2 も全体で見れば致命的に遅いのはグラフィック描画関連が一番大きいので、MMF2 で PC 専用のゲームを作る上で現時点で一番致命的(に遅い)なのはグラフィックス処理(特に拡縮・回転)です。そして Lua を使用しても Lua のパフォーマンスを落とす書き方には注意が必要です。

for i = 1,1000000 do
local x = math.sin(i);
end;

に対して

local sin = math.sin;
for i = 1, 1000000 do
local x = sin(i)
end;

こういう書き方をすると比較で 30 % 程速くなるとか、他にも文字列連結演算子「..」の使用は重いから table.concat を利用するとか、変数は文字列型と数値型の区別をしないけど

a=”1″;
b=1;
=a+b;

と書いても答えは「 2 」が返ってくる仕様( coercion )は多用しないでとか上手な Lua との付き合い方を色々知る必要があります。

pdf

参考(外部リンク):Lua Performance Tips.:.Roberto Ierusalimschy

要するにナニをしても絶対速くなるとは言えず、多少速くなったとしてもどうせ MMF2 を使えばグラフィックス処理で転けるのですからむしろ速さより、MMF2 にまともなスクリプティング開発環境が用意されていることに喜びを感じてください。


>>次のページへ