「スクリプト」と「アプリケーション」の違いは何ですか?

StackOverflow https://stackoverflow.com/questions/98268

  •  01-07-2019
  •  | 
  •  

質問

のような区別について言及しています。 この答え:

...bash はアプリケーションを作成するためのものではなく、スクリプトを作成するためのものです。確かに、アプリケーションにはいくつかのハウスキーピング スクリプトがあるかもしれませんが、書き込む必要はありません。 critical-business-logic.sh なぜなら、そのようなことには別の言語の方がおそらく適しているからです。

多くの言語を使ってきたプログラマとしては、これは C、Java、その他のコンパイル言語の俗物であるように思えます。私は自分の意見を補強したり、強引な答えを求めているわけではありません。むしろ、どのような技術的な違いが言及されているのかを知りたいのです。

(私は本業でも C を使用しているので、単に守りに入っているわけではありません。)

役に立ちましたか?

解決

従来、プログラムはコンパイルされ、スクリプトが解釈されていましたが、それはもはやそれほど重要ではありません。必要に応じて、ほとんどのスクリプトのコンパイル済みバージョンを生成できます。また、Java などの他の「コンパイル済み」言語は、実際には (バイト コード レベルで) 解釈されます。

より現代的な定義では、プログラムは顧客 (おそらく内部) が使用することを目的としているため、ドキュメントとサポートを含める必要があるのに対し、スクリプトは主に作成者が使用することを目的としている、ということになるかもしれません。

ウェブは興味深い反例です。私たちは皆、Google 検索エンジンで調べ物をするのを楽しんでいます。参照する「データベース」の作成に使用されるコードの大部分は、その作成者と保守者によってのみ使用されます。それはスクリプトになりますか?

他のヒント

アプリケーションは対話的に使用される傾向があり、スクリプトがそのコースを実行するため、バッチ作業に適していると言えます。具体的な区別ではないと思います。

通常、それは「スクリプト」対「プログラム」です。

この区別は主に「編集された言語の俗物性」、あるいはラリー・ウォールの言葉を借りてフェンスの向こう側に立つと、「脚本は俳優が持っているものであり、プログラムは観客に与えられるものである」ということについては私も同感です。

これは興味深いトピックですが、「スクリプト」と「アプリケーション」を区別するための適切なガイドラインはないと思います。

違いを理解するために、いくつかの Wikipedia 記事を見てみましょう。

脚本 (ウィキペディア -> スクリプト言語):

スクリプト言語、スクリプト言語または拡張言語は、ソフトウェア アプリケーションを制御するプログラミング言語です。「スクリプト」は、他のアプリケーションから独立して実行される「プログラム」とは別のものとして扱われることがよくあります。同時に、通常は別の言語で記述されるアプリケーションのコア コードとは区別され、エンド ユーザーがアクセスできることにより、アプリケーションの動作をユーザーのニーズに適合させることができます。

応用 (Wikipedia -> アプリケーション ソフトウェア -> 用語)

コンピューター サイエンスでは、アプリケーションとは、人々が特定の種類の作業を実行できるように設計されたコンピューター プログラムです。したがって、アプリケーションは、オペレーティング システム (コンピュータを実行する)、ユーティリティ (メンテナンスや汎用の雑務を実行する)、およびプログラミング言語 (コンピュータ プログラムの作成に使用) とは異なります。アプリケーションは、設計された作業に応じて、テキスト、数値、グラフィック、またはこれらの要素の組み合わせを操作できます。

上記のエントリを読むと、スクリプトは別のソフトウェアによって「ホスト」されているのに対し、アプリケーションはそうではないという違いが示唆されているようです。シェルスクリプトはシェルの動作を制御し、perl スクリプトはインタプリタの動作を制御して目的の操作を実行するなどの議論ができると思います。(これは少し無理が​​あると思うので、完全に同意できないかもしれません。)

結局のところ、口語的な区別は次の観点から行うことができるというのが私の意見です。 規模 プログラムの。一般に、スクリプトはアプリケーションに比べて規模が小さくなります。

また、目的の観点から言えば、スクリプトは一般的に、 タスクを実行します たとえば、特定のソフトウェアの複数のリリース バージョンを生成するビルド スクリプトなどに対処する必要があります。一方、アプリケーションは次のようなものに向けられています。 機能の提供 それはより洗練されており、エンドユーザー向けです。たとえば、メモ帳や Firefox などです。

John Ousterhout (TCL の発明者) が次の場所に優れた記事を掲載しています。 http://www.tcl.tk/doc/scripting.html そこで彼は、システム プログラミング言語 (ビルディング ブロックの実装、正確性、タイプ セーフを重視) とスクリプト言語 (ビルディング ブロックの結合、変化する環境や要件への応答性の重視、テキスト表現の内外への簡単な変換を重視) の区別を提案しています。その分類システムを使用する場合、プログラマーの 99% は、システム プログラミング言語よりもスクリプト言語に適した仕事をしていることになります。

スクリプトは、開始、実行、終了する一連のコマンドであることが多いです。多くの場合、人間の介入はまったく必要ないか、ほとんど必要ありません。アプリケーションは「プログラム」です...多くの場合、人間の介入が必要となり、規模が大きくなる傾向があります。

私にとってスクリプトとは、コードを 1 行ずつ解釈することを意味します。スクリプトを開いて、プログラマが判読できる内容を表示できます。アプリケーションは、スタンドアロンでコンパイルされた実行可能ファイルを意味します。

多くの場合、それは単に意味論的な議論であったり、特定のプログラミング言語を中傷する方法でさえあります。私の知る限り、「スクリプト」はプログラムの一種であり、正確な定義はやや曖昧であり、状況によって異なります。

「スクリプト」という用語は、多くの逐次ロジックやサブルーチンではなく、主に直線的に実行されるプログラムを意味するために使用することがあります。これは、ハリウッドの「スクリプト」が俳優に実行する一連の直線的な命令であるのとよく似ています。より大きなプログラムを駆動する目的で、より大きなプログラム内に埋め込まれた言語で書かれたプログラムを意味するためにそれを使用するかもしれません。たとえば、AppleScript を使用して古い Mac OS でタスクを自動化したり、埋め込み TCL インターフェイスを使用して何らかの方法で自身を公開するプログラムを駆動したりできます。

ただし、これらすべての場合において、スクリプトはプログラムの一種です。

「スクリプト言語」という用語は、動的に解釈される (場合によってはコンパイルされる) 言語を指します。通常、これらの言語には、非常に高度な命令、組み込みハッシュ、任意長のリスト、その他の高度なデータ構造など、多くの共通機能があります。しかし、これらの言語は、非常に大規模で複雑なモジュール形式の、適切に設計されたプログラムを作成できるため、「スクリプト」をプログラム以外のものと考えると、この用語に混乱するかもしれません。

こちらも参照 Perl プログラムですか、それとも Perl スクリプトですか? perlfaq1 にあります。

スクリプトは通常、スクリプトエンジン内のより大きなアプリケーションの一部として実行されます。JavaScript->ブラウザこれは、従来の静的タイプ型コンパイルされた言語と、コードがアプリケーションの主要部分を形成することを目的としている動的言語の両方とは対照的です。

アプリケーションは、一般的な一連の問題に対処するためのスクリプトのコレクションです。

スクリプトは、1 つの非常に特殊なタスクを実行するためのコードです。

私の意見では、この違いは使用されている言語とは何の関係もありません。bash を使用して複雑なアプリケーションを作成することも、C++ を使用して単純なスクリプトを作成することもできます。

まず最初に明確にしておきたいのは、 スクリプトはプログラムです. 。言い換えれば、スクリプトは一連の命令です。

プログラム:

コンパイルされる一連の命令はプログラムとして知られています。

脚本:

解釈される一連の命令は、スクリプトとして知られています。

perl を例に挙げると、perl スクリプトまたは perl アプリケーションを作成できます。

スクリプトは、単一のファイルまたは単一の名前空間を意味します。(例えば。updateFile.pl)。

アプリケーションは、ファイルまたは名前空間/クラスのコレクションで構成されるものになります (例:多くの .pm モジュール ファイルを含む OO 設計の Perl アプリケーション)。

個人的には、この分離は実際の実装から一歩後退したものだと考えています。

私の推定では、 応用 が計画されています。複数の目標があり、複数の成果物があります。アプリケーションが満たさなければならないコーディングの前に、設計時に確保されているタスクがあります。

ただし、脚本はスーツとしてまとめられただけであり、計画はほとんど含まれていません。

ただし、適切な計画を立てていないからといって、台本に格下げされるわけではありません。場合によっては、アプリケーションが不適切に計画されたスクリプトの集合体になってしまう可能性があります。

さらに、アプリケーションには、集合して全体を構成するスクリプトを含めることができます。ただし、スクリプトはアプリケーションのみを参照できます。

アプリケーションは大きく、人々によって何度も使用され、場合によっては顧客に販売されることもあります。

スクリプトは小さいものから始まり、運が良ければ小さいままで、顧客に販売されることはほとんどなく、自動的に実行されるか、使用されなくなる可能性があります。

どうでしょうか:

脚本:

脚本 言語で書かれたプログラミング ステートメントのテキスト ファイル (またはテキスト ファイルのコレクション) で、その中に書かれた個々のステートメントを マシン実行可能ファイルに解釈される コード 直前に それぞれが実行されます そしてこれが起こることを意図して.

応用:

アン 応用 人間のアクターにサービスを提供することを主な機能とするコンピューター プログラムです。

したがって、スクリプト言語で書かれたスクリプトベースのプログラムは、理論的には、スクリプトの実行中にテキストのステートメントが変更される可能性があります (もちろん、大きなリスクがあります)。コンパイルされたプログラムの同様の状況は、メモリ内のビットを反転することです。

参加者はいますか?:)

@Jeffの答えは良いです。私のお気に入りの説明は、

多くの(ほとんど?)スクリプト言語が解釈され、コンパイルされた言語は言語と見なされていると考えられていますが、コンパイルされた質問と解釈は、「スクリプト」との問題にゆるく接続されているだけです。「深刻な」言語。

ここでの問題の多くは、「スクリプト」はかなり曖昧な指定であるということです。「本格的なプログラム」(またはアプリケーション)を書くのではなく、スクリプトを書くのに便利な言語を意味します。しかし、複雑なスクリプトを単純なアプリケーションとどのように区別するのでしょうか?それは本質的に答えのない質問です。一般的に、スクリプトは、おそらくユーザー定義の順序で、いくつかのデータセットに適用される一連のコマンドです...しかし、その後、Photoshopに適用するためにその説明を伸ばすことができます。これは明らかに主要なアプリケーションです。スクリプトは一般にアプリケーションよりも小さく、いくつかの明確に定義されたことを行い、使用するのが「よりシンプル」であり、通常、明確な一連のサブ操作に分解できますが、これらはすべて主観的です。

参照元 ここ.

コードがコンパイルされるか解釈されるかはまったく問題ではないと思います。

本当の違いは、コードのコア ロジックにあります。

  • コードがシステム内の他のプログラムに実装されていない新しい機能を作成する場合、それはプログラムです。スクリプトで操作することもできます。

  • コードが主に他のプログラムのアクションによって操作され、合計結果が主に操作されたプログラムの作業の結果である場合、それはスクリプトです。文字通り、いくつかのプログラムのアクションのスクリプトです。

実際、スクリプト (またはスクリプト言語) とアプリケーションの違いは、スクリプトを機械語にコンパイルする必要がないことです。インタプリタを使用してスクリプトのソースを実行します。アプリケーションはソースをマシンコードにコンパイルして、スタンドアロン アプリケーションとして実行できるようにします。

スクリプトは通常、 プレーンテキストで書かれたコマンドまたは命令のセット それは ホスティングアプリケーションによって実行される (ブラウザ、コマンドインタープリタ、またはシェルなど)。

これは、実際に実行するときに強力ではない、または何らかの方法でコンパイルされていないという意味ではありません。ただし、スクリプトはそれ自体では何もできず、単なるプレーンテキストです。
本質的にはフラグメントのみであり、プログラムまたはアプリケーションを構築するには組み合わせる必要がありますが、拡張され完全に開発されたスクリプトまたはスクリプトのセットは、ホストによって実行されると、ソース ファイルの束と同様にプログラムまたはアプリケーションと見なされます。コンパイルするとアプリケーションになる可能性があります。

スクリプト言語には標準のライブラリやプラットフォームがありません (あるいは、ほとんどありません)。小型で軽量で、より大規模なアプリケーションに組み込めるように設計されています。Bash と Javascript は、その機能を他のプログラムに完全に依存しているため、スクリプト言語の良い例です。

この定義を使用すると、スクリプトは、より大きなアプリケーション (スイート) を駆動するために設計されたコードになります。Javascript は Firefox を呼び出して、ウィンドウを開いたり、DOM を操作したりする場合があります。Bash スクリプトは、既存のプログラムまたは他のスクリプトを実行し、それらをパイプで接続します。


また、なぜスクリプト言語を使用しないのかと尋ねると、次のようになります。

スクリプト言語用の単体テスト ツールはありますか?これは、「実際の」アプリケーションには非常に重要なツールですが、まったく欠けているようです。また、スクリプト言語に実際のライブラリ バインディングが存在することはほとんどありません。

ほとんどの場合、スクリプトは Python や Ruby などの実際の軽量言語に置き換えることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top