2012-04-21 5 views
4

ルアは小さく、簡単に埋め込むことができます。現在のJavaScript VMは非常に大きく、既存のアプリケーションに統合するのは難しいです。
JavaScriptをLuaまたはLuaバイトコードにコンパイルすることはできませんか?
特にモバイルアプリケーションの制約については、これは良い適合のようです。最も人気のあるスクリプト言語のいずれかをiPhoneやAndroidアプリに簡単に統合できることは素晴らしいことです。Lua VMでJavaScriptを実行するのは意味がありますか?

私はこれが技術的に実現可能かどうか分かりません。
Luvitには、Node.jsアーキテクチャをLuaに移植しようとするアクティブなプロジェクトがあります。だから、出来上がったJavaScriptの世界は、Luaで可能なものから遠く離れすぎてはいけません。

+0

確かに、V8はCライブラリとして使用できます(Node.jsによる)。 – Pointy

+0

私は自分の質問を更新しました - あなたは正しいですV8はライブラリとして使用することができます。しかし、その複雑さのために、開発者が単一のアプリプロジェクトのために行うものではない。 iOSのネイティブコード生成に関する制約もあります。 Luaを埋め込むことは、ゲーム間ではるかに簡単であり、かなり一般的です。 – mirkokiefer

+0

Node.js - 'luvit'に関するコメントだけではなく、Node.jsをLuaに移植する最初のプロジェクトではなく、[LuaNode](https://github.com/ignacio/LuaNode)もあります。 'libuv'の代わりに' boost.asio'を使います。 –

答えて

5

JavascriptをLuaにコンパイルするのは、あなたが最初に想像するほど大きくはありません。 JavascriptのセマンティクスはLuaとは非常に異なっています(LuaJITの作者は、Luaの設計を、Javascript JITコンパイラと非常によく競合する主な理由の1つとして挙げています)。

は、このコードを取る:

if("1" == 1) 
{ 
    print("Yes"); 
} 

このプリントを "はい" JavaScriptで。 Luaの同等のコードは、文字列がLuaの数値と決して等しくないので、そうではありません。これは小さな点のように見えるかもしれませんが、根本的な結果があります.Luaの組み込み同値テストはもう使用できません。

解決策は2つあります。 1 == "1"javascript_equals(1, "1")に書き換えることができました。あるいは、LuaのすべてのJavascript値をラップし、Luaのメタテーブルを使用して==演算子の動作をオーバーライドすることもできます。

私たちは既にJavascriptをマッピングすることによってLuaから効率を失っています。これは簡単な例ですが、このように続けています。たとえば、JavascriptとLuaではすべての演算子のルールが異なります。

Javascriptオブジェクトは、Luaテーブルと同じではないため、ラップする必要があります。例えばJavascriptが唯一のサポート文字列キーオブジェクト、および文字列に任意のインデックスを強制:

> a = {} 
{} 
> a[1] = "Hello" 
'Hello' 
> a["1"] 
'Hello' 

あなたはまた、そうでJavaScriptのスコープ規則、可変引数関数に注意する必要があり、そして。

誰かが完全なコンパイラに力を入れていたら、これらのことはすべて克服できます。しかし、どんな効率性の向上もまもなく溺死するだろう。基本的には、LuaでJavascriptインタプリタを構築することになります。ほとんどのJavascriptインタプリタはC言語で書かれており、すでにJavascriptのセマンティクスのために最適化されています。

したがって、効率を上げることは失われた原因です。 Lua専用の環境でJavascriptをサポートするなど、他の理由があるかもしれませんが、可能であれば既存のJavascriptインタプリタにLuaバインディングを書くだけではあまり効果がありません。

Javascript-> Luaのソースからソースへのトランスレータを使用したい場合は、js2luaを見てください。これは私がしばらく前に作成したおもちゃプロジェクトです。それは完全なものではありませんが、それを使って遊ぶことは、確かに思考のための食糧を与えるでしょう。すでにJavascriptレクサーが含まれているので、すでに苦労しています。

関連する問題