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


347

スクリプト言語とプログラミング言語の違いを誰かが説明できますか?
また、それぞれの例をいくつか挙げてください。私は何度もGoogleを使っていますが、常にStack Overflowから最良の答えを見つけています。

回答:


466

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

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

最新のハードウェアと最新のコンパイル技術ではコンパイルが非常に高速になる可能性があるため、このラインはますます不鮮明になっています。たとえば、V8はGoogle ChromeのJavaScriptエンジンであり、ブラウザー以外でもよく使用されますが、実際にはJavaScriptコードを解釈するのではなく、オンザフライでマシンコードにコンパイルします。(実際、V8は最適化された2フェーズコンパイラです。)

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

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

  • ルア
  • JavaScript
  • VBScriptとVBA
  • Perl

そして、明示的なコンパイルステップで伝統的に使用されているものの小さな断片:

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

...そして、あなたは両方のキャンプに置かれているPythonのようなものがあります:Pythonはコンパイルステップなしで広く使用されていますが、メイン実装(CPython)はオンザフライでバイトコードにコンパイルしてからバイトコードを実行することでそれを行いますVM、および再コンパイルせずに使用するために、そのバイトコードをファイル(、)に書き出すことができます。.pyc.pyo

それはちょうどだ非常にあなたには、いくつかの研究を行う場合は、もっとたくさん見つけることができる、いくつかの。


1
素晴らしい説明!
剣闘士

48
@ mg30rg:へー-スクリプティングは完全に「本物の」プログラミングになりえる。(私が見たbashスクリプトの一部は信じられないでしょう...)私はそれを定義する最も簡単な方法だと思います(これもまた、言語のことではなく、環境のことです):ランタイム環境を実行しますソースコードを見る?もしそうなら、私はそれを「スクリプト」と呼びます。そうでなければ、私はしません。したがって、その意味では、ブラウザベースのJavaScriptは「スクリプト」であり、V8のようなエンジンがオンザフライでコンパイルしても、ソースは引き続きランタイム環境に配信されます。同様にスクリプトをシェル化します。従来のCプログラムのソースランタイムに配信されません
TJクラウダー2014

2
@ mg30rg:しかし、繰り返しになりますが、これらの線は常にぼやけています。:-) Javaバイトコードを検討してください。JVMなしでは実行できませんが、ソースコードではありません。(通常、逆コンパイラーによって妥当な外観のソースコードに戻すことができますが...)私は(リモートで)従来の環境のJavaをスクリプト言語とは考えていません。しかし、それから、カテゴリーについて考えることにも多くの時間を費やしません。:-)
TJクロウダー2014

2
@ CME64:いいえ、メインの実装(CPython)はオンザフライでバイトコードにコンパイルされ、VMでバイトコードを実行します。Python-to-Cツール(CythonとPyrex)はありますが、通常はPythonの実行方法ではありません。
TJクラウダー2016年

2
@Vityataを守るために、VBScriptはメモ帳で記述され、テキスト入力として解釈されますが、VBAコードは、エディターで入力するとPコードにコンパイルされます。つまり、コード行を変更した後、エディターに表示されるソースコード、入力したコードではありませんが、VBE が基になるPコードの表現です。VBA とVBScriptのメカニズムは完全に完全に異なり、それらをリストにまとめることはまったく正しくありません。VBAはVBScriptよりもVB6に非常に近いです。これは、スタンドアロンの実行可能ファイルを構築できないようにする明示的な制限にすぎません。
Mathieu Guindon 2017年

103

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

最初は、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の読み込みは非常に高速です。

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


4
「スクリプト言語とコンパイル済み言語」ではなく、「解釈済み言語とコンパイル済み言語」という意味ですか?
Bitsapien 2017

6
「ここでの例は、Javascriptがファイルシステムにアクセスできないことです」とNodejsは言っています
Mohammad

@Mohammad NodeJSは、プログラマーがJavascriptをコーディングの「言語」として使用できるようにするランタイムです。NodeJSは100%Javascriptではありません。
JeffNhan

65

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

言語はスクリプトとして分類されないか、または完全に実行環境に依存します。

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


18

違いはますます重要でなくなります。伝統的に、スクリプト言語は既存のプログラムを拡張します... "スクリプト"の主な定義は、既存のエンティティが実行する一連の命令を記述することです。ただし、スクリプト言語が独占的で口語的な構文で始まった場合、最近普及している構文のほとんどは、Cとの関係があります。

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


12

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

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

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


10

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

  1. スクリプト言語は、ユーザーがマシンコードにコンパイルするものではありません(python、perl、shellなど)。むしろ、別のプログラム(インタープリターと呼ばれ、プログラムを実行してその動作をシミュレートします)
  2. スクリプト化されていない一部のプログラミング言語(C、C ++、Haskell、およびその他の「コンパイル済み」言語)は、マシンコードにコンパイルされ、その後実行されます。

5

あなたが「違い」として述べていることは、実際には実際の違いの結果だと思います。

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

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

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

もちろん、実際のマシンはバイナリコードしか認識しないため、プログラミング言語のコードをコンパイルする必要があります。しかし、これはプログラムではなくマシンを対象とした結果です。

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

実際の違いがコンパイル済みかどうかであると言えば、JavaScriptがV8で実行されるとコンパイルされ、Rhinoで実行されるとコンパイルされないため、問題が発生します。

スクリプト言語が進化して非常に強力になったため、混乱がさらに増しています。そのため、別のソフトウェアシステムでの操作を自動化する小さなスクリプトを作成するだけでなく、豊富なアプリケーションを作成できます。

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


5

世界が若かった頃、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


4

インタープリターを使用する言語はスクリプト言語であり、コンパイルされる言語はプログラミング言語であるという事実に私は矛盾しています。あらゆる言語のインタープリターまたはコンパイラーを開発できます。解釈された環境はWebスクリプティングにより適しており、簡単に実行できるので、私たちがそれを持っています。

そうですね、スクリプト言語とプログラミング言語に違いはないように思います。それはすべて仕事を成し遂げることです。Web関連のタスクに関しては、小さなタスクを考慮してWebスクリプトと呼びます。そのため、システム関連のタスクをシステムまたはOSレベルのスクリプトと呼び、これらのタスクをシステムスクリプト言語として実行するために使用するプログラミング言語と呼ぶこともあります。

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

結論:言語の選択は、スクリプト言語は神話なので、実行するタスクの性質と言語の識別に依存します。


4

スクリプト言語

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

スクリプト言語の例

  1. JavaScript
  2. Perl
  3. パイソン

スクリプト言語の利点:

  1. シンプル–スクリプト言語は、プログラミング言語よりも簡単に記述できます。

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

プログラムされた言語

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

プログラミング言語の例

  1. C
  2. C ++および
  3. ジャワ

もっと詳しく


スクリプト言語プログラミング言語です。また、Java JVMと呼ばれる別のアプリケーションによって解釈されます。
bfontaine 2017年

4

(JavaScriptおよび古いPHPバージョン)のようなスクリプト言語では、既存の基本的な関数とメソッドを使用してジョブを実行します。例をみましょうJavaScript、我々が使用することができますajaxweb-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つを使用しています。


3

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

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

一方、プログラミング言語は通常、システムを最初からコーディングするために使用されます。

src ECMA


2

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

Nitish K. Jhaに感謝


2

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

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

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

追加します:

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

つまり、インタープリター型言語である可能性があります。

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

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

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

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

常に例外があり、通常は実際のルールよりも言語に関する伝統に基づいています。BASICは、「スクリプト言語」とは見なされません。そのため、Visual Basic Sc​​riptは、名前に「スクリプト」を追加して、より大きなプログラム向けの「実際の」プログラミング言語であるVisual Basicと区別する必要がありました。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.