良いLuaからJavaScriptへのコンバーターを見つける必要があります。 luaforge.orgのlua2jsは古く(3年ほど前で、Lua 5.1では機能しないようです)、Googleでまだ何も見つかりません。
誰か他のコンバーターの経験はありますか? Lua 5.1で動作し、できれば.NETベースである必要がありますが、.NETは必須ではありません。 javascriptluaインタープリターも同様に機能します。
新しいチャレンジャーが表示されます:Lua.js https://github.com/mherkender/lua.js
その成熟度を証明するいくつかの素晴らしいデモについては、 https://github.com/ghoulsblade/love-webplayer を参照してください。
Lua.jsは、Luaコードを直接ECMAscript(JavaScript、ActionScriptを含む)に変換することで機能します。これにより、JavaScriptでLua VMを実装しようとするソリューションよりも速度が大幅に向上します。
これはLuaリストで繰り返される質問です。これは、2つの言語が表面的に類似しているためだと思います。
残念ながら、それほど明白ではない多くの重要な違いがあります。それを機能させるには、Luaのバイトコードの代わりにJSをターゲットとする本格的なコンパイラーか、JavaScriptでLua VM)を書き直す必要があります。
Lua2jsの当初の目標はわかりません。しかし、それが単に限定された「翻訳者」である場合、翻訳されることを意図したLuaコードを書くことは、Luaについての素晴らしいことのほとんど(すべて?)を否定するでしょう。たとえば、JavaScriptではキーは文字列(および数字?私にはわかりません)のみであるため、関数をテーブルキーとして使用できるとは思いません。
.NETの選択はより合理的であり、既存のコンパイラを変更して、標準のLuaバイトコードの代わりにCLRバイトコードを出力することができます。 CLRが他の種類の言語用に設計および最適化されている場合でも、非常にうまく実行できるほど一般的です。主なハードルは、図書館の利用可能性です。
私が見つけたもう1つのオプションは、RobertoIerusalmschyとFabioMascarenhasによる この論文 です。ここでは、LuaVMバイトコードをCLRバイトコードに変換する方法を検討しています。
学術論文ではいつものように、それが書かれた日付についての表示がないので、それが新しくて革命的なのか、古いので忘れられているのかわかりません。
ljsには、javascriptでのluavmの動作デモがあります。ソースコードは、luaで記述されたluaインタープリターを使用してブラウザーでコンパイルすることもできます。
Emscripten JavaScriptに変換されたLuaインタープリターが含まれています。できます ブラウザで試してみてください 。ただし、サイズは1.5MBです。
私はこの実装を使用しています https://github.com/mherkender/lua.js 前の回答で言及されました。オフラインとロード時の解析のいずれかを実行し、非常に使いやすいことがわかりました。
私のLuaスクリプトはC関数を介して呼び出していましたが、そのCコードをJavascriptに変換し、lua.jsに接続するのは非常に簡単でした。
http://luajs.org にアクセスして、私の作品をご覧ください。
サイトメニューにはデモとベンチマークがあります。
圧縮前はわずか35.5K、圧縮後は12.2Kです。 Javascriptオブジェクト/配列に直接アクセスできます。ほぼ毎日更新されます。
Lua.vm.jsよりも高速です。 (メタテーブル実装のためそれほど速くはありません)、そして私はそれを最適化し続けます。
部分的に完全なLuaからECMAscriptへの静的コンパイラーを作成しました。
https://github.com/mherkender/lua2js-experiment
プロジェクトには多くの重要な機能が欠けているため、ニーズを満たしていない可能性があります。行き止まりであるため、急いで完了することはありません。詳細については、READMEを参照してください。
私がインターネットで見たいくつかの懸念にもかかわらず、Javascriptが実際にサポートできないLua固有の機能(* fenv関数やほとんどのデバッグライブラリなど)はごくわずかです。ファイルライブラリのような他のものは、VMがアクセスできる機能によって制限されます。
私も個人的にLua + Emscriptenオプションを試しましたが、印象的ですが、非常に遅いです。
これを行う1つの方法は、 LuaSub を使用し、Lua出力の代わりにJavaScriptを生成することです。これは、合理的な努力で行うことができます(現在、LuaSubはそれを行いません)。
JSをLuaの要件に合わせることができない場所は、コンパイル時に発見され、エラーを引き起こす可能性があります。
将来的にはJS + SVGをたくさんやるつもりですが、JS側が頭痛の種になった場合は、これを試してみるのもいいかもしれません。他の誰かが行きたいと思ったら、そうしてください。 LuaSubソースはあなたのためにあります。
もともと、LuaSubはLua 5.1の構文エクステンダーとして作成され、標準のLuaとの互換性を損なうことなく、またはパッチを適用することなく、使いやすさの概念(インクリメント、タイプチェックなど)を導入しました。これは MetaLua に似ています(これはより一般的になっているようです)。
Javascriptへの翻訳は、ブラウザ側でjavascriptを置き換えることができるようにするために興味深いものです。ブラウザでも型安全性を少し取ることができます。プラットフォームとしてJavaScriptをターゲットにすることは、最も普及しているプラットフォームの1つである地球のブラウザーをターゲットにすることです。 GWTはJava2jsを実行しますが、アプリケーションの数ページだけにGWTを導入したいかどうかはわかりません。考えさせていただきます。テーブルのキーとして機能するには、実行する必要のある魔法が必要です。コンパイル時に各関数に一意の名前を割り当てて、それをキーに使用するだけかもしれません。型チェックのためにすべてのキーにプレフィックスを追加することもできます。これは良いスタートです。