コンパイルの話
LuaridaはLuaというスクリプトを実行する環境です。LuaスクリプトはLuaVMというバーチャルマシン上で実行されます。AndroidでいうとDalvikVMのようなものです。LuaVMはLuaスクリプトをそのまま読んで実行しているわけではなく、LuaVMにとって分かりやすい中間コードに変換されたものを読みながら実行しています。
Luaridaは、テキストで書かれたLuaプログラムだけで無く、このような中間コードとなったLuaファイルも実行させることができます。
それではこのような中間コードをどうやって作るかというと、Luaridaのプログラムで中間コードを生成するプログラムを書けばいいだけです。ここではLuaridaプログラムからLua中間コードを生成することをコンパイルと呼びます。
Luaコンパイラ
Luaプログラムを中間コードにコンパイルするプログラムを下記に示します。loadfile()でLuaプログラムを読み込む時に中間コード化されるので、それをそのままバイナリ保存しているだけです。
コンパイルして出来上がったコードには、ファイル名.luacという拡張子が付けられます。
------------------------------------------ --コンパイラ ------------------------------------------ --グローバル変数宣言---------------------- LuaridaPath="/sdcard/luarida" --luaファイルを保存しているPath ------------------------------------------ --メインプログラム ------------------------------------------ function main() local fp local filename, a local cfilename filename,a = editText("コンパイルするファイルの名入力\n(.luaも忘れずに)") if( a~=nil and a==1 and filename~=nil and filename~="" )then cfilename = filename.."c" fp = assert( io.open( LuaridaPath.."/"..cfilename,"wb") ) fp:write( string.dump(assert(loadfile(LuaridaPath.."/"..filename))) ) io.close(fp) toast(filename.."のコンパイルが終了しました") else toast("コンパイルを中止します") end end main()
このコンパイラを用いて生成したluacプログラムを、Luaridaでsystem.setrun("aaaa.luac")として起動しても問題なく動きます。
コンパイルすると何がいいかというと、特にいいところも無いのかもしれません。
- 実行前のコンパイル処理が省けるので少し起動が速くなる。
- 自分のプログラムが他の人に見られないので、恥ずかしくない?
とか、それくらいだと思います。