2016-10-10 3 views
8

私は、JavaScriptがWebブラウザ環境でどのように実行されるかをよりよく理解しようとしています。Webブラウザ環境で実行すると、JavaScriptがマシンコードにコンパイルされますか?

Node.jsに関して、私はNode.JSプログラムで書かれたJavaScriptコードがC++コード(V8)でコンパイルされ、最終的にマシンコードになることを理解します。 Node.jsはファイルシステムや他のマシンレベルのタスクとやりとりすることができるので、なぜ私は最終的にマシンコードになっているのでしょうか。

ウェブブラウザの環境が異なると感じます。私の理解から、主な目標はDOMと対話することです。 JavaScriptをDOMとやりとりするにはマシンコードにコンパイルする必要がありますか?

私はこれに戸惑う。 Node.jsとChromeはどちらもV8で動作します。 V8はC++で書かれており、私の知る限り、JavaScriptコードをプロセッサが理解できるマシンコードにコンパイルします。

ECMA-262を実装するにはJavaScriptエンジンが必要です。これはエンジンの目的全体です(私はそれを考えていますか?)。しかし、Webブラウザは機械語レベルにコンパイルするためにJavaScriptを必要としますか?どの機械操作が実行されていますか?ここで

は、私が研究してきたいくつかの記事が、残念ながら、私はそれらの私の質問に対する答えを見つけることができます:

+0

私はあなたの質問に完全な答えを持っていませんが、これは少なくともブラウザとそれが使用するjsエンジンに依存することになります。大部分の大手プレーヤーは独自の独自のエンジンを持っているか、少なくとも既存のエンジンの独自のフォークを持っています。 –

+1

誰が知っていますか?多分それはそうではないかもしれない。現代のJavaScriptランタイムは、実際に小さなコードをネイティブのバイナリ形式にコンパイルする可能性があります。実際にあなたのプログラムが伝えることはできません。なぜそれは重要ですか? – Pointy

+0

はい、Jaromanda Xが言っているように、あなたはNodeの仕組みについて完全に間違っています。 – Pointy

答えて

2

エンジンはC++で書かれており、このコードはコンパイラによって機械コードに変換されます。コードが機械語になったら、コンピュータで実行することができます。エンジンが動作している間、JavaScriptで書かれたコードを読んで解釈し、コードが要求していることを実行することができます。この場合、実際にコンピュータで実行されているのはエンジンコードだけです。これはまさに別のコードが実行していることをしていることになります。ノードとブラウザの違いは、ブラウザがJavaScriptに要求していることは何もしないことです。また、ブラウザやノードの中には、JavaScriptコードをリアルタイムで機械コードに変換して速度を上げるものがあります。ブラウザは危険なマシンコードを書くことはしないように注意していますが、理論的には起こりうるものです。

関連する問題