だから、解釈された部分は言語仕様の要件であると解釈するのですか、それとも言語とその多くの実装の違いを尊重するときに言語が解釈されるプログラミング言語であると言うのは誤解を招くのでしょうか?
EcmaScript言語のオタクは、「ESインタープリター」という用語を使用してEcmaScriptの実装を指すことがよくありますが、仕様ではその用語を使用していません。言語の概要、特にはインタプリタに依存しないという点で言語について説明します。
ECMAScriptはオブジェクトベースです。基本言語とホスト機能はオブジェクトによって提供され、ECMAScriptプログラムは通信するオブジェクトのクラスターです。
そのため、EcmaScriptは、オブジェクト定義のプロバイダーとして定義される「ホスト環境」を想定します。これは、I / Oまたは外部へのリンクを許可するすべてのものを含むが、インタープリターを必要としません。
言語のステートメントおよび式のセマンティクスは、インタープリターで簡単に実装される補完仕様の観点から定義されていますが、仕様ではそれを必要としません。
8.9完了仕様タイプ
完了型は、文(の動作を説明するために使用されbreak
、continue
、return
およびthrow
コントロールの非ローカル転送を行います)。Completionタイプの値は、フォーム(type、value、target)のトリプルです。ここで、typeはnormal、break、continue、return、またはthrowのいずれか、valueはECMAScript言語値またはempty、targetはECMAScript識別子または空です。
「突然の完了」という用語は、normal以外のタイプの完了を指します。
制御の非ローカル転送は、ネイティブまたはバイトコードのコンパイルを可能にするジャンプを使用して、命令の配列に変換できます。
「EcmaScriptエンジン」は、同じアイデアを表現するより良い方法かもしれません。
明らかにJavaScript用の静的コンパイラはありません
本当じゃない。V8「インタープリター」は内部でネイティブコードにコンパイルされ、Rhinoはオプションで内部的にJavaバイトコードにコンパイルされ、さまざまなMozillaインタープリター({Trace、Spider、Jager} Monkey)はJITコンパイラーを使用します。
V8:
V8は、バイトコードを実行または解釈するのではなく、JavaScriptを実行する前にネイティブマシンコードにコンパイルすることでパフォーマンスを向上させます。
Rhino:
public final void setOptimizationLevel(int optimizationLevel)
現在の最適化レベルを設定します。最適化レベルは-1〜9の整数であることが期待されます。負の値は-1として解釈され、9より大きい値は9として解釈されます。最適化レベル-1は、解釈モードが常に中古。レベル0〜9は、クラスファイルが生成される可能性があることを示します。最適化レベルを高くすると、コンパイル時のパフォーマンスと実行時のパフォーマンスがトレードオフになります。実行時にオプティマイザーパッケージが存在しない場合、オプティマイザーレベルを-1より大きく設定することはできません。
TraceMonkey:
TraceMonkeyは、ネイティブコードのコンパイルをMozillaのJavaScript®エンジン(「SpiderMonkey」として知られる)に追加します。UC Irvineで開発された「トレースツリー」と呼ばれる手法に基づいており、Tamarin Tracingプロジェクトと共有されるコードとアイデアに基づいています。最終的な結果として、ブラウザーのクロムとWebページのコンテンツの両方の速度が大幅に向上します。