コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

コンパイルの話

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")として起動しても問題なく動きます。


コンパイルすると何がいいかというと、特にいいところも無いのかもしれません。

  • 実行前のコンパイル処理が省けるので少し起動が速くなる。
  • 自分のプログラムが他の人に見られないので、恥ずかしくない?

とか、それくらいだと思います。