2009-07-13 19 views
40

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

+0

JScript.NETについてお話されましたか? – Shimmy

+0

「ネイティブマシンコードコンパイラ」とは、Javascriptプログラムを受け取り、実行可能ファイル(Static Compilation)を生成するコンパイラを意味しますか?それとも、javascriptコードをマシンに翻訳することが可能なのでしょうか? (例えば、Tracemonkey(Firefox)とV8(Chrome)のJITコンパイラは現在実行中のjavascriptのネイティブマシンコードを生成するので、複数回解釈する必要はありません) – Falaina

+1

静的コンパイルを求めています。 –

答えて

26

私が知る限り、JavaScript用の静的コンパイラはありません。確かに理論上可能です。しかし、JavaScriptの静的コンパイルでは、すべての機能(動的な型指定や評価など)をサポートするために非常に重いランタイムが必要です。 Pythonを静的にコンパイルする必要があるときには、PyPyの開発者はPythonの非常に限定されたサブセット(RPythonと呼ばれる)を作成してしまい、Pythonのよりダイナミックな機能が無効になりました。静的にコンパイルすることができました。

JavaScriptコードからスタンドアロンの実行可能ファイルを作成するためにこれを求めているのなら、基本的にスクリプトと埋め込みJavaScript VMを含む実行可能ファイルを作成するラッパーが必要です(悲しいことに、オフハンドを知っている)。

+1

最初のブラウザベースのJITは、この質問に答えた約1ヶ月前にFF 3.5でリリースされました。 –

+0

+1のPyPy。 'RPython'はそれ自体静的にはコンパイルされず、' RPython'プログラムは通常の 'CPython'で起動され、現在メモリにある全てのオブジェクトのスナップショットがとられます。それはすべてのタイプの専門化などが既に行われていることを保証します。つまり、RPythonのプログラム入力は厳しく制限されています。何かを 'json.load'してその場で型を取得することはできません。 –

2

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

実際のネイティブコードコンパイラを探しているのですか、Javascriptコードをランタイムとともにバンドルできるものを探していますか?私は、現時点ではそれを行う方法を知っている唯一の方法は2段階のプロセスであるが、

+3

私は実際のネイティブコードコンパイラを探しています –

25

それは、間違いなくなんとかです...

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

なぜあなたはしたいですか?どのような利点が期待されますか?

+12

それはちょうど好奇心の外です。 私はjavascriptが大好きです。 –

1

TraceMonkey(FF3.5)javascriptコードのいくつかの部分にこれを行います。そこからいくつかの道順を得ることができるかもしれません!

+0

実際にはありません。私はそこで役に立つものを見つけられませんでした。 –

+0

これはTracemonkeyがコードのすべての部分にこれを行うことができないので、役に立ちません。 – Bergi

2

私は、Microsoftは、ダウンロードのJscript(「マイクロソフトのJavaScript」)コンパイラを持っていると確信している

あなたは窓を持っている場合: が使用して、コマンドプロンプト を開く:あなたはjavascriptのテキストファイルを作成する場合 あなたがでそれをコンパイルすることができます(あなたは窓を持っている場合)、テキストファイルのディレクトリ に取得するには、CD入力:C:\ WINDOWS \ Microsoft.NET \ Frameworkの\ v2.0.50727の\ jsc.exe textfile.js

そうでない場合: JScriptのコンパイラ をダウンロードjscriptコンパイラのディレクトリとjavascript texの名前を入力しますtファイル

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

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

私は個人的に、これは本当にクールだと思います。私はそれのためのより多くのドキュメンテーションがあったと思う。

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

+2

.netへのコンパイルILコードは疑問視されるように母国語にコンパイルされていませんが、ILコードは実際には解釈されます(ちょうどよい時)。ちょうどあなたが知っている;) – Remco

+0

@Remco:ILは**常に実行される前にマシンコード命令にコンパイルされています。 Javaのバイトコードとは異なり、ILは決して解釈されません。 – IInspectable

4

のみunderscore.js/lodash

Falainaの答えにフォローアップ、これらのソリューションのすべてがangular.jsまたはjqueryのようなので、何のライブラリは、DOMあまりしていないことに注意してください、 PyPy持っていませんdistのJavaScript

また、>JavaBit >android

最後に、node.jsnexe を使用することができます。この他answer

8

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

+0

どうすればいいですか? –

+2

(* Meta *)目立たないようにしてはいけませんが、正しい場所にある簡単な* my *で十分です。私は先に進み、ここであなたの答えを編集します。将来の回答のためにこれを覚えておいてください。 –

1

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