Lua について〜 2012 年版〜


MMF2 のエクステンションである「 XLua 」は「 Lua 5.1 」を組み込んであるのですが、それから時は流れすでに世間では「 Lua5.2 」が発表されています。

XLua はオープンソース化されているため技術がある人なら誰でも XLua を 5.2 で組んでコンパイルし直すこともできるはずなのですが誰もまだ手がけていません、…なぜか?

公開されている XLua のソースコードは中身を見ればすぐ理解して簡単に修正できる程単純なエクステンションではありません。MMF2 を使った一つのアプリみたいなもので、MMF2 の命令形も各種使える上にソースコードエディタとして XLua 内部には「 Scintira 」まで組み込まれているという凝った作りのものです。

それでは Lua5.1 と Lua5.2 では何が違うのかちょっと見て行きましょう。まず Lua5.2 では制御構造( Control Structures )に追加があり、具体的には「 goto 」が付いたようです。

  • varlist ‘=’ explist |
  • functioncall |
  • label |
  • break |
  • goto Name |
  • do block end |
  • while exp do block end |
  • repeat block until exp |
  • if exp then block {elseif exp then block} [else block] end |
  • for Name ‘=’ exp ‘,’ exp [‘,’ exp] do block end |
  • for namelist in explist do block end |
  • function funcname funcbody |
  • local function Name funcbody |
  • local namelist [‘=’ explist]

そして Lua 5.1 の基本関数がいくつか削除されています。自分が使っている範囲内だと「 loadstring 」が「 load 」に統合されてしまった。その他は「 getfenv 」「 setfenv 」「 unpack 」「 module 」など。これらは言語コンセプトの変更に伴い削除されたようです。

これまで存在しなかったビット操作についてはビット演算( Bitwise Operations )ライブラリ( bit32 )が Lua5.2 から追加・標準化されました。

こんな感じで大きな変更は無く、一部機能追加と一部機能がどっかに統合あるいは廃止された程度。それでも純粋に 5.2 の仕様で書いたコードは 5.1 だと動かないし、5.1 の仕様で書いたコードは 5.2 で動かないかもしれません。

言い換えると MMF2 の Extension としての XLua は Lua5.1 に対応していて、Lua5.2 のコードをフルサポートしません。

XLua は Lua5.2 を組み込んで作り直す意義があるかないかで言ったら、苦労するであろう作業や努力の割にあまり Lua5.2 を組み込むメリットは感じません。だから多分 XLua は「 Lua5.1 」をサポートし続けるかと思われます。

…という具合なので、MMF2 で Lua を使う場合、Lua のドキュメントやリファレンスは Lua5.1 の方を読んでください。現時点で最新版となる「 Lua5.2 」の goto とかには XLua じゃ対応していませんってことです。

参考Lua 5.2 Reference Manual
参考(Lua5.2)8.2 – Changes in the Libraries
参考(Lua5.2)9 – The Complete Syntax of Lua

参考Lua 5.1 Reference Manual
参考Lua 5.1 と Lua5.2 の違い