web-dev-qa-db-ja.com

JavaScriptのネイティブマシンコードコンパイラはありますか?

JavaScriptのネイティブマシンコードコンパイラはありますか? VMのことではありません。それが存在しない場合、それは可能ですか?
言語の動的な性質により、バイナリにコンパイルできるかどうか疑問に思っています。

42
the_drow

私の知る限り、JavaScript用の静的コンパイラはありません。それは確かに理論的には可能です。ただし、JavaScriptの静的コンパイルでは、そのすべての機能(動的型付けやevalなど)をサポートするために非常に重いランタイムが必要になります。ちなみに、Python(別の動的言語))を静的にコンパイルする必要があると、開発者は PyPy 開発者が非常に制限されたサブセットである言語を作成してしまいましたof Python(RPythonと呼ばれる)、静的にコンパイルできるPythonのより動的な機能の一部を無効にします。

JavaScriptコードからスタンドアロンの実行可能ファイルを作成する目的でこれを要求している場合、スクリプトと埋め込まれたJavaScriptを含む実行可能ファイルを本質的に作成するラッパーがあるはずですVM(悲しいことに、私はオフハンドを知りません)。

29
Falaina

それは確かに実行可能ですが、現時点で私がそれを行う方法を知る唯一の方法は、2ステップのプロセスです...

  1. JavaScriptをJava Mozilla Rhino JSC を使用して)にコンパイルします。
  2. 結果のJavaクラスファイルを GNUのGCJ のようなものを使用して実行可能ファイルにコンパイルします。

なぜあなたがしたいのですか?どのような利点が見つかると思いますか?

26
Stobor

Google V8エンジンは、JavaScriptをネイティブマシンコードにコンパイルします。この機能は、node.jsおよびio.jsプロジェクト用に作成した EncloseJS コンパイラで使用されます。

9
Igor Klopov

これらのソリューションはすべてDOMlessであるため、angular.jsjqueryなどのライブラリはなく、underscore.js/lodashのみであることに注意してください

Falainaの回答まで、PyPyJavaScript のdist

また、 Appcelerator Titanium にはjs> JavaBit> Androidがあります

最後に、node.jsnexe を使用できます---この他の説明 answer

4
percebus

Microsoftにはダウンロード可能なJscript(「Microsoftのjavascript」)コンパイラがあると確信しています

windowsの場合:JavaScriptのテキストファイルを作成する場合は、次の方法でコンパイルできます。コマンドcdを使用してプロンプトを開き、テキストファイルのディレクトリに移動します(Windowsの場合)タイプ:C:\ WINDOWS\Microsoft.NET\Framework\v2.0.50727\jsc.exe textfile.js

それ以外の場合:jscriptコンパイラをダウンロードし、jscriptコンパイラのディレクトリを入力してから、javascriptテキストファイルの名前を入力します。

ディレクトリ名全体をコンパイラに入力したくない場合は、環境変数を追加できます。

この男はそれをよりよく説明しています: http://www.phpied.com/make-your-javascript-a-windows-exe/

個人的にはこれがすごくかっこいいと思います。それについてもっと多くのドキュメントがあればいいのに。

それはあなたが探しているものだと確信していますが、私は少し新しいです。

2
Daniel Ladner

理論的には可能ですが、多くのランタイムサポートの手荷物が必要になります(さらに、evalをサポートする完全なJavascriptコンパイラーまたはインタープリターも)。

実際のネイティブコードコンパイラを探していますか、それともランタイムと一緒にJavascriptコードを単一の実行可能バイナリにバンドルできるものを探していますか?

2
Greg Hewgill

Adobe AIRのiOS用AOTコンパイラーは、Actionscript 3.0と呼ばれるJavaScriptのスーパーセットをABCバイトコードに静的にコンパイルしてから、LLVMを介してコードをマシン化します。クラスや型注釈のないAS3コードを記述する場合、それは基本的にJavaScriptであり、コンパイラーはそれを喜んでマシンコードにコンパイルします。残念なことに、これはオープンソースソフトウェアではありません。また、本質的にFlash Playerインスタンス内で実行されているため、DOMにアクセスできません(JavaScriptを考えると多くの人が考えます)。

1
Kevin Newman

TraceMonkey FF3.5では、JavaScriptコードの一部に対してこれを行います。あなたはそこからいくつかの道順を得ることができるかもしれません!

1
TheVillageIdiot