言語をスクリプト言語にする理由は何ですか? 「コンパイルされる代わりに解釈されるとき」と言う人もいます。これにより、PHP(たとえば)がスクリプト言語になります。それが唯一の基準ですか?または、他の基準はありますか?
スクリプト言語とは、他のことを「スクリプト化」する言語です。主な焦点は、主に独自のアプリを構築することではなく、既存のアプリを希望どおりに動作させることです。ブラウザ用のJavaScript、MS Office用のVBA。
シンプル。私がそれを使用するとき、それは現代の動的言語であり、あなたがそれを使用するとき、それは単なるスクリプト言語です!
伝統的に、スクリプトとプログラミングの違いについて話すとき、スクリプトは解釈され、プログラムはコンパイルされます。言語はさまざまな方法で実行することができます-解釈またはコンパイル(バイトコードまたはマシンコードへ)。これは、languageを別のものにしません。
いくつかの目では、言語を使用する方法をスクリプト言語にします(たとえば、主にC++で開発するゲーム開発者はscriptLuaのオブジェクト)。繰り返しますが、線はぼやけています-ある人はプログラミングに言語を使用でき、別の人は同じ言語をスクリプト言語に使用できます。
これは、スクリプト言語に関する wikipedia 記事からのものです。
スクリプト言語、スクリプト言語、または拡張言語は、1つ以上のソフトウェアアプリケーションの制御を可能にするプログラミング言語です。 「スクリプト」は通常、異なる言語で記述され、多くの場合エンドユーザーによって作成または少なくとも変更されるため、アプリケーションのコアコードとは異なります。スクリプトは多くの場合、ソースコードまたはバイトコードから解釈されますが、スクリプトが制御するアプリケーションは伝統的にネイティブマシンコードにコンパイルされます。スクリプト言語は、ほとんどの場合、制御するアプリケーションに埋め込まれています。
「通常」、「頻繁に」、「伝統的に」、「ほぼ常に」の使用に気づくでしょう-これらはすべて、noセットがあることを示しています特定の言語を「スクリプト言語」にする個別の属性。
「スクリプトは、俳優に与えるものです。プログラムは、観客に与えるものです。」 -ラリーウォール
私は本当に大きな違いはもうないと思います。いわゆる「スクリプト」言語はしばしばコンパイルされます-非常に迅速に、そして実行時に。また、「プログラミング」言語の一部は、実行時にさらにコンパイルされます(JITと考えてください)。「コンパイル」の最初の段階は、構文チェックとリソース解決です。
それに夢中にならないでください、それは本当に重要ではありません。
私の定義は、通常バイナリではなくソースとして配布される言語です。
これには可能な答えがたくさんあります。
まず、スクリプト言語isはプログラミング言語であるため、スクリプト言語とプログラミング言語との間の差の問題ではありません。他のプログラミング言語ではないスクリプト言語である一方で、プログラミング言語をスクリプト言語にする特性は何かという疑問です。
2番目:XYZ言語が何であるか、そのXYZが「スクリプティング」、「関数型プログラミング」、「オブジェクト指向プログラミング」であるか、何を持っているかを言うのは本当に難しいです。 「関数型プログラミング」とは何かの定義はかなり明確ですが、「関数型プログラミング言語」が何であるかは誰にもわかりません。
関数型プログラミングまたはオブジェクト指向プログラミングはプログラミングですstyles;ほぼすべての言語で機能スタイルまたはオブジェクト指向スタイルで記述できます。たとえば、Linux Virtual File System SwitchとLinux Driver Modelは、Cで記述されているにもかかわらず、オブジェクト指向です。一方、Webで見られるJavaまたはC#コードの多くは非常に手続き的であり、オブジェクトではありません。指向すべて。 OTOH、私はいくつかの非常に機能的なJavaコードを見てきました。
それで、関数型プログラミングとオブジェクト指向プログラミングがany言語で実行できる単なるスタイルである場合、「オブジェクト指向プログラミング言語」をどのように定義しますか?オブジェクト指向プログラミング言語は、オブジェクト指向プログラミングを可能にする言語であると言えます。しかし、それはあまり定義ではありません:all言語はオブジェクト指向プログラミングを許可します。したがって、all言語はオブジェクト指向ですか?つまり、言語はオブジェクト指向ですforcesオブジェクト指向スタイルでプログラミングするなら。しかし、それはあまり定義ではありません。all言語は関数型プログラミングを許可するため、no言語はオブジェクト指向ですか?
だから、私にとって、私は次の定義を見つけました:
言語は、スクリプト言語(オブジェクト指向言語/関数型言語)です両方
- 促進スクリプト(オブジェクト指向プログラミング/関数型プログラミング)、つまり許可だけでなく、それを作成します簡単および自然およびhelp with with、AND
- 奨励およびガイドスクリプト(オブジェクト指向プログラミング/関数型プログラミング)を目指しています。
それで、5つの段落の後、「スクリプト言語はスクリプト用の言語です」に到達しました。なんて素晴らしい定義でしょう。ない。
明らかに、「スクリプト」の定義を調べる必要があります。
これが3番目の問題の出番です。「関数型プログラミング」という用語は明確に定義されており、残念ながらスクリプトで問題となるのは「関数型プログラミング言語」という用語だけですboth用語「スクリプト」および「スクリプト言語」という用語は不明確です。
さて、まずスクリプトisプログラミングです。特別な種類のプログラミングです。 IOW:すべてのスクリプトはプログラムですが、すべてのプログラムがスクリプトではありません。すべてのスクリプトのセットは、すべてのプログラムのセットの適切なサブセットです。
私個人の意見では、スクリプティングスクリプトを作成し、他の種類のプログラミングと区別するものは…
スクリプトは、主に
- スクリプトによって作成されたのではなく、
- スクリプトに依存しないライフタイムを持ち、
- スクリプトのドメイン外に住んでいます。
また、使用されるデータ型とアルゴリズムは通常、スクリプトではなく外部環境によって定義されます。
シェルスクリプトについて考えます。シェルスクリプトは通常、ファイル、ディレクトリ、およびプロセスを操作します。システム上のファイル、ディレクトリ、およびプロセスの大部分は、おそらく現在実行中のスクリプトによって作成されたものではありません。また、スクリプトが終了しても消えません。その有効期間はスクリプトから完全に独立しています。また、実際にはスクリプトの一部ではなく、システムの一部です。 File
クラスとDirectory
クラスを記述してスクリプトを開始したわけではありません。これらのデータ型は心配する必要はありません。 必要知る方法)また、独自のアルゴリズムも実装していません。ディレクトリトラバーサルの場合は、独自の幅優先検索を実装する代わりにfind
を使用するだけです。
要するに、スクリプトは、スクリプトとは独立して存在するより大きなシステムに自身を接続し、システムの一部を操作して終了します。
その大きなシステムは、シェルスクリプトの場合はオペレーティングシステム、ブラウザースクリプトの場合はブラウザーDOM、ゲーム(Luaを使用したWorld of WarcraftまたはLindenスクリプト言語を使用したSecond Life)、アプリケーション(AutoLispなど) AutoCADまたはExcel/Word/Officeマクロ用の言語)、Webサーバー、ロボットのパックまたはその他の完全なもの。
スクリプトの側面は、プログラミング言語の他のすべての側面と完全に直交していることに注意してください:スクリプト言語は、強くまたは弱く型付けでき、厳密にまたは緩く型付けでき、静的または動的に型付けできます。 。命令型または機能型、オブジェクト指向型、手続き型または機能型、厳密または遅延型のいずれかです。その実装は、解釈、コンパイル、または混合することができます。
たとえば、モンドリアンは、厳密に静的に型付けされた遅延機能スクリプト言語であり、実装がコンパイルされています。
ただし、実世界でスクリプト言語という用語が実際にで使用される方法は、上記のいずれとも関係がないため、これらはすべて意味がありません。ほとんどの場合、単にin辱として使用され、定義はかなり単純で、単純化されています。
- 実プログラミング言語:プログラミング言語
- スクリプト言語:プログラミング言語
これは、この用語が最も頻繁に使用される方法のようです。
それはポルノのようなもので、見ればわかる。スクリプト言語の唯一の可能な定義は次のとおりです。
A language which is described as a scripting language.
少し丸いですね。 (ところで、私は冗談を言っていません)。
基本的に、特に作成者によってそのように呼ばれることを除いて、言語をスクリプト言語にするものは何もありません。最新のスクリプト言語の主要なセットは、PHP、Perl、JavaScript、Python、RubyおよびLuaです。 Tclは、最初の主要な現代のスクリプト言語です(ただし、最初のスクリプト言語ではなかったので、それが何であるかは忘れましたが、Tclよりも前のものであることに驚きました)。
私の論文 で主要なスクリプト言語の機能を説明しています。
A Practical Solution for Scripting Language Compilers
Paul Biggar, Edsko de Vries and David Gregg
SAC '09: ACM Symposium on Applied Computing (2009), (March 2009)
ほとんどは動的に型付けおよび解釈され、ほとんどは参照実装以外に定義されたセマンティクスを持ちません。ただし、主要な実装がコンパイルまたはJIT化された場合でも、言語の「性質」は変わりません。
残っている問題は、新しい言語がスクリプト言語であるかどうかをどのように判断できるかだけです。まあ、それがスクリプト言語と呼ばれる場合、それは1つです。 Factor はスクリプト言語(または少なくともそれが記述されたとき)ですが、たとえば、Javaはそうではありません。
「スクリプト言語」は、多くのことを意味するファジーな概念の1つです。通常、ソースコードから実行までのワンステッププロセスが存在するという事実を指します。
たとえば、Perlでは次のようにします。Perl my_source.pl
上記の基準を考えると、PHPはスクリプト言語です(たとえば、Zend Encoderを使用してソースコードを「保護」する場合、「コンパイル」プロセスを使用できます)。
PS。多くの場合(常にではありません)スクリプト言語が解釈されます。また、多くの場合(常にではありませんが)スクリプト言語は動的に入力されます。
すべてのスクリプト言語はプログラミング言語です。厳密に言えば、違いはありません。
この用語は、言語の基本的な特性を指すものではなく、言語の典型的なseを指すものです。主に既存のコードを呼び出し、結果に対していくつかの簡単な処理を行う短いプログラムを作成するのが一般的な使用である場合(つまり、一般的な使用がscriptsの作成である場合)スクリプト言語。
1つの部門は
動的に解釈される言語は実行時に解釈されますが、コンパイルされた言語は実行前にコンパイルされます。
Jörgが指摘したように、解釈/コンパイルされた区別は言語の機能ではなく、実行エンジンの機能であることを付け加えます。
Type system の説明にも興味があるかもしれません。これは、実行エンジンではなく、言語の側面に関連し、より焦点を当てています。ほとんどのスクリプト言語は動的に型付けされますが、「通常の」言語はほとんど静的に型付けされます。
一般に、静的に型付けされた言語と動的に型付けされた言語の区分は、より適切に定義され、言語の使いやすさにより多くの影響を与えます。
Roberto Ierusalimschy氏には、「Luaでのプログラミング」で非常に良い答えや質問があると思います。
ただし、インタープリター言語の際立った特徴は、それらがコンパイルされないことではなく、コンパイラーが言語ランタイムの一部であり、そのため、その場で生成されたコードを実行できることです。
第一に、プログラミング言語は「スクリプト言語」などではありません。 「スクリプト言語」などでもかまいません。
2番目に、言語の実装者は、それがスクリプト言語であるかどうかを教えてくれます。
あなたの質問は、「スクリプト言語とプログラミング言語の違いは何ですか?」ではなく、「プログラミング言語はスクリプト言語と見なされますか?」を読む必要があります。間にはありません。
それでも、ある種のミドルウェアを提供するために使用される場合、その言語をスクリプト言語と見なします。たとえば、JavaScriptのほとんどの実装をスクリプト言語と見なします。 JavaScriptがブラウザではなくOSで実行された場合、スクリプト言語にはなりません。 PHPがApache内で実行されている場合、それはスクリプト言語です。コマンドラインから実行する場合は実行されません。
私の友人と私はちょうどこの議論を持っていました:プログラミング言語とスクリプト言語の違いは何ですか。
人気のある議論は、プログラミング言語がコンパイルされ、スクリプト言語が解釈されるということです-しかし、この議論は完全に間違っていると思います...なぜですか?
それに基づいて、これはプログラミング言語とスクリプト言語の違いについての私の議論です。
プログラミング言語はマシンレベルで実行され、マシン自体(メモリ、グラフィックス、サウンドなど)にアクセスできます。
スクリプト言語はサンドボックス化されており、サンドボックスに公開されているオブジェクトにのみアクセスできます。基になるマシンには直接アクセスできません。
スクリプト言語はもともと、ハードプログラミング言語で記述されたアプリケーションの制御メカニズムと考えられていました。コンパイルされたプログラムは実行時に変更できなかったため、スクリプトを作成すると柔軟性が得られました。
最も注目すべきは、シェルスクリプトがOSカーネル(従来、Mac上のAppleScript)のプロセスを自動化していたことです。ますますPerlの手に渡され、ついに最近Pythonに渡された役割。レイトレーシングシーンの宣言に使用されるScheme(特にGuileの実装)を見てきました。そして最近、Luaはスクリプトゲームのプログラミング言語として非常に人気があります。多くの新しいゲームでハードコーディングされているのはグラフィックス/物理エンジンのみであり、ゲームロジック全体はLuaでエンコードされています。同様に、JavaScriptはWebブラウザーの動作をスクリプト化すると考えられていました。
解放された言語。誰もOSをアプリケーションと考えない(またはまったく考えない)ため、以前はスクリプト言語の多くが独自の完全なアプリケーションを記述するために使用され始めました。名前自体は無意味になり、今日使用されている多くのインタープリター言語に広まりました。これらの言語は、別のシステム内から解釈されるように設計されているかどうかに関係ありません。
ただし、「スクリプト言語」は「解釈言語」と同義ではありません。たとえば、BASICはそのほとんどの期間(つまり、頭字語を失い、Visual Basicになる前)に解釈されましたが、スクリプト。
UPDATE:いつものように資料を読む ウィキペディアで 。
スクリプト言語は、明白な重量感のある「コンパイル」ステップを必要としないものと考えています。プログラマーの観点からの主な機能は、コードを編集してすぐに実行することです。
したがって、JavaScriptとPHPはスクリプト言語と見なしますが、 ActionScript / Flex は実際にはそうではありません。
スクリプト言語は通常です:
非スクリプト言語は通常::1.静的に型指定されます2.コンパイルされ、パフォーマンスに重点が置かれます。3.より多くの定型コードが必要です。用語保守性4.大規模プロジェクトに使用され、多くの設計パターンに適応
しかし、私の意見では、それは最近の歴史的な違いです。 JavascriptとPerlは小さくシンプルなスクリプトを念頭に置いて作成されましたが、C++は複雑なアプリケーションを念頭に置いて作成されました。ただし、どちらも使用できます。とにかく、多くのプログラミング言語は、現代のものも昔のものも、とにかく線を曖昧にします(そもそもあいまいでした!)。
悲しいことに、「スクリプト言語」として認識しているものを嫌い、よりシンプルで強力ではないと考えている開発者を数人知っています。私の意見では、その古い決まり文句です-仕事に適切なツールを使用してください。
スクリプト言語は、多くの人々が遠ざかりつつある用語であることをお勧めします。最近は、ほとんどがコンパイル言語と動的言語に要約されていると思います。
Pythonのようなものを実際に言うことはできない、またはRubyはこの日と時代の「スクリプト」言語です( IronPython およびJIT-your-favorite-language、違いはさらにぼやけています)。
正直に言うと、個人的にはPHPはスクリプト言語ではないと感じています。履歴書でPHPとは異なる方法でJavaを分類することを人々が好むとは思わないでしょう。
重複した質問から回答を移行します
「スクリプト言語」という名前は、既存のソフトウェアアプリケーションに送信するコマンドを記述する言語という非常に特定の役割に適用されます。 (従来のテレビや映画の「スクリプト」のような)
たとえば、昔々、HTML Webページは退屈でした。それらは常に静的でした。それからある日、Netscapeは「ねえ、もしブラウザにページの小さなコマンドを読んで行動させたらどうだろう」と考えました。そして、そのように、Javascriptが形成されました。
単純なjavascriptコマンドはalert()
コマンドで、Webページを読み込んでアラートを表示するブラウザー(ソフトウェアアプリ)に指示/コマンドを実行します。
さて、alert()
は、何らかの形で、C++や、ブラウザが実際に使用してアラートを表示するコード言語に関連していますか?もちろん違います。 .htmlページに "alert()"を書いた人は、ブラウザが実際にアラートを表示する方法を理解していません。彼はブラウザが解釈するコマンドを書いているところです。
簡単なJavaScriptコードを見てみましょう
<script>
var x = 4
alert(x)
</script>
これらは、ブラウザがそれ自体で解釈するために、ブラウザに送信される命令です。ブラウザーが実際に変数を4に設定するために通過するプログラミング言語は、アラートに入れます...これはjavascriptとはまったく関係ありません。
この最後の一連のコマンドを「スクリプト」と呼びます(これが<script>
タグで囲まれている理由です)。 「スクリプト」の定義だけで、伝統的な意味で:一連の命令とコマンドが俳優に送られます。たとえば、脚本(映画の脚本)が脚本であることは誰もが知っています。
脚本(スクリプト)は、not俳優、カメラ、または特殊効果です。脚本は彼らに何をすべきかを伝えるだけです。
さて、スクリプト言語とは何ですか?
ツールボックスにはさまざまなツールのようなプログラミング言語がたくさんあります。一部の言語は、スクリプトとして使用されるように設計されました具体的に。
Javasriptは明らかな例です。スクリプトの領域に該当しないJavascriptのアプリケーションはほとんどありません。
ActionScript(Flashアニメーションの言語)とその派生物はスクリプト言語であり、Flashプレーヤー/インタープリターにコマンドを発行するだけです。確かに、オブジェクト指向プログラミングなどの抽象化がありますが、それはあくまでも目的であり、コマンドをフラッシュプレーヤーに送信するだけです。
PythonとRubyは、一般的にスクリプト言語としても使用されます。たとえば、私はかつてRubyを使用して、「このサイトに移動し、このリンクをクリックして...」という行に沿ってブラウザに送信するスクリプトコマンドを使用する会社で働いていました自動テスト。私はその仕事で、not「ソフトウェア開発者」ではありませんでした。ブラウザにコマンドを送信するコマンドをコンピューターに送信するスクリプトを作成しました。
スクリプト言語はその性質上、めったに「コンパイル」されません。つまり、マシンコードに変換され、コンピューターによって直接読み取られます。
PythonおよびRubyから作成されたGUIアプリケーションでも、C++またはCで記述されたAPIに送信されるスクリプトです。Cアプリに何をするかを指示します。
もちろん、曖昧な線があります。コンピューター言語が基本的なマザーボード/グラフィックスカード/チップとのインターフェイスに使用するスクリプトであるため、Machine Language/Cはスクリプト言語であると言えませんか?
明確にするために描画できる線がいくつかあります。
スクリプト言語を記述し、「コンパイル」せずに実行できる場合、それはより直接的なスクリプトのようなものです。たとえば、俳優にそれをどうするかを伝えるために、脚本で何もする必要はありません。すでにそこにあり、そのまま使用されています。この理由から、コンパイルされた言語を除くは、スクリプト言語として使用されることもありますが、スクリプト言語として使用される場合もあります。
スクリプト言語は、complexソフトウェアアプリケーションに送信されるコマンドを意味します。それが私たちが最初にスクリプトを書く全体の理由です。したがって、コマンドを送信するためにソフトウェアがどのように機能するかの複雑さを知る必要はありません。そのため、スクリプト言語は、比較的)単純なコマンドを複雑なソフトウェアアプリケーションに送信する ...という言語になる傾向があります。この場合、機械語とアセンブリコードはそれをカットしません。
私の意見では、PHP、Rubyなどの動的に解釈される言語は、まだ「通常の」言語であると言えます。 「スクリプト」言語の例は、bash(またはkshやtcshなど)やsqlplusなどです。これらの言語は、多くの場合、システム上の既存のプログラムを次のような一連の一貫した関連するコマンドにまとめるために使用されます。
(私にとっては)とにかく、違いはse言語の方が大きいと思います。 PHP、Perl、Rubyなどの言語は「スクリプト言語」として使用できますが、通常は「通常の言語」として使用されます(Perlは両方の方法で使用されるようです)。
「スクリプト言語」の定義はかなりあいまいです。次の考慮事項に基づいて判断します。
スクリプト言語には通常、ユーザーに見えるコンパイル手順はありません。通常、ユーザーは1つの簡単なコマンドでプログラムを実行できます。
スクリプト言語のプログラムは通常、ソース形式で渡されます。
スクリプト言語には通常、多数のシステムに存在するランタイムがあり、ほとんどのシステムにランタイムを簡単にインストールできます。
スクリプト言語はクロスプラットフォームであり、マシン固有ではない傾向があります。
スクリプト言語を使用すると、他のプログラムを簡単に呼び出してオペレーティングシステムとやり取りできます。
スクリプト言語は通常、従来のプログラミング言語で記述された大規模なシステムに簡単に組み込むことができます。
スクリプト言語は通常、プログラミングを容易にするように設計されており、実行速度はあまり考慮されていません。 (高速実行が必要な場合、時間のかかる部分をCのようなものでコーディングし、言語をCに埋め込むか、言語からCビットを呼び出すことが通常のアドバイスです。)
上記の特性のいくつかは実装に当てはまります。その場合、より一般的な実装を参照しています。 Cインタープリターがありますが(明らか)明らかなコンパイル手順はありませんが、ほとんどのC実装には当てはまりません。もちろん、Perlプログラムをネイティブコードにコンパイルすることもできますが、それは通常の方法ではありません。他のいくつかの特性は本質的に社会的です。上記の基準の一部は多少重複しています。私が言ったように、定義はあいまいです。
「スクリプト言語」という用語を使わない方がいいと思います。努力が減るからです。 「スクリプト言語」と呼ばれることが多いPerlのような言語を使用してください。
コンパイルされたJavaのような言語とそうでないRubyのような言語を区別する必要があるのはなぜですか?ラベル付けの価値は何ですか?
詳細については、 http://xoa.petdance.com/Stop_saying_script を参照してください。
スクリプト言語は、既存のプログラムを構成または拡張する言語です。
スクリプト言語はプログラミング言語です。
スクリプト言語は、プログラムが通常、読み取り可能なテキスト形式でエンドユーザーに配信され、そのプログラムを直接実行できる明らかにできるプログラムがあるプログラミング言語です。 (プログラムはスクリプトを内部でコンパイルする可能性があります。ユーザーには表示されないため、ここでは関係ありません。)
スクリプト言語では、ユーザーがプログラムを入力するだけですぐに実行できる対話型セッションをサポートできることが比較的一般的です。これは、これが最初の段落からの必須要件の些細な拡張だからです。主な追加要件は、入力されたステートメントがいつ完了して実行エンジンに送信できるかを把握するメカニズムの追加です。
スクリプト言語は、より大きなアプリケーションの一部であるスクリプトエンジン内で実行される傾向があります。たとえば、JavaScriptはブラウザのスクリプトエンジン内で実行されます。
質問に対する若干異なる見解について。スクリプト言語はプログラミング言語ですが、プログラミング言語は必ずしもスクリプト言語ではありません。スクリプト言語は、システムを制御またはスクリプト化するために使用されます。そのシステムは、スクリプト言語がbashであるオペレーティングシステムである可能性があります。システムは、PHPスクリプト言語を使用するWebサーバーである可能性があります。スクリプト言語は、特定のニッチを埋めるように設計されています。それらはドメイン固有の言語です。対話型システムはスクリプト言語を解釈しており、スクリプト言語が解釈されるという概念を生み出しています。ただし、これはシステムの結果であり、スクリプト言語自体の結果ではありません。
スクリプト言語は、スクリプトが実行されるたびに解釈される言語であり、インタープリターが存在することを意味し、ほとんどが非常に人間が読める形式であるため、スクリプト言語は学習と使用が簡単です。
すべてのコンパイル可能な言語はスクリプト言語にすることができ、その逆はすべてインタープリターまたはコンパイラーの実装に依存します。たとえば、C++にはインタープリターがあり、使用するとスクリプト言語と呼ぶことができます(一般的にC++は非常に複雑な言語です)、現在最も有用なスクリプト言語の1つはPythonです...
したがって、あなたの質問に答えるには、定義はインタプリタを使用して迅速かつ簡単なスクリプトプログラムを実行すること、単純なタスクまたはプロトタイプアプリケーションに対処すること、スクリプト言語で行うことができる最も強力な使用は、あらゆる使用を拡張する可能性を含めることですコンパイルされたアプリケーション。
プログラミング言語の概念 でロバート・セベスタを言い換える:
スクリプト言語は、スクリプトと呼ばれるコマンドのリストを実行するファイルに入れることで使用されます。これらの言語の最初のsh(シェルの場合)という名前は、実行されたシステムサブプログラムへの呼び出しとして解釈されるコマンドの小さなコレクションとして始まりましたファイル管理や単純なファイルフィルタリングなどのユーティリティ機能。これに基づいて、変数、制御フローステートメン、関数、およびその他のさまざまな機能が追加され、結果は完全なプログラミング言語になりました。
そして、あなたはAWK、Tcl/Tk、Perl(最初はshおよびAWKが非常に強力になったため、「奇妙だが本格的な」プログラミング言語」)。他の例には、CGIおよびJavaScriptが含まれます。
私は常に、ある種のアプリケーションやプログラムと通信する手段としてスクリプト言語を検討していました。対照的に、コンパイルされた言語は実際にプログラム自体を作成します。
ここで、スクリプト言語は通常、最初にコンパイルされた言語で作成されたプログラムに追加または変更することに注意してください。したがって、それは確かに大きな図の一部になりますが、最初のバイナリは最初にコンパイルされた言語で作成されます。
したがって、ユーザーがさまざまなアクションを実行したり、プログラムをカスタマイズしたりできるスクリプト言語を作成できます。私のプログラムはスクリプト化されたコードを解釈し、ある種の関数を呼び出します。これは単なる基本的な例です。プログラム内でルーチンを動的に呼び出す方法を提供するだけです。
私のプログラムは、スクリプト化されたコードを解析し(これらをコマンドと呼ぶこともできます)、リアルタイムで意図されたアクションを実行する必要があります。
この質問にはすでに数回回答されているようですが、物事の見方をミックスに追加すると思いました。確かに、一部の人々はこの答えに反対するかもしれませんが、この考え方はいつも私を助けてくれました。
scriptは、比較的smallプログラムです。 systemは比較的largeプログラム、または比較的大きなプログラムのコレクション。
一部のプログラミング言語は、言語設計者とプログラミングコミュニティが比較的小さなプログラムを作成するときに役立つと考える機能を使用して設計されています。これらのプログラミング言語は、スクリプト言語として知られています。 PHP。
同様に、他のプログラミング言語は、言語設計者とプログラミングコミュニティが比較的大きなプログラムを作成するときに役立つと考える機能を使用して設計されています。これらのプログラミング言語は、システム言語として知られています。 Java。
現在、小規模および大規模なプログラムを任意の言語で作成できます。小さなJavaプログラムはスクリプトです。たとえば、Java「Hello World」プログラムはスクリプトであり、システムではありません。 PHPで書かれた大きなプログラムまたはプログラムのコレクションはシステムです。たとえば、PHPで書かれたFacebookは、スクリプトではなくシステムです。
言語がスクリプト作成またはシステムプログラミングに最適であるかどうかを判断するための「リトマステスト」として単一の言語機能を考慮することは疑問です。たとえば、スクリプトmayをバイトコードまたはマシンコードにコンパイルするか、スクリプトmay直接抽象構文木(AST)解釈によって実行されます。
したがって、言語は、スクリプトを記述するために通常使用される場合、スクリプト言語です。スクリプト言語を使用してシステムを作成することもできますが、そのようなアプリケーションは疑わしいと考えられます。
私が知っている、注目に値する情報源によってトピックについて書かれた最も一般的に知られているエッセイは、 Ousterhoutの二分法 と呼ばれています。それはかなりarbitrary意的であると非常に批判されており、しばしば冗談めかしてOusterhoutの誤った二分法と呼ばれています。それは引用に値するトピックに関する議論で言われています。
私はこれが誤った二分法であることに個人的に同意し、スクリプト言語を定義するものに関して確固たる性質を持つことを提案するこの質問に答える人を信用しません。 「スクリプト言語を動的に入力する必要があります」などのコメントは偽であり、「スクリプト言語を解釈する必要がある」などのコメントは意味がありません。
人々がスクリプト言語にほぼ一致するものとして上記で言及した多くのプロパティがありますが、ありがたいことにそれらのほとんどはこの用語には厳密な定義がないことを適切に説明します。ですから、私はそれらがここにあるというアイデアを複製しません。私の経験では、ボイラープレートをあまり書かずに簡単なスローアウェイプログラムを簡単に記述できる場合、人々は言語をスクリプト言語と見なします。 Ousterhoutへの引用を提供するために私は主に答えていますが、ここにはありません。
そうでない場合/しません CPU上で実行する、それは私にとってスクリプトです。インタープリターがプログラムの下のCPUで実行する必要がある場合、それはスクリプトおよびスクリプト言語です。
これより複雑にする理由はありませんか?
もちろん、ほとんどの場合(99%)、言語がスクリプト言語であるかどうかは明らかです。ただし、たとえば、VMはx86命令セットをエミュレートできると考えてください。これにより、VMで実行したときにx86バイトコードがスクリプト言語になりませんか?誰かがPerlコードをネイティブ実行可能ファイルに変換するコンパイラを書くとしたらどうでしょうか?この場合、言語自体を何と呼ぶかはもうわかりません。それは重要な出力であり、言語ではありません。
繰り返しになりますが、このようなことが行われたことに気づいていません。そのため、今のところ、インタープリター言語をスクリプト言語と呼んでも問題ありません。
スクリプト言語は、既存のシステムの機能を操作、カスタマイズ、および自動化するために使用されるプログラミング言語です。このようなシステムでは、便利な機能がユーザーインターフェイスを介して既に利用可能であり、スクリプト言語はその機能をプログラム制御に公開するためのメカニズムです。このように、既存のシステムは、スクリプト言語の機能を完成させるオブジェクトおよび機能のホスト環境を提供すると言われています。スクリプト言語は、プロと非プロの両方のプログラマーによる使用を目的としています。
参照
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
要するに、スクリプト言語には次のプロパティがあります。
例:Javascript、python、VBA。
スクリプト言語は、それ自体が定義していないエンティティを大幅に操作するものだと思います。たとえば、JavaScriptはブラウザが提供するDOMオブジェクトを操作し、PHPはCベースの関数の膨大なライブラリを操作します。もちろん、正確な定義ではなく、それを考えるより多くの方法です。
ただbreifに
スクリプト言語は別のプログラム内で実行されます。スクリプト言語はコンパイルされません。スクリプト言語は使いやすく、書きやすいです。でも…
非常に一般的なプログラミング言語(Java、C#)は、スクリプト言語のような「親」プログラム内で実行されます。今日のスクリプト言語は、複雑なソフトウェアの構築に使用されています。最近のコンピューターは非常に高速であり、スクリプト言語は非常に効率的であるため、ほとんどのビジネスオペレーションでは、コンパイルされたプログラミング言語を使用した場合(かつてあったほど)実用的な速度の利点はありません。
また、 スクリプト言語に関するこのポッドキャスト を確認することもできます。
あなたの基準は正しいように聞こえますが、常に少し曖昧です。たとえば、Javaはコンパイルされ(バイトコードに)、その後解釈されます(JVMによって)。それでも、通常はスクリプト言語として分類されません。
これは、Javaが静的に型付けされているためである可能性があります。一方、JavaScript、Ruby、Python、Perlなどはそうではありません(これらはすべてスクリプト言語と呼ばれます)。
他の誰かが指摘したように、どの言語もコンパイルまたは解釈できるため、コンパイルまたは解釈された言語のようなものはありません。しかし、コンパイルされるのではなく伝統的に解釈されてきた言語(Python、Perl、Ruby、PHP、JavaScript、Lua)も、人々がスクリプト言語と呼ぶ傾向がある言語です。そのため、スクリプト言語はコンパイルされるのではなく、一般的に解釈される言語であると言うのは比較的合理的です。スクリプト言語に共通するその他の特性は、それらが解釈されるという事実に関連しています。
スクリプト言語は実際にはプログラミング言語のサブセットです。ほとんどの人が、前述の言語のいずれもプログラミング言語ではないと主張するとは思わない。