lua.vm.jsはJavaScript製のオープンソース・ソフトウェア(MIT License)です。

Luaはスクリプト言語で、かつプロトタイプベースのオブジェクト指向言語でもあります。という事はLuaとJavaScriptは意外と似通っているのかも知れません。という訳で(?)今回はlua.vm.js、JavaScriptで作られたLua VMを紹介します。

[![](http://images.moongift.jp/2013/06/Screenshot 2013-06-25 10.34.51_thumb.1372162759.png)](http://images.moongift.jp/2013/06/Screenshot 2013-06-25 10.34.51.1372162759.png)
こちらがLuaのコード。typeがtext/luaになっています。

[![](http://images.moongift.jp/2013/06/Screenshot 2013-06-25 10.34.33_thumb.1372162761.png)](http://images.moongift.jp/2013/06/Screenshot 2013-06-25 10.34.33.1372162761.png)
ちゃんとJavaScriptで実行されて結果が得られます。

[![](http://images.moongift.jp/2013/06/Screenshot 2013-06-25 10.35.24_thumb.1372162764.png)](http://images.moongift.jp/2013/06/Screenshot 2013-06-25 10.35.24.1372162764.png)
左がLuaのコード。右側がその実行結果です。localやprintといった差はあれどJavaScriptと似ています。

lua.vm.jsはEmscriptenを使ってLuaをJavaScript用にVM化しています。純粋なLuaのコードはもちろん、JavaScriptのコードを実行したり、DOMを操作する事もできます。速度はネイティブの半分程度で、VMのサイズは200KB程度になります(Gzip後)。

MOONGIFTはこう見る

JavaScriptが十分に高速化されれば、mrubyやLuaなどのVM上で実行してもそれほど過不足なく感じられるようになるかも知れません。そうなればより大規模な開発に対応したり、メンテナンスしやすいコードが書けるようになりそうです。

なおlua.vm.jsはFirefoxに最適化されているようで、Chromeではさらに遅くなってしまうようです。JavaScriptはブラウザ共通の言語ではありますが、それでも尚全てのコードが共通化して最適化される訳ではないようです。

lua.vm.js

kripken/lua.vm.js