Lua から JavaScript への優れたコンバーターを見つける必要があります。luaforge.org の lua2js は古くなっています (3 年ほど前のもので、Lua 5.1 では動作しないようです)。Google ではまだ何も見つかりません。
他のコンバーターを使用した経験のある人はいますか? Lua 5.1 で動作し、できれば .NET ベースである必要がありますが、.NET は必須ではありません。JavaScript lua インタープリターも同様に機能します。
Lua から JavaScript への優れたコンバーターを見つける必要があります。luaforge.org の lua2js は古くなっています (3 年ほど前のもので、Lua 5.1 では動作しないようです)。Google ではまだ何も見つかりません。
他のコンバーターを使用した経験のある人はいますか? Lua 5.1 で動作し、できれば .NET ベースである必要がありますが、.NET は必須ではありません。JavaScript lua インタープリターも同様に機能します。
新しい挑戦者が登場: 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 つの選択肢は、Roberto Ierusalmschy と Fabio Mascarenhas によるこの論文で、LuaVM バイトコードを CLR バイトコードに変換することを検討しています。
学術論文ではよくあることですが、それが書かれた日付についての表示はありません。そのため、それが新しく革新的なものなのか、それとも古くて忘れ去られたものなのか、私にはわかりません。
ljs には、javascript で動作する lua vm のデモがあります。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 との互換性を損なったり、パッチを適用したりすることなく、使いやすい概念 (sa インクリメント、型チェック) を導入しました。これは、 MetaLuaに似ています (より一般的になっているようです)。
JavaScript への変換は、ブラウザー側で JavaScript の置き換えを可能にするために興味深いものです。ブラウザーでも型の安全性を少し確保することができます。プラットフォームとして JavaScript をターゲットにすることは、最も普及しているプラットフォームの 1 つである地球上のブラウザをターゲットにすることです。GWT は java2js を実行しますが、アプリケーションの数ページだけに GWT を導入するかどうかはわかりません。考えさせていただきます。テーブルのキーとして機能するには、いくつかの魔法を行う必要があります。たぶん、コンパイル時に各関数に一意の名前を割り当て、それをキーに使用します。タイプチェックのためにすべてのキーにプレフィックスを追加することもできます。これは良いスタートです。