web-dev-qa-db-ja.com

JavaScriptが「スクリプト言語」と呼ばれるのはなぜですか?

タイトルの通り、JavaScriptが「スクリプト言語」と呼ばれる正確な理由を知りたいのですが?

私の理解では、JavaScriptはブラウザーによってのみ解釈される(コンパイルされない)ためです。私が間違っている場合は私を訂正してください。

しかし、コンパイルがない場合、どうして0 == ''本当ですか?コンパイラは値を強制しませんか、それともJavaScriptエンジンですか...?私は少し混乱しています。

25
Wondering

wikipedia の最初の2つの文は十分に明確だと思います:

スクリプト言語、スクリプト言語、または拡張言語は、単一または多数のソフトウェアアプリケーションの制御を可能にするプログラミング言語です。スクリプトの目的で選択される言語は、多くの場合、ホストアプリケーションで使用される言語よりもはるかに高レベルです...

この場合、applicationがブラウザです。そしてコンパイルについて:

スクリプトは、常にではありませんが、多くの場合、ソースコードから解釈されるか、「セミコンパイル」されてバイトコードに解釈されます。これは、スクリプトが実行されるシステムのネイティブマシンコードに従来コンパイルされている、関連付けられているアプリケーションとは異なります。

0''と等しいことについて、強制は必ずしもコンパイラによって達成されるとは限りません。実行時のJavaScriptエンジンがすべてです。

ウィキペディアからすべてを取り出して申し訳ありませんが、それはとても明確で、引用しています

PS:これも貼り付ける価値があると思います:

多くの人々は、「スクリプト」言語を、スクリプトシーンで人気を博していない言語よりも劣っている、または何らかの形で異なると見なしています。皮肉なことに、これらの同じ言語は、その品質と汎用性のためにスクリプト用に慎重に選択されました。

36
victor hugo

あなたは部分的に正しいです。スクリプト言語は基本的にそれ自体では成り立たない言語です。別のアプリケーション(この場合はブラウザ)を「スクリプト化」します。あなたが考えているのはインタープリタ型言語だと思います。それが本質的に意味することは、それがコンパイルされておらず(少なくとも伝統的な意味では)、ソースコードから「解釈」されているということです。あなたの例は実際にはコンパイルとは何の関係もありません。文字列から整数への型変換は実行時に行われます。

10
Sasha Chedygov

JavaScriptがスクリプト言語である理由を理解するには?まず、Javaがスクリプト言語ではない理由を理解します。

スクリプティングとは、プレイヤーが直接読むプロジェクトやプレイなどの文章を意味し、プレイヤーとスクリプトの間に通訳はいないと思います。

JavaScriptでも同じように、私たちのプログラムは、メモ帳や、JavaScriptエンジンを介してブラウザで直接読み取られるEditPlusなどの他のテキストページに書き込まれる演劇や映画のように機能します。出力を表示するためにコンパイラやインタプリタは必要ありません。ブラウザ、ブラウザはプレーヤーのように機能します。

しかし、Javaは、コンパイラーとインタープリターが、書かれたJavaコーディングをコンピューター可読形式に変換し、出力を表示する必要があります。したがって、Javaはスクリプト言語ではなく、JavaScriptはスクリプト言語です。

この説明は、JavaScriptがスクリプト言語である理由についての私の意見です。私はこの問題を理解し、実際の使用を通して関連付けようとしました。満足していると思います。

7

2017年のアップデート

「スクリプト言語は猥褻によく似ています。定義することはできませんが、見ればわかります。」 -ラリーウォール

この回答の目的のために、次のような言語を意味すると仮定しましょう。

  1. 「実際の」言語の機能の一部が欠けているため(それが意味するものは何でも)、システム内の他のコンポーネント間の「接着剤」として最も役立ちます。
  2. コンパイルされるのではなく解釈されます。

Javascriptは確かに、DOMを操作し、フォームの検証を実行し、イエスを踊らせるための基本的な機能を備えたスクリプト言語と見なされていました。 インタプリタ によってソースから直接実行されました。

しかし、JSはここ数年でかなり成熟しており、ラムダ、クラス(良くも悪くも)、デストラクチャリング、イテレーター、モジュールなどの高度な機能により、他のほとんどの現代言語と同等の機能を備えています。ブラウザに制限されなくなりました。NodeJSの下のサーバーでスタンドアロンで実行されていることもよくあります。

Javascriptは、バイトコード(Java and C#など)またはマシンコード(CやC++など)に直接JITコンパイルされるようになりました。最新のエンジンは、ほとんどの従来型と同様の最適化フェーズを提供しますコンパイルされた言語。

V8(Chrome、ノード)

V8は、JavaScriptを実行する前に直接 ネイティブマシンコード にコンパイルします。

チャクラコード(エッジ)

Chakra Core [can] do 並列JITコンパイル .. ..

SpiderMonkey(Firefox)

SpiderMonkey 38には、 JavaScriptをマシンコードにコンパイルする ...のジャストインタイムコンパイラ(JIT)が含まれています。

したがって、最新のJSがスクリプト言語と見なされる場合、同じことが他のほとんどの非「スクリプト」言語にも当てはまるはずです。

6

これは、アクセス時にサンドボックス化され、特定の目的に利用されるインタープリター言語です。

これの意味は:

  • 実行時に解釈され、コンパイルされません
  • 通常は特定のAPIを介して、システムへのアクセスが制限されます。
  • 通常、意図された目的を達成するのに役立つAPI呼び出しのみが与えられ、それ以上は与えられません(ただし、サードパーティの追加を使用することはできます)
3
Luke Schafer

スクリプト言語のアイデアは、一連のアクションを実行するようにホストに指示するものです(俳優がスクリプトから読み取るのとよく似ています)。

Javascriptは、シェルスクリプト、php、またはその他のスクリプト言語がそれぞれのホストに対して行うのとまったく同じ方法で、ブラウザに何を実行し、どのように処理するかを指示します。

2
Gabriel Hurley