私は この答え のような区別に言及しています:
... bashは、スクリプト用のアプリケーションを作成するためのものではありません。確かに、あなたのアプリケーションはいくつかのハウスキーピングスクリプトを持っているかもしれませんが、書きません
critical-business-logic.sh
そのようなものにはおそらく別の言語がより良いので。
多くの言語で働いているプログラマーとして、これはC、Javaおよびその他のコンパイルされた言語のうなり声です。私は自分の意見の強化や手を振る答えを探しているのではありません。むしろ、私は本当にどのような技術的な違いが参照されているのか知りたい。
(そして、私は日々の仕事でCを使用しているので、私は防御的なだけではありません。)
伝統的にプログラムはコンパイルされ、スクリプトが解釈されますが、それはもはやそれほど重要ではありません。あなたが本当に望めば、ほとんどのスクリプトのコンパイルされたバージョンを生成することができ、Javaのような他の「コンパイルされた」言語は実際に(バイトコードレベルで)解釈されます。)
より現代的な定義は、プログラムは顧客(おそらく内部のプログラム)が使用することを目的としているため、ドキュメントとサポートが含まれている必要がある一方で、スクリプトは主に作者の使用を目的としています。
ウェブは興味深い反例です。私たちは皆、Google検索エンジンで物事を調べることを楽しんでいます。それが参照する「データベース」の作成に入るコードの大部分は、その作成者とメンテナーのみが使用します。それはスクリプトになりますか?
アプリケーションは対話的に使用される傾向があり、そこではスクリプトがコースを実行し、バッチ作業に適しています。具体的な区別だとは思いません。
通常は「スクリプト」対「プログラム」です。
この区別は、ほとんどが「コンパイルされた言語のうなり声」、またはラリー・ウォールを引用してフェンスの反対側にあることを示しています。
John Ousterhout(TCLの発明者)は、優れた記事 http://www.tcl.tk/doc/scripting.html でシステムプログラミング言語の違いを提案しています(ビルディングブロックを実装するために、正確性、タイプセーフを重視)とスクリプト言語(ビルディングブロックを組み合わせる場合、変化する環境と要件への応答性を重視、テキスト表現に簡単に変換できる)この分類システムを使用すると、プログラマーの99%が、システムプログラミング言語よりもスクリプト言語に適した仕事をしています。
これは興味深いトピックであり、「スクリプト」と「アプリケーション」を区別するための非常に優れたガイドラインはないと思います。
ウィキペディアの記事をいくつか見て、違いを感じてみましょう。
スクリプト (ウィキペディア->スクリプト言語):
スクリプト言語、スクリプト言語または拡張言語は、ソフトウェアアプリケーションを制御するプログラミング言語です。 「スクリプト」は、他のアプリケーションから独立して実行される「プログラム」とは異なるものとして扱われることがよくあります。同時に、通常は異なる言語で記述されたアプリケーションのコアコードとは異なり、エンドユーザーがアクセスできるようにすることで、アプリケーションの動作をユーザーのニーズに適合させることができます。
アプリケーション (Wikipedia->アプリケーションソフトウェア->用語)
コンピュータサイエンスでは、アプリケーションは、人々が特定の種類の作業を実行できるように設計されたコンピュータプログラムです。したがって、アプリケーションは、オペレーティングシステム(コンピューターを実行する)、ユーティリティ(メンテナンスまたは汎用雑用を実行する)、およびプログラミング言語(コンピュータープログラムを作成する)とは異なります。設計された作業に応じて、アプリケーションはテキスト、数値、グラフィック、またはこれらの要素の組み合わせを操作できます。
上記のエントリを読むと、スクリプトが別のソフトウェアによって「ホストされている」のに対し、アプリケーションはそうではないという違いがあることを示唆しているようです。シェルの動作を制御するシェルスクリプトや、インタプリタの動作を制御して目的の操作を実行するPerlスクリプトなど、議論の余地があると思います。 (これは少し伸びるかもしれないので、完全に同意しないかもしれません。)
それについて言えば、口語的な区別はプログラムのscaleの観点から行うことができると私は考えています。アプリケーションと比較すると、スクリプトは一般に規模が小さくなります。
また、目的に関して、スクリプトは一般にタスクを実行します。たとえば、特定のソフトウェアの複数のリリースバージョンを生成するスクリプトをビルドするなどの処理が必要です。一方、アプリケーションはより洗練された機能を提供することを目的としており、エンドユーザーを対象としています。たとえば、メモ帳やFirefoxなどです。
スクリプトは、開始、実行、終了する一連のコマンドである傾向があります。多くの場合、人間による操作は必要ありません。アプリケーションは「プログラム」です。多くの場合、人間の操作が必要であり、大きくなる傾向があります。
多くの場合、これは単なるセマンティックな議論、または特定のプログラミング言語を否定する方法です。私に関する限り、「スクリプト」はプログラムの一種であり、正確な定義はややあいまいであり、コンテキストによって異なります。
「スクリプト」という用語は、ハリウッドの「スクリプト」が俳優が実行する線形の命令シーケンスのように、多くの順次ロジックまたはサブルーチンではなく、主に線形に実行するプログラムを意味するために使用する場合があります。大きなプログラムの内部に埋め込まれた言語で書かれたプログラムを意味し、そのプログラムを駆動するために使用する場合があります。たとえば、AppleScriptを使用して古いMac OSでタスクを自動化したり、埋め込まれたTCLインターフェイスで何らかの方法でそれ自体を公開するプログラムを駆動したりします。
しかし、これらすべての場合において、スクリプトは一種のプログラムです。
「スクリプト言語」という用語は、動的に解釈される(場合によってはコンパイルされる)言語に使用されています。通常、これらの言語には、非常に高レベルの命令、組み込みハッシュ、任意の長さのリスト、その他の高レベルのデータ構造など、多くの共通機能があります。しかし、これらの言語は非常に大規模で複雑なモジュール式の適切に設計されたプログラムに対応しているため、「スクリプト」をプログラム以外のものと考えると、その用語が混乱する可能性があります。
Perlfaq1の Perlプログラムですか、それともPerlスクリプトですか? も参照してください。
私にとってのスクリプトは、コードの行ごとの解釈を意味します。スクリプトを開いて、プログラマが読み取り可能なコンテンツを表示できます。アプリケーションは、スタンドアロンのコンパイル済み実行可能ファイルを意味します。
スクリプトは通常、スクリプトエンジン内の大きなアプリケーションの一部として実行されます。 JavaScript->ブラウザこれは、コードがアプリケーションの主要部分を形成することを目的とした従来の静的型付きコンパイル言語と動的言語の両方とは対照的です。
まず第一に、私はスクリプトはプログラムですであることを明確にしたいと思います。つまり、スクリプトは一連の指示です。
プログラム:
コンパイルされる命令のセットはプログラムと呼ばれます。
スクリプト:
解釈される一連の命令は、スクリプトと呼ばれます。
アプリケーションは、一般的な一連の問題を対象としたスクリプトのコレクションです。
スクリプトは、かなり特定の1つのタスクを実行するための少しのコードです。
IMO、違いは使用される言語とは何の関係もありません。 bashを使用して複雑なアプリケーションを記述したり、C++を使用して単純なスクリプトを記述したりすることができます。
個人的には、分離は実際の実装からのステップバックだと思います。
私の見積もりでは、アプリケーションが計画されています。複数の目標があり、複数の成果物があります。アプリケーションが満たす必要があるコーディングの前に、設計時に取っておかれるタスクがあります。
ただし、スクリプトはスーツとして一緒に投げられるだけであり、計画はほとんど含まれていません。
ただし、適切な計画の欠如は、スクリプトにダウングレードしません。おそらく、それはあなたのアプリケーションを、不十分に計画されたスクリプトの不十分に組織化されたコレクションにします。
さらに、アプリケーションには、全体を構成する集約されたスクリプトを含めることができます。ただし、スクリプトはアプリケーションのみを参照できます。
何について:
スクリプト:
scriptは、言語で記述されたプログラミングステートメントのテキストファイル(またはテキストファイルのコレクション)であり、記述された個々のステートメントをマシンで解釈できるようにします実行可能コードコードの直前それぞれが実行されるおよびこれが発生することを意図して。
アプリケーション:
アプリケーションは、人間のアクターにサービスを提供することを主な機能とするコンピュータプログラムです。
したがって、スクリプト言語で記述されたスクリプトベースのプログラムは、理論的には、スクリプトの実行中に(当然、の大きなリスクを伴いながら)テキストステートメントを変更できます。コンパイルされたプログラムの同様の状況は、メモリ内のビットを反転します。
テイカーはいますか? :)
アプリケーションは大きく、繰り返し使用され、顧客に販売される可能性があります。
スクリプトは最初は小さいですが、運が良ければ小さいままで、顧客に売られることはめったになく、自動的に実行されるか、使用されなくなります。
Perlを例にとると、PerlスクリプトまたはPerlアプリケーションを作成できます。
スクリプトは、単一のファイルまたは単一の名前空間を意味します。 (例:updateFile.pl)。
アプリケーションは、ファイルまたは名前空間/クラスのコレクションで構成されるものになります(たとえば、多くの.pmモジュールファイルを持つOO設計のPerlアプリケーション)。
コードがコンパイルされるか解釈されるかはまったく問題ないと思います。
真の違いは、コードのコアロジックにあります。
コードがシステムの他のプログラムに実装されていない新しい機能を作成する場合-それはプログラムです。スクリプトで操作することもできます。
コードが主に他のプログラムのアクションによって操作され、合計結果が主に操作されたプログラムの作業の結果である場合-それはスクリプトです。文字通り、一部のプログラムのアクションのスクリプト。
@ジェフの答えは良いです。私の好きな説明は
多くの(ほとんど?)スクリプト言語が解釈され、コンパイルされた言語はスクリプト言語と見なされますが、コンパイルされた言語と解釈された言語の問題は、「スクリプト」言語と「深刻な」言語の問題に大まかに関連しています。
ここでの問題の多くは、「スクリプト」がかなり曖昧な指定であることです。つまり、「本格的なプログラム」(またはアプリケーション)を書くのではなく、スクリプトを書くのに便利な言語を意味します。しかし、複雑なスクリプトと単純なアプリケーションをどのように区別するのでしょうか。それは本質的に答えられない質問です。一般に、スクリプトはデータセットに適用される一連のコマンドであり、おそらくユーザー定義の順序で適用されますが、その説明を拡張して、明らかに主要なアプリケーションであるPhotoshopに適用することができます。スクリプトは一般にアプリケーションよりも小さく、明確に定義された処理を実行し、使用するのが「簡単」であり、通常、一連の明確なサブ操作に分解できますが、これらはすべて主観的なものです。
here から参照。