web-dev-qa-db-ja.com

最近のLuaからJavaScriptへのコンバーターまたはインタープリターはどこかにありますか?

良いLuaからJavaScriptへのコンバーターを見つける必要があります。 luaforge.orgのlua2jsは古く(3年ほど前で、Lua 5.1では機能しないようです)、Googleでまだ何も見つかりません。

誰か他のコンバーターの経験はありますか? Lua 5.1で動作し、できれば.NETベースである必要がありますが、.NETは必須ではありません。 javascriptluaインタープリターも同様に機能します。

30
Kevlar

新しいチャレンジャーが表示されます:Lua.js https://github.com/mherkender/lua.js

その成熟度を証明するいくつかの素晴らしいデモについては、 https://github.com/ghoulsblade/love-webplayer を参照してください。

Lua.jsは、Luaコードを直接ECMAscript(JavaScript、ActionScriptを含む)に変換することで機能します。これにより、JavaScriptでLua VMを実装しようとするソリューションよりも速度が大幅に向上します。

9
Breton

これはLuaリストで繰り返される質問です。これは、2つの言語が表面的に類似しているためだと思います。

残念ながら、それほど明白ではない多くの重要な違いがあります。それを機能させるには、Luaのバイトコードの代わりにJSをターゲットとする本格的なコンパイラーか、JavaScriptでLua VM)を書き直す必要があります。

Lua2jsの当初の目標はわかりません。しかし、それが単に限定された「翻訳者」である場合、翻訳されることを意図したLuaコードを書くことは、Luaについての素晴らしいことのほとんど(すべて?)を否定するでしょう。たとえば、JavaScriptではキーは文字列(および数字?私にはわかりません)のみであるため、関数をテーブルキーとして使用できるとは思いません。

.NETの選択はより合理的であり、既存のコンパイラを変更して、標準のLuaバイトコードの代わりにCLRバイトコードを出力することができます。 CLRが他の種類の言語用に設計および最適化されている場合でも、非常にうまく実行できるほど一般的です。主なハードルは、図書館の利用可能性です。

私が見つけたもう1つのオプションは、RobertoIerusalmschyとFabioMascarenhasによる この論文 です。ここでは、LuaVMバイトコードをCLRバイトコードに変換する方法を検討しています。

学術論文ではいつものように、それが書かれた日付についての表示がないので、それが新しくて革命的なのか、古いので忘れられているのかわかりません。

8
Javier

ljsには、javascriptでのluavmの動作デモがあります。ソースコードは、luaで記述されたluaインタープリターを使用してブラウザーでコンパイルすることもできます。

https://github.com/humbletim/ljs

4
Benoit Favre

Emscripten JavaScriptに変換されたLuaインタープリターが含まれています。できます ブラウザで試してみてください 。ただし、サイズは1.5MBです。

4
Jakob

私はこの実装を使用しています https://github.com/mherkender/lua.js 前の回答で言及されました。オフラインとロード時の解析のいずれかを実行し、非常に使いやすいことがわかりました。

私のLuaスクリプトはC関数を介して呼び出していましたが、そのCコードをJavascriptに変換し、lua.jsに接続するのは非常に簡単でした。

2
Tom Gaulton

http://luajs.org にアクセスして、私の作品をご覧ください。

サイトメニューにはデモとベンチマークがあります。

圧縮前はわずか35.5K、圧縮後は12.2Kです。 Javascriptオブジェクト/配列に直接アクセスできます。ほぼ毎日更新されます。

Lua.vm.jsよりも高速です。 (メタテーブル実装のためそれほど速くはありません)、そして私はそれを最適化し続けます。

1
tdzl2003

部分的に完全なLuaからECMAscriptへの静的コンパイラーを作成しました。

https://github.com/mherkender/lua2js-experiment

プロジェクトには多くの重要な機能が欠けているため、ニーズを満たしていない可能性があります。行き止まりであるため、急いで完了することはありません。詳細については、READMEを参照してください。

私がインターネットで見たいくつかの懸念にもかかわらず、Javascriptが実際にサポートできないLua固有の機能(* fenv関数やほとんどのデバッグライブラリなど)はごくわずかです。ファイルライブラリのような他のものは、VMがアクセスできる機能によって制限されます。

私も個人的にLua + Emscriptenオプションを試しましたが、印象的ですが、非常に遅いです。

0
max

これを行う1つの方法は、 LuaSub を使用し、Lua出力の代わりにJavaScriptを生成することです。これは、合理的な努力で行うことができます(現在、LuaSubはそれを行いません)。

JSをLuaの要件に合わせることができない場所は、コンパイル時に発見され、エラーを引き起こす可能性があります。

将来的にはJS + SVGをたくさんやるつもりですが、JS側が頭痛の種になった場合は、これを試してみるのもいいかもしれません。他の誰かが行きたいと思ったら、そうしてください。 LuaSubソースはあなたのためにあります。

もともと、LuaSubはLua 5.1の構文エクステンダーとして作成され、標準のLuaとの互換性を損なうことなく、またはパッチを適用することなく、使いやすさの概念(インクリメント、タイプチェックなど)を導入しました。これは MetaLua に似ています(これはより一般的になっているようです)。

0
akauppi

Javascriptへの翻訳は、ブラウザ側でjavascriptを置き換えることができるようにするために興味深いものです。ブラウザでも型安全性を少し取ることができます。プラットフォームとしてJavaScriptをターゲットにすることは、最も普及しているプラ​​ットフォームの1つである地球のブラウザーをターゲットにすることです。 GWTはJava2jsを実行しますが、アプリケーションの数ページだけにGWTを導入したいかどうかはわかりません。考えさせていただきます。テーブルのキーとして機能するには、実行する必要のある魔法が必要です。コンパイル時に各関数に一意の名前を割り当てて、それをキーに使用するだけかもしれません。型チェックのためにすべてのキーにプレフィックスを追加することもできます。これは良いスタートです。

0
lacroix1547