回答:
スクリプト言語は、明示的なコンパイル手順を必要としないプログラミング言語です。
たとえば、通常の場合、実行する前にCプログラムをコンパイルする必要があります。ただし、通常の場合、JavaScriptプログラムを実行する前にコンパイルする必要はありません。したがって、JavaScriptは「スクリプト」言語と呼ばれることもあります。
最新のハードウェアと最新のコンパイル技術ではコンパイルが非常に高速になる可能性があるため、このラインはますます不鮮明になっています。たとえば、V8はGoogle ChromeのJavaScriptエンジンであり、ブラウザー以外でもよく使用されますが、実際にはJavaScriptコードを解釈するのではなく、オンザフライでマシンコードにコンパイルします。(実際、V8は最適化された2フェーズコンパイラです。)
また、言語が「スクリプト」言語であるかどうかは、言語よりも環境に関するものである可能性があることに注意してください。Cインタープリターを作成してスクリプト言語として使用できない理由はありません(そして人々はそうです)。また、JavaScriptをコンパイルして機械語コードを作成し、それを実行可能ファイルに格納できない(そして人々が持っている)ことができない理由もありません。Ruby言語はこの良い例です。元の実装は完全に解釈されました(「スクリプト」言語)が、現在は複数のコンパイラーがあります。
「スクリプト」言語のいくつかの例(たとえば、明示的なコンパイル手順なしで伝統的に使用されている言語):
そして、明示的なコンパイルステップで伝統的に使用されているものの小さな断片:
...そして、あなたは両方のキャンプに置かれているPythonのようなものがあります:Pythonはコンパイルステップなしで広く使用されていますが、メイン実装(CPython)はオンザフライでバイトコードにコンパイルしてからバイトコードを実行することでそれを行いますVM、および再コンパイルせずに使用するために、そのバイトコードをファイル(、)に書き出すことができます。.pyc
.pyo
それはちょうどだ非常にあなたには、いくつかの研究を行う場合は、もっとたくさん見つけることができる、いくつかの。
スクリプト言語とプログラミング言語の違いを理解するには、スクリプト言語が生まれた理由を理解する必要があります。
最初は、Excel、Word、ブラウザ、ゲームなどのプログラムを構築するために作成されたプログラミング言語がありました。これらのプログラムは、cやjavaなどの言語で構築されました。時間の経過とともに、これらのプログラムはユーザーが新しい機能を作成する方法を必要としたため、バイトコードへのインターフェイスを提供する必要があり、それによってスクリプト言語が生まれました。
スクリプト言語は通常コンパイルされていないので、意味のある何かを書くとすぐに実行できます。したがって、ExcelはC ++を使用して構築できますが、ユーザーが機能を定義するためにVBAと呼ばれるスクリプト言語を公開しています。同様に、ブラウザーはC ++ / Javaを使用して構築できますが、ブラウザーはjavascriptと呼ばれるスクリプト言語を公開します(Javaとは一切関係ありません)。ゲームは通常C ++でビルドされますが、ユーザーがカスタム機能を定義するためにLuaと呼ばれる言語を公開します。
スクリプト言語は通常、一部のプログラミング言語の背後にあります。スクリプト言語は、元のプログラミング言語のサブセットで実行されるため、通常、コンピューターのネイティブ機能へのアクセスが少なくなります。ここでの例は、Javascriptがファイルシステムにアクセスできないことです。通常、スクリプト言語はプログラミング言語よりも低速です。
スクリプト言語はアクセスが少なく速度が遅い場合がありますが、非常に強力なツールになる場合があります。スクリプト言語の成功に起因する1つの要因は、更新の容易さです。WebでのJavaアプレットの時代を覚えていますか?これは、プログラミング言語(java)とスクリプト言語(javascript)を実行する例です。当時、コンピューターはそれほど強力ではなく、JavaScriptも成熟していないため、Javaアプレットが主流でした。しかし、Javaアプレットは煩わしく、ユーザーが言語をロードしてコンパイルする必要がありました。今日に早送りすると、Javaアプレットはほとんど絶滅し、Javascriptがシーンを支配しています。ほとんどのブラウザコンポーネントが既にインストールされているため、Javascriptの読み込みは非常に高速です。
最後に、スクリプト言語もプログラミング言語と見なされます(ただし、これを受け入れることを拒否する人もいます)。ここで使用する用語は、スクリプト言語とコンパイルされた言語です。
違いはますます重要でなくなります。伝統的に、スクリプト言語は既存のプログラムを拡張します... "スクリプト"の主な定義は、既存のエンティティが実行する一連の命令を記述することです。ただし、スクリプト言語が独占的で口語的な構文で始まった場合、最近普及している構文のほとんどは、Cとの関係があります。
「解釈済みとコンパイル済み」の違いは、本質的に、組み込みのインタープリターではなく、既存のプログラムを(組み込みのインタープリターを使用して)拡張したことによる症状だと思います。プログラマや素人がもっと心配しているのは、「プログラマは何をしているのか」ということです。1つのプログラムが解釈され、別のプログラムがコンパイルされるという事実は、作成者によるアクティビティの違いを判断する上でほとんど意味がありません。彼の演劇がより一般的に朗読されるか、舞台で演じられるかについて劇作家を判断しませんか?
プログラミング言語:マシンコードにコンパイルされ、基盤となるオペレーティングシステムのハードウェアで実行されます。
スクリプト言語:プログラミング言語の非構造化サブセットです。一般的に解釈されます。基本的には、他のことを「スクリプト」で実行します。主な焦点は、主に独自のアプリを構築することではなく、既存のアプリを希望どおりに動作させることです。たとえば、ブラウザーのJavaScript、TCLなどです。
***しかし、プログラミング言語がインタープリターに変換されたり、その逆の使用がCスクリプトを 'C'できるCインタープリターを持っている状況があります。スクリプトは通常、プログラミング言語を使用してアプリケーションを構築するアプリケーションの動作を制御するために作成されます。しかし、境界が日ごとにぼやけていることに注意してください。Pythonの例としては、言語の使い方によって異なります。
あなたが「違い」として述べていることは、実際には実際の違いの結果だと思います。
実際の違いは、書かれたコードのターゲットです。このコードを実行するのは誰ですか。
スクリプト言語は、ソフトウェアシステムを対象とするコードを記述するために使用されます。そのソフトウェアシステムの操作を自動化します。スクリプトは、ターゲットソフトウェアシステムに対する一連の命令になります。
プログラミング言語は、実際のマシンまたは仮想マシンであるコンピューティングシステムを対象としています。命令はマシンによって実行されます。
もちろん、実際のマシンはバイナリコードしか認識しないため、プログラミング言語のコードをコンパイルする必要があります。しかし、これはプログラムではなくマシンを対象とした結果です。
一方、スクリプトのターゲットソフトウェアシステムは、コードをコンパイルまたは解釈する場合があります。ソフトウェアシステム次第です。
実際の違いがコンパイル済みかどうかであると言えば、JavaScriptがV8で実行されるとコンパイルされ、Rhinoで実行されるとコンパイルされないため、問題が発生します。
スクリプト言語が進化して非常に強力になったため、混乱がさらに増しています。そのため、別のソフトウェアシステムでの操作を自動化する小さなスクリプトを作成するだけでなく、豊富なアプリケーションを作成できます。
Pythonコードはインタープリターをターゲットにしているので、そのインタープリターに対する操作を「スクリプト化」していると言えます。しかし、Pythonコードを書くとき、それをインタープリターのスクリプトとして見るのではなく、アプリケーションを作成するように見ます。インタプリタは、とりわけ、より高いレベルでコーディングするために存在します。私にとって、Pythonはスクリプト言語というよりプログラミング言語です。
世界が若かった頃、PCの世界では.exeまたは.batから選択したので、説明は簡単でした。Unixシステムには、常にシェルスクリプト(/ bin / sh、/ bin / csh、/ bin / kshなど)とコンパイル済み言語(C / C ++ / Fortran)がありました。
役割と責任を区別するために、コンパイルされた言語(しばしば第3世代言語と呼ばれる)は「プログラミング」言語と見なされ、「スクリプト」言語はインタープリター(しばしば第4世代言語と呼ばれる)を呼び出す言語と見なされました。スクリプト言語は、複数のコマンド/コンパイルされたプログラム間を接続するための「接着剤」としてよく使用されたため、ユーザーはタスクを実行するために一連のステップを心配する必要がありませんでした。彼らは達成したかったのですが、これは誰でもフォローできる「スクリプト」になりました。
特定の問題領域を解決するために、さまざまな人々/グループが新しい通訳を作成しました。awkはよく知られているものの1つで、主にパターンマッチングと一連のデータ変換を入力に適用するために使用されていました。うまく機能しましたが、問題のドメインは限られていました。ソースコードが入手できなかったため、そのドメインの拡張はほとんど不可能でした。Perl(Larry Wall、主な作者/建築家)ツールのスクリプティングを次のレベルに-ユーザーがシステムコマンドを実行したり、入出力データを操作したり、タイプレス変数をサポートしたり、UnixシステムレベルのAPIにアクセスしたりできるインタープリターを開発しました。スクリプト自体からの関数として。これはおそらく、最初に広く使用された高水準スクリプト言語の1つでした。
あなたの質問は特にPythonに関するものでした。pythonインタープリターはpythonコードを含むテキストファイルに対して実行され、pythonコードはpythonインタープリターがあればどこでも実行できるので、それはスクリプト言語(Perlと同じ系統)であると言えます。(C / C ++ / Fortranの場合のように)OS / CPUアーキテクチャごとにユーザーpythonコマンドファイルを再コンパイルする必要がないため、移植性が大幅に向上し、使いやすくなります。
この回答はJerrold(Jerry)Heymanの功績によるものです。元のスレッド:https : //www.researchgate.net/post/Is_Python_a_Programming_language_or_Scripting_Language
インタープリターを使用する言語はスクリプト言語であり、コンパイルされる言語はプログラミング言語であるという事実に私は矛盾しています。あらゆる言語のインタープリターまたはコンパイラーを開発できます。解釈された環境はWebスクリプティングにより適しており、簡単に実行できるので、私たちがそれを持っています。
そうですね、スクリプト言語とプログラミング言語に違いはないように思います。それはすべて仕事を成し遂げることです。Web関連のタスクに関しては、小さなタスクを考慮してWebスクリプトと呼びます。そのため、システム関連のタスクをシステムまたはOSレベルのスクリプトと呼び、これらのタスクをシステムスクリプト言語として実行するために使用するプログラミング言語と呼ぶこともあります。
また、PythonやC言語のWebスクリプトでシステムレベルのコードを記述できないわけではありません(必要なプラットフォームと環境を確立できれば、間違いなく記述できます)。しかし、手間がかかりすぎて、迅速な開発のための時間の制約に影響を与える可能性があり、わずかなレイテンシの短縮は、Webスクリプトではあまりメリットがありません。しかし、Pythonでシステムレベルのタスクを実行する場合、その逆は当てはまりません。
結論:言語の選択は、スクリプト言語は神話なので、実行するタスクの性質と言語の識別に依存します。
スクリプト言語は別のプログラム内で解釈されます。JavaScriptはブラウザ内に埋め込まれ、そのブラウザによって解釈されます。
スクリプト言語の例
スクリプト言語の利点:
シンプル–スクリプト言語は、プログラミング言語よりも簡単に記述できます。
少ないコード行(LOC)
Javaのようなプログラミング言語はコンパイルされており、同じ方法で別のアプリケーションによって解釈されません。
プログラミング言語の例
(JavaScriptおよび古いPHPバージョン)のようなスクリプト言語では、既存の基本的な関数とメソッドを使用してジョブを実行します。例をみましょうJavaScript
、我々が使用することができますajax
かweb-sockets
、彼らはブラウザや方法によってサポートされている場合にのみ、彼らは、ブラウザ内に存在しますか。しかし、CやC ++のような言語では、Javaはその機能のライブラリが利用できない場合でも、その機能をゼロから作成できますが、JavaScriptでは作成できません。
JavaScriptの助けを借りて、Internet Explorer 8以前でWebソケットをサポートできますか 、CまたはC ++またはJavaでプラグインを記述して、Internet Explorer 8にWebソケットの機能を追加できます。
基本的にスクリプト言語では、既存のメソッドをシーケンスで実行するコードをシーケンスで記述して、ジョブを完了します。操作を行うために数値と数式をデジタル計算機に入力することも、スクリプト言語の非常に良い例です。すべてのスクリプト言語のコンパイラ/ランタイム環境は、常に機能を追加できるプログラミング言語で書かれていることに注意してくださいとメソッドと新しいライブラリを書くことができます。
PHP これは、多少b / wプログラミングおよびスクリプトである言語です。別の高水準言語で記述されたコンパイル済み拡張機能を追加することにより、新しいメソッドを追加できます。PHPで直接、ネットワークの高度な機能を追加したり、画像処理ライブラリを作成したりすることはできません。
PS私は、PHP JavaScriptのみを中心に私の回答を回転させて本当に申し訳ありませんが、私はこれら2つについてかなりの経験があるため、これら2つを使用しています。
論理的にプログラミング言語とスクリプト言語を見ると、これは99.09%同じです。ループ、制御条件、変数などすべて同じ概念を使用しているので、どちらも同じであると言えますが、C / C ++と他のプログラミング言語の違いは、実行前にコードをコンパイルすることだけです。しかし、PHP、JavaScript、その他のスクリプト言語では、コンパイルする必要はなく、ブラウザで直接実行します。
Nitish K. Jhaに感謝
スクリプト言語は、人々がスクリプト言語と考えるプログラミング言語です。これは明確な境界のない人工的なカテゴリであり、提案されたすべてのルールには例外があります。
言語がスクリプト言語であると言うために使用される古典的な規則は、定義するのではなく、特徴を表すものです。言語がいくつかのルールを満たしている場合、スクリプト言語と見なされる可能性が高くなります。そうでない場合は、そうでない可能性が十分にあります。ルールには通常、次のものが含まれます。
追加します:
つまり、インタープリター型言語である可能性があります。
C、Java、またはC#からの型エラーなど、プログラム言語がコードを分析してプログラムを実行せずにエラーを報告する重要な「コンパイル時」の動作がある場合、スクリプト言語とは考えられません。
従来、多くのスクリプト言語はソースから直接解釈されてきましたが、人気の高いスクリプト言語は、Pythonの.pyc
ファイルなど、コードをプリコンパイルするより高性能な実装、または実行前にネイティブコードにコンパイルするJavaScriptエンジンを最適化しています。
実行時にソースコードのみを確認するインタープリターによって言語を実装できる場合、その言語はスクリプト言語と考えられます。実際にそのように実装されているかどうかは重要ではありませんが、可能であれば、コードのコンパイル時の広範なエラーチェックを必要とすることもできません。
プログラムを実行せずにエラー(構文エラー以外)を検出するのに役立つ有用な静的セマンティクスが言語で提供されている場合、それはおそらくスクリプト言語ではありません。
常に例外があり、通常は実際のルールよりも言語に関する伝統に基づいています。BASICは、「スクリプト言語」とは見なされません。そのため、Visual Basic Scriptは、名前に「スクリプト」を追加して、より大きなプログラム向けの「実際の」プログラミング言語であるVisual Basicと区別する必要がありました。
BASICはCOBOLやFortranのような古いプログラミング言語でもあり、人々が言語から静的分析を期待する以前、そして基本的には「スクリプト言語」が存在する以前からありました。