web-dev-qa-db-ja.com

スクリプト言語とプログラミング言語

スクリプト言語とプログラミング言語の違いを説明できる人はいますか。
また、それぞれについていくつかの例を述べることができます。私はたくさんグーグルしましたが、私は常にスタックオーバーフローから最良の答えを見つけます。

326
Rahul Reddy

スクリプト言語は、明示的なコンパイル手順を必要としないプログラミング言語です。

たとえば、通常はCプログラムを実行する前にコンパイルする必要があります。しかし、通常の場合は、JavaScriptプログラムを実行する前にコンパイルする必要はありません。そのため、JavaScriptは「スクリプト」言語と呼ばれることもあります。

現代のハードウェアや現代のコンパイル手法ではコンパイルが非常に高速になる可能性があるため、この行はますますぼやけてきています。たとえば、Google ChromeのJavaScriptエンジンであり、ブラウザの外部でも多く使用されているV8は、JavaScriptコードを解釈するのではなく、その場でオンザフライでコンパイルします。 (実際、V8は最適化2フェーズコンパイラです。)

また、ある言語が「スクリプト」言語であるかどうかは、その言語よりも環境に関するものである可能性があります。あなたがCインタプリタを書き、それをスクリプト言語として使うことができない理由はありません(そして人々は持っています)。また、JavaScriptをマシンコードにコンパイルして実行可能ファイルに保存することができないという理由もありません(そして他の人が持っています)。 Rubyはその好例です。元の実装は完全に解釈されていました(「スクリプト」言語)が、現在は複数のコンパイラがあります。

「スクリプト」言語のいくつかの例(例: 伝統的に は明示的なコンパイル手順なしで使用される):

  • ルア
  • JavaScript
  • VBScriptとVBA
  • Perl

そして、ちょっとした1 - 伝統的に のほんの少しは明示的なコンパイル手順で使われます:

  • C
  • C++
  • D
  • Java (ただし、Javaはバイトコードにコンパイルされ、実行時に解釈および/または再コンパイルされます)
  • パスカル

Pythonにはコンパイルのステップなしで広く使用されていますが、メインの実装(CPython)ではバイトコードをオンザフライでコンパイルしてからバイトコードを実行します。 VM、そして can そのバイトコードをファイル(.pyc.pyo)に書き出して、再コンパイルせずに使用することができます。

それは単なる very 少数です、あなたが何らかの研究をするなら、あなたはもっともっと見つけることができます。

435
T.J. Crowder

スクリプト言語とプログラミング言語の違いを理解するには、スクリプト言語が生まれた理由を理解する必要があります。

当初、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は非常に高速にロードできます。

最後に、スクリプト言語もプログラミング言語と見なされています(一部の人々はこれを受け入れることを拒否しています)。ここで使用すべき用語はスクリプト言語とコンパイル言語です。

94
Yang Li

すべてのスクリプト言語はプログラミング言語です。

言語はスクリプトでもそうでなくても分類されません - それは完全に実行環境に依存します。

環境が解釈される環境である場合、これは一般にスクリプト環境と呼ばれます。

61
Oded

違いはますます重要でなくなっています。伝統的に、スクリプト言語は既存のプログラムを拡張します...私は "スクリプト"の主な定義はそれが既存の実体が実行するための命令のセットを書くことを指すということであると思います。しかし、スクリプト言語が独自の口語的な構文で始まったところでは、最近流行しているもののほとんどはCと何らかの関係があります。

私は、「解釈対コンパイル」の区別は、本質的な違いではなく、(既存のインタプリタを使って)既存のプログラムを拡張することによる症状だと思います。プログラマーや素人がもっと心配しているのは、「プログラマーは何をしているのか」ということです。あるプログラムが解釈され、別のプログラムがコンパイルされているという事実は、作成者によるアクティビティの違いを判断することにはほとんど意味がありません。あなたは彼の演劇がより一般的に声に出して読まれるか、またはステージで実行されるかどうかについて劇作家を判断しません、あなた?

18
Eric Barker

プログラミング言語:マシンコードにコンパイルされ、基盤となるオペレーティングシステムのハードウェア上で実行されます。

スクリプト言語:プログラミング言語の構造化されていないサブセットです。通常は解釈されます。それは基本的に他のことを行うための「スクリプト」です。主な焦点は、主に独自のアプリを構築することではなく、既存のアプリを希望どおりに動作させることです。ブラウザ用JavaScript、TCLなど

***しかし、プログラミング言語がインタプリタに変換され、使用のような逆の意味であなたがスクリプトを 'C'できるCインタプリタを持っている状況があります。スクリプトは一般に、プログラミング言語がアプリケーションの構築に使用される場合のアプリケーションの動作を制御するために書かれています。しかし、Pythonの例として境界が日々曖昧になっていることに注意してください。それは言語の使い方によって異なります。

11
saikumarm

スクリプト言語はプログラミング言語のサブセットです。

  1. スクリプト言語は、ユーザーによってマシンコードにコンパイルされていません(python、Perl、Shellなど)。そうではなく、別のプログラム(インタプリタと呼ばれ、プログラムを実行してその動作をシミュレートします)
  2. スクリプティングではないプログラミング言語(C、C++、Haskell、およびその他の「コンパイルされた」言語)の一部は、マシンコードにコンパイルされ、その後実行されます。
8
jh314

私は、インタプリタを使っている言語はスクリプト言語であり、コンパイルされている言語はプログラミング言語であるという事実には反対です。私たちはどんな言語のためのインタプリタかコンパイラも開発することができます。解釈された環境はWebスクリプティングにより適しており、より簡単になります。

スクリプト言語とプログラミング言語の間に違いはないようです。仕事を終わらせることがすべてです。 Web関連のタスクに関しては、小さなタスクを考慮してWebスクリプトと呼びます。そのようにして、システム関連のタスクをシステムまたはOSレベルのスクリプトと呼び、それらのタスクをシステムスクリプト言語として実現します。

また、システムレベルのコードをPythonで記述したり、WebスクリプトをC言語で記述したりすることはできません(必要なプラットフォームと環境を確立できれば間違いなく実行できます)。しかし、迅速な開発のための時間的制約に影響を与え、Webスクリプトではわずかなレイテンシの短縮が影響を与える可能性があるため、必要な作業が多すぎます。しかし、Pythonでシステムレベルのタスクを実行するのであれば、その逆は成り立ちません。

結論:言語の選択は、実行されるタスクの性質によって異なり、スクリプト言語としての言語の区別は神話です。

4
paritosh mishra

(JavaScriptや古いPHPバージョンのような)スクリプト言語では、私たちは自分の仕事を実行するために既存の基本的な関数と方法を使います。 JavaScriptの例を見てみましょう。ajaxまたはweb-socketsは、ブラウザでサポートされているかメソッドが存在する場合、またはブラウザ内に存在する場合にのみ使用できます。しかしCやC++のような言語では、Javaはその機能のためのライブラリが利用できなくてもゼロからその機能を書くことができますがJavaScriptでそれをすることはできません。

あなたはJavaScriptの助けを借りてInternet Explorer 8またはそれ以前のWebソケットをサポートすることができます しかしあなたはInternet Explorer 8にWebソケットの機能を追加するかもしれないC、C++あるいはJavaでプラグインを書くことができます。

基本的にスクリプト言語で私達は私達の仕事を完了するために順序で既存の方法を実行する順序でコードを書く。演算を実行するために数値計算式を数値計算機に入力することもスクリプト言語の非常に良い例です。すべてのスクリプト言語のコンパイラ/ランタイム環境は常にプログラミング言語で書かれているので、さらに機能を追加できます。そしてメソッドと新しいライブラリを書くことができます。

_ php _ これは多少白黒のプログラミングとスクリプトである言語です。別の高水準言語で書かれたコンパイル済みの拡張機能を追加することで新しいメソッドを追加できます。 PHPで直接ネットワーク処理や画像処理ライブラリの作成といった高度な機能を追加することはできません。

P.S 私はPHP JavaScriptのみを中心に私の答えを回転させて申し訳ありませんが、私はこれら2つでかなりの経験があるので、これら2つを使用します。

4
Ravinder Payal

私があなたが「違い」と言っているのは、実際には本当の違いの結果だと思います。

実際の違いは書かれたコードのターゲットです。誰がこのコードを実行する予定ですか。

スクリプト言語は、ソフトウェアシステムをターゲットとするコードを書くために使用されます。そのソフトウェアシステム上の操作を自動化します。スクリプトは、ターゲットソフトウェアシステムへの一連の命令になります。

プログラミング言語はコンピューティングシステムを対象としており、これは実際のマシンでも仮想マシンでもかまいません。命令はマシンによって実行されます。

もちろん、実際のマシンはバイナリコードしか理解できないので、プログラミング言語のコードをコンパイルする必要があります。しかし、これはプログラムではなくマシンをターゲットにした結果です。

一方、スクリプトのターゲットソフトウェアシステムは、コードをコンパイルしたり解釈したりする可能性があります。ソフトウェアシステム次第です。

本当の違いはコンパイルされているかどうかということですが、V8でJavascriptを実行するとコンパイルされ、Rhinoで実行するとコンパイルされないため問題があります。

スクリプト言語は非常に強力になるまで進化しているので、それはもっと混乱します。したがって、それらは別のソフトウェアシステム上での操作を自動化するための小さなスクリプトを作成することに限定されず、あなたはそれらを使ってどんなリッチなアプリケーションでも作成することができます。

Pythonコードはインタプリタをターゲットにしているので、それはそのインタプリタに対する操作を「スクリプト化」していると言えます。しかし、あなたがPythonコードを書くとき、あなたはそれをインタプリタをスクリプティングすることとして見ないで、あなたはそれをアプリケーションを作成することとして見ます。インタプリタは他のものの中でより高いレベルでコードするためにちょうどそこにあります。ですから私にとって、Pythonはスクリプト言語というよりはプログラミング言語です。

4
Damian Jose

世界が若く、PCの世界では.exeまたは.batから選択した頃、描写は単純でした。 Unixシステムには、シェルスクリプト(/ bin/sh、/ bin/csh、/ bin/kshなど)とコンパイル言語(C/C++/Fortran)が常にありました。

役割と責任を区別するために、コンパイル言語(第3世代言語と呼ばれることが多い)は「プログラミング」言語と見なされ、「スクリプト」言語はインタプリタ(しばしば第4世代言語と呼ばれる)を呼び出す言語と見なされました。スクリプト言語は多くの場合、複数のコマンドやコンパイルされたプログラムを接続するための「接着剤」として使用されていました。彼らは達成したかった、そしてこれは誰もが従うための「台本」となった。

さまざまな人々/グループが、特定の問題領域を解決するために新しい通訳を書きました。 awkはよく知られているものの1つで、主にパターンマッチングや一連のデータ変換を入力に適用するために使用されていました。それはうまくいったが、問題領域は限られていた。そのドメインの拡張は、ソースコードが入手できなかったので、ほとんど不可能でした。次のレベルへのPerl(Larry Wall、原則作者/アーキテクト)ツールのスクリプト作成 - ユーザーがシステムコマンドを実行し、入力および出力データを操作し、サポートされている型なし変数だけでなく、UnixシステムレベルのAPIにアクセスできるインタプリタを開発スクリプト自体からの関数として。おそらく最初に広く使用されている高級スクリプト言語の1つでした。スクリプト言語が任意の行を超えてプログラミング言語の機能を追加したのは、Perl(IMHO)によるものです。

あなたの質問は特に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

4
Kartik Chauhan

スクリプト言語が解釈されプログラミング言語がコンパイルされるという違いとは別に、以下のようなもう1つの違いがあります。

スクリプト言語は、既存のシステムの機能を操作、カスタマイズ、および自動化するために使用されるプログラミング言語です。そのようなシステムでは、有用な機能はすでにユーザーインターフェースを通じて利用可能であり、スクリプト言語はその機能をプログラム制御に公開するためのメカニズムです。

プログラミング言語は一般的にスクラッチからシステムをコーディングするために使用されますが。

src _ ecma _

3
Sukrit Gupta

スクリプト言語

スクリプト言語は別のプログラム内で解釈されます。 JavaScriptはブラウザに埋め込まれ、そのブラウザによって解釈されます。

スクリプト言語の例

  1. JavaScript
  2. Perl
  3. Python

スクリプト言語の利点:

  1. シンプル - スクリプト言語はプログラミング言語よりも書きやすいです。

  2. 少ないコード行数(LOC)

プログラム言語

Javaのようなプログラミング言語はコンパイルされ、同じ方法で他のアプリケーションによって解釈されません。

例題プログラミング言語

  1. C
  2. C++と
  3. Java

もっと詳しく

3

論理的にプログラミング言語とスクリプト言語を見れば、これは99.09%同じです。ループ、制御条件、変数などすべて同じ概念を使用しているため、両方とも同じですが、C/C++と他のプログラミング言語で異なる点が1つあるだけです。実行前にコードをコンパイルします。しかし、PHP、JavaScript、その他のスクリプト言語では、コンパイルする必要はありません。ブラウザで直接実行します。

ありがとうNitish K. Jha

2

スクリプト言語は、人々がスクリプト言語と考えるプログラミング言語です。これは明確な境界のない人為的なカテゴリであり、提案されたすべてのルールには例外があります。

言語がスクリプト言語であると言うのに使用される古典的な規則は、定義するのではなく、特徴付けるものです。言語がいくつかのルールを満たしている場合、スクリプト言語と見なされる可能性が高くなります。そうでない場合、そうではない可能性が高いです。通常、ルールには次のものが含まれます。

  • 大規模なプログラムではなく、小さな「スクリプト」を対象としています。
  • 別のアプリケーションに埋め込まれ、そのアプリケーションの小さな変更に使用されます。
  • コンパイルされるのではなく解釈されます。
  • これは、プロではなく、初心者のプログラマを対象としています。
  • 名前は「スクリプト」で終わります。

私は追加します:

  • スクリプト言語は、ほとんどすべてのエラーが実行時に検出されるプログラミング言語です。

つまり、couldはインタープリター言語です。

C、Java、またはC#からの型エラーなど、プログラムを実行せずにコードを分析してエラーを報告する重要な「コンパイル時」動作があるプログラミング言語の場合、スクリプト言語とは考えられない。

従来、多くのスクリプト言語はソースから直接解釈されていましたが、それらのより人気のあるものは、Pythonの.pycファイルのようにコードをプリコンパイルしたり、実行前にネイティブコードにコンパイルするJavaScriptエンジンを最適化したりするパフォーマンスの高い実装を取得しました。

言語couldが、実行中のソースコードのみを調べるインタープリターによって実装されている場合、スクリプト言語と考えられます。実際にそのように実装されているかどうかは重要ではありませんが、実装できる場合は、コードの広範なコンパイル時エラーチェックも必要ありません。

言語が、プログラムを実行する必要なくエラー(構文エラー以外)を検出するのに役立つ有用な静的セマンティクスを提供する場合、おそらくスクリプト言語ではありません。

例外は常に存在し、通常は実際のルールよりも言語の伝統に基づいています。 BASICは、だれもが1つとして使用したことのある基準をほぼすべて満たしているにもかかわらず、通常は「スクリプト言語」とは見なされません。そのため、Visual Basic Sc​​riptは、名前に「スクリプト」を追加して、より大きなプログラムを対象とした「実際の」プログラミング言語であるVisual Basicと区別する必要がありました。

BASICは、COBOLやFortranのような古いプログラミング言語でもあり、人々が言語から静的解析を期待する前から、そして基本的に「スクリプト言語」さえも前のものでした。

0
lrn