言語がスクリプト言語とみなされるのはどのような場合ですか?[閉まっている]

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

質問

言語がスクリプト言語となるのはなぜですか?「コンパイルではなく解釈されるとき」という人もいると聞きました。そうすれば、(たとえば) PHP がスクリプト言語になります。それが唯一の基準ですか?それとも他の基準があるのでしょうか?

以下も参照してください。

役に立ちましたか?

解決

スクリプト言語は、何かを実行するために他のものを「スクリプト化」する言語です。主な焦点は、独自のアプリを構築することではなく、既存のアプリを希望どおりに動作させることにあります。ブラウザーの場合は JavaScript、MS Office の場合は VBA。

他のヒント

単純。私が使用するときは、それは最新の動的言語ですが、あなたが使用するときは、単なるスクリプト言語にすぎません。

従来、スクリプトとプログラミングの違いについて話すとき、スクリプトは解釈され、プログラムはコンパイルされます。言語は、解釈またはコンパイル (バイトコードまたはマシンコードへ) など、さまざまな方法で実行できます。これでは、 言語 どれかひとつ。

ある見方では、あなたのやり方は 使用 言語によってスクリプト言語になります (たとえば、主に C++ で開発するゲーム開発者は、 脚本 Lua のオブジェクト)。繰り返しますが、境界線は曖昧です。ある人はある言語をプログラミングに使用でき、別の人は同じ言語をスクリプト言語に使用できます。

これは、 ウィキペディア スクリプト言語に関する記事:

スクリプト言語、スクリプト言語、または拡張言語は、1 つまたは複数のソフトウェア アプリケーションの制御を可能にするプログラミング言語です。「スクリプト」は、通常は別の言語で書かれ、多くの場合エンドユーザーによって作成または少なくとも変更されるため、アプリケーションのコアコードとは異なります。スクリプトは多くの場合、ソース コードまたはバイトコードから解釈されますが、スクリプトが制御するアプリケーションは伝統的にネイティブ マシン コードにコンパイルされます。スクリプト言語は、ほとんどの場合、制御するアプリケーションに組み込まれています。

「通常」、「頻繁に」、「伝統的に」、「ほぼ常に」という言葉が使われていることに気づくでしょう。これらはすべて、 いいえ 特定の言語を「スクリプト言語」にする一連の個別の属性。

「脚本は俳優に与えるものです。プログラムはあなたが聴衆に与えるものです。」 - ラリー・ウォール

本当に、もう大きな違いはないと思います。いわゆる「スクリプト」言語は、実行時に非常に迅速にコンパイルされることがよくあります。また、一部の「プログラミング」言語は実行時にさらにコンパイルされ (JIT を考えてください)、「コンパイル」の最初の段階は構文チェックとリソース解決です。

あまり気にしないでください、それは実際には重要ではありません。

私の定義では、通常はバイナリとしてではなくソースとして配布される言語です。

これにはたくさんの答えが考えられます。

初め:それは実際には問題ではありません 違い スクリプト言語とプログラミング言語の間には、スクリプト言語があるため、 プログラミング言語。それはむしろ、あるプログラミング言語をスクリプト言語にし、別のプログラミング言語にするのはどのような特性なのかということです。 そうではありません スクリプト言語。

2番目:XYZ 言語が何であるかを言うのは本当に難しいです。その XYZ が「スクリプト」、「関数型プログラミング」、「オブジェクト指向プログラミング」などのいずれであってもです。「関数型プログラミング」とは何かという定義は非常に明確ですが、「関数型プログラミング言語」が何なのかは誰も知りません。

関数型プログラミングやオブジェクト指向プログラミングはプログラミングです スタイル;ほぼすべての言語で、関数型スタイルまたはオブジェクト指向スタイルで記述することができます。たとえば、Linux 仮想ファイル システム スイッチと Linux ドライバー モデルは、C で書かれているにもかかわらず、かなりオブジェクト指向になっていますが、Web 上で見かける Java または C# コードの多くは非常に手続き型であり、オブジェクト指向ではありません。 まったく. 。OTOH さん、非常に機能的な Java コードをいくつか見てきました。

つまり、関数型プログラミングとオブジェクト指向プログラミングが、単に実行できるスタイルにすぎないとしたら、 どれでも 言語の場合、「オブジェクト指向プログラミング言語」をどのように定義しますか?オブジェクト指向プログラミング言語は、オブジェクト指向プログラミングを可能にする言語であると言えます。しかし、それは大した定義ではありません。 全て 言語ではオブジェクト指向プログラミングが可能であるため、 全て 言語はオブジェクト指向ですか?つまり、言語はオブジェクト指向である、とあなたは言います。 オブジェクト指向スタイルでのプログラミングを学びましょう。しかし、それも大した定義ではありません。 全て 言語では関数型プログラミングが可能であるため、 いいえ 言語はオブジェクト指向ですか?

そこで、私としては次のような定義を見つけました。

言語がスクリプト言語 (オブジェクト指向言語/関数型言語) である場合、それはスクリプト言語 (オブジェクト指向言語/関数型言語) です。 両方

  • 促進する スクリプト (オブジェクト指向プログラミング/関数型プログラミング)、つまりそれだけではありません 許可します それはできますが 簡単 そして 自然 という機能が含まれています ヘルプ それと、 そして
  • 励ます そして ガイド スクリプト作成 (オブジェクト指向プログラミング/関数型プログラミング) を目指す方。

ということで、5 段落を経て次の結論に達しました。「スクリプト言語はスクリプトを書くための言語です。」なんと素晴らしい定義でしょう。ない。

明らかに、ここで「スクリプト」の定義を検討する必要があります。

ここで 3 番目の問題が発生します。一方、「関数型プログラミング」という用語は明確に定義されており、問題があるのは「関数型プログラミング言語」という用語だけですが、残念ながらスクリプトに関しては、 両方 「スクリプト」という用語と「スクリプト言語」という用語は明確に定義されていません。

さて、まずスクリプト作成 プログラミング。まさに特殊なプログラミングです。IOW:すべてのスクリプトはプログラムですが、すべてのプログラムがスクリプトであるわけではありません。すべてのスクリプトのセットは、すべてのプログラムのセットの適切なサブセットです。

私の個人的な意見では、スクリプトをスクリプト化し、他の種類のプログラミングと区別するのは、次の点です。

スクリプトは主に、次のようなオブジェクトを操作します。

  • スクリプトによって作成されたものではありません。
  • スクリプトに依存しない寿命を持ち、
  • スクリプトのドメインの外に住んでいます。

また、使用されるデータ型とアルゴリズムは通常、スクリプトによって定義されるのではなく、外部環境によって定義されます。

シェルスクリプトについて考えてみましょう。シェル スクリプトは通常、ファイル、ディレクトリ、プロセスを操作します。システム上のファイル、ディレクトリ、プロセスの大部分は、おそらく現在実行中のスクリプトによって作成されたものではありません。そして、スクリプトが終了してもそれらは消えません。彼らの生涯はスクリプトから完全に独立しています。そして、それらは実際にはスクリプトの一部ではなく、システムの一部です。スクリプトを書くことから始めたわけではありません File そして Directory クラスの場合、それらのデータ型は関係ありません。あなたはただ彼らがそこにいると思い込んでいるだけで、あなたは知りません(そしてあなたも知りません) 必要 知るために)それらがどのように機能するか。また、独自のアルゴリズムも実装しません。ディレクトリトラバーサルに使用するだけ find 独自の幅優先検索を実装する代わりに。

要するに:スクリプトは、スクリプトとは独立して存在するより大きなシステムに接続し、システムの小さな部分を操作してから終了します。

そのより大きなシステムとは、シェル スクリプトの場合はオペレーティング システム、ブラウザ スクリプトの場合はブラウザ DOM、ゲーム (例: ゲーム) です。Lua を使用した World of Warcraft または Linden スクリプト言語を使用した Second Life)、アプリケーション (例:AutoCAD の AutoLisp 言語、Excel/Word/Office マクロなど)、Web サーバー、ロボットのパック、またはまったく別のものです。

スクリプトの側面は、プログラミング言語の他のすべての側面と完全に直交していることに注意してください。スクリプト言語は、強く型付けすることも弱く型付けすることも、厳密に型付けすることも緩く型付けすることも、静的型付けすることも動的に型付けすることもでき、名目上、構造的に型付けするかダック型付けするか、さらには型付けしないこともできます。命令型または関数型、オブジェクト指向、手続き型または関数型、厳密または遅延型にすることができます。その実装は解釈、コンパイル、または混合が可能です。

たとえば、Mondrian は、コンパイルされた実装を備えた、厳密に強力に静的に型付けされた遅延関数型スクリプト言語です。

しかし、これはすべて議論の余地があります。 スクリプト言語本当に 現実世界で使用されているものは、上記とは何の関係もありません。これは単に侮辱として使用されることが多く、その定義は非常に単純で、単純化されています。

  • 本物 プログラミング言語:私のプログラミング言語
  • スクリプト言語:あなたのプログラミング言語

この用語が最もよく使われる方法のようです。

それはポルノのようなもので、見ればわかります。スクリプト言語の唯一の可能な定義は次のとおりです。

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 つです。それで 要素 はスクリプト言語です (少なくともそれが書かれた時点ではそうでした) が、Java はそうではありません。

「スクリプト言語」は、多くのことを意味するあいまいな概念の 1 つです。通常、これは、ソース コードから実行までを行う 1 ステップのプロセスが存在するという事実を指します。

たとえば、Perl では次のようにします。 perl my_source.pl

上記の基準を考慮すると、PHP はスクリプト言語です (たとえば、Zend Encoder を使用してソース コードを「保護」する場合に「コンパイル」プロセスを実行することはできますが)。

PS.多くの場合 (常にではありませんが) スクリプト言語が解釈されます。また、多くの場合 (ただし常にではありませんが)、スクリプト言語は動的に型付けされます。

すべてのスクリプト言語はプログラミング言語です。したがって、厳密に言えば違いはありません。

この用語は言語の基本的な特性を指すのではなく、典型的な特性を指します。 使用 言語の。一般的な使用法が、主に既存のコードの呼び出しとその結果に対する単純な処理を行う短いプログラムを作成することである場合 (つまり、一般的な使用法が次のようなものである場合) スクリプト) であれば、それはスクリプト言語です。

Roberto Ierusalimschy 氏が「Lua でのプログラミング」の質問に対して非常に良い答えを持っていると思います。

ただし、解釈された言語の際立った機能は、それらがコンパイルされていないということではなく、コンパイラが言語ランタイムの一部であり、したがって、その場で生成されたコードを実行することが可能である(そして簡単)ことです。

一つの部門は、

  • スクリプト = 動的に解釈される
  • 通常 = コンパイル済み

動的に解釈される言語は実行時に解釈されますが、コンパイルされた言語は実行前にコンパイルされます。

Jörg 氏が指摘したように、インタープリタ/コンパイルの区別は言語の機能ではなく、実行エンジンの機能であることを付け加えておきます。

この説明にも興味があるかもしれません 型システム, 、これは関連しており、実行エンジンではなく言語の側面に重点を置いています。ほとんどのスクリプト言語は動的に型付けされますが、「通常の」言語はほとんどが静的に型付けされます。

一般に、静的型付け言語と動的型付け言語の区別はより適切に定義されており、言語の使いやすさにより多くの影響を及ぼします。

スクリプト言語というのは、 通常:

  1. 動的に型指定される
  2. パフォーマンスにはあまり重点を置かずに解釈されていますが、移植性は良好です
  3. 必要なものが大幅に少なくなります 定型コード, 、非常に迅速なプロトタイピングにつながります
  4. 小さなタスクに使用され、便利な「スクリプト」を実行するための 1 つのファイルを作成するのに適しています。

非スクリプト言語は いつもの:1.静的に入力した2。パフォーマンス3に重点を置いたコンパイル。より多くのボイラープレートコードが必要であり、プロトタイピングが遅くなりますが、読みやすさと長期的な保守性4につながります4。大規模なプロジェクトに使用され、多くのデザインパターンに適応します

しかし 私の意見では、今日ではそれは歴史的な違いです。Javascript と Perl は小さくて単純なスクリプトを念頭に置いて作成されましたが、C++ は複雑なアプリケーションを念頭に置いて作成されました。しかし、どちらもどちらの方法でも使用できます。そして、多くのプログラミング言語は、現代でも古いものでも、とにかく境界線があいまいです (そしてそもそも境界線があいまいでした!)。

悲しいことに、私が知っている開発者の中には、「スクリプト言語」というものを嫌い、スクリプト言語はシンプルでそれほど強力ではないと考えている人もいます。私の意見は、仕事に適したツールを使用するという古い決まり文句です。

スクリプト言語はもともと、ハード プログラミング言語で記述されたアプリケーションの制御メカニズムとして考えられていました。コンパイルされたプログラムは実行時に変更できないため、スクリプトを使用することで柔軟性が得られました。

最も注目すべき点は、シェル スクリプトが OS カーネルのプロセスを自動化していたことです (従来は、Mac 上の AppleScript)。この役割はますます Perl の手に渡され、最近では Perl から Python に渡されました。Scheme (特に Guile 実装) がレイトレーシング シーンの宣言に使用されているのを見てきました。そして最近、Lua はゲームをスクリプト化するためのプログラミング言語として非常に人気があります。多くの新しいゲームでハードコーディングされているのはグラフィックス/物理エンジンだけであり、ゲーム ロジック全体が Lua でエンコードされているほどです。同様に、JavaScript は Web ブラウザの動作をスクリプト化すると考えられていました。

言語は解放されました。現在では、OS をアプリケーションとして考える人は誰もいません (あるいは、まったく考えていません)。そして、以前はスクリプト言語だった多くの言語が、独自の完全なアプリケーションを作成するために使用され始めました。名前自体は意味を持たなくなり、別のシステム内から解釈されるように設計されているかどうかに関係なく、現在使用されている多くの解釈言語に広まりました。

ただし、「スクリプト言語」が「インタープリタ型言語」と同義ではないことは間違いありません。たとえば、BASIC はその生涯のほとんどの間インタープリタ型でした。頭字語が失われ、Visual Basic になる前)、それがスクリプトであるとは誰も実際には考えていません。

アップデート: 読み物は通常通り利用可能 ウィキペディアで.

最初のポイントは、プログラミング言語は「スクリプト言語」などではありません。それは「スクリプト言語」でも他のものでも構いません。

2 番目の点は、言語の実装者がそれがスクリプト言語であるかどうかを教えてくれます。

あなたの質問は、「スクリプト言語とプログラミング言語の違いは何ですか?」ではなく、「どのような実装の場合、プログラミング言語はスクリプト言語とみなされるのですか?」とすべきです。間にはありません。

ただし、ある種のミドルウェアを提供するために使用される言語はスクリプト言語であると考えます。たとえば、私は JavaScript のほとんどの実装をスクリプト言語だと考えます。JavaScript がブラウザーではなく OS で実行される場合、それはスクリプト言語ではありません。PHP が Apache 内で実行される場合、それはスクリプト言語です。コマンドラインから実行した場合は、そうではありません。

私はスクリプト言語とは、あからさまに重量感のある「コンパイル」ステップを必要としないものだと考えています。プログラマーの観点から見た主な機能は次のとおりです。コードを編集してすぐに実行できます。

したがって、私は JavaScript と PHP をスクリプト言語とみなします。 アクションスクリプト 3/フレックス 本当ではありません。

友人と私はちょうど次のような議論をしました。プログラミング言語とスクリプト言語の違いは何ですか。

よくある議論は、プログラミング言語はコンパイルされ、スクリプト言語は解釈されるというものです。しかし、私はこの議論は完全に誤りであると信じています...なぜでしょうか?

  1. Chakra および V8 (Microsoft および Google の JavaScript エンジン) は、実行前にコードをコンパイルします。
  2. QBasic は解釈されます。これにより、Qbasic は「スクリプト」言語になりますか?

これに基づいて、プログラミング言語とスクリプト言語の違いについての私の主張は次のとおりです。

プログラミング言語はマシン レベルで実行され、マシン自体 (メモリ、グラフィックス、サウンドなど) にアクセスできます。

スクリプト言語はサンドボックス化されており、サンドボックスに公開されているオブジェクトにのみアクセスできます。基盤となるマシンに直接アクセスすることはできません。

私の意見では、PHP、Ruby などの動的に解釈される言語だと思います。まだ「通常の」言語です。「スクリプト」言語の例としては、bash (または ksh や tcsh など) や sqlplus などが挙げられます。これらの言語は、システム上の既存のプログラムを一連の一貫した関連コマンドにまとめるためによく使用されます。

  1. A.txt を /tmp/work/ にコピーします
  2. データベースサーバー上で毎晩クリーンアッププロセスを実行する
  3. 結果をログに記録し、sysdamin に送信します。

したがって、違いは(私にとって、とにかく)あなたがどのように行動するかにあると思います。 使用 言語。PHP、Perl、Ruby などの言語は「スクリプト言語」として使用することもできますが、通常は「通常の言語」として使用されているのを目にします (ただし、両方の方法で使用できるように見える Perl を除く)。

先に進み、重複した質問から回答を移行します


「スクリプト言語」という名前は、非常に特殊な役割に適用されます。既存のソフトウェア アプリケーションに送信するコマンドを作成する言語。(従来のテレビや映画の「台本」のような)

たとえば、昔々、HTML Web ページは退屈なものでした。それらは常に静的でした。それからある日、Netscapeは「ページの小さなコマンドでブラウザを読んで行動させたらどうでしょうか?」そしてそのように、JavaScriptが形成されました。

単純な JavaScript コマンドは次のとおりです。 alert() コマンド。Web ページを読んでいるブラウザー (ソフトウェア アプリ) にアラートを表示するように指示/命令します。

さて、そうですか alert() 何らかの形で、C++ またはブラウザが実際に使用するコード言語に関連するもの 用途 アラートを表示するには?もちろん違います。.html ページに「alert()」を記述する人は、ブラウザが実際にどのようにアラートを表示するかを理解していません。彼はブラウザが解釈するコマンドを書いているだけです。

簡単な JavaScript コードを見てみましょう

<script>
var x = 4
alert(x)
</script>

これらはブラウザーに送信され、ブラウザー自体が解釈できるようにするための命令です。ブラウザが実際に変数を 4 に設定し、それをアラートに設定するために経由するプログラミング言語...JavaScript とはまったく関係ありません。

最後の一連のコマンドを「スクリプト」と呼びます (このため、スクリプトは で囲まれています) <script> タグ)。伝統的な意味での「スクリプト」の定義によると、次のようになります。 アクターに送信される一連の指示とコマンド. 。たとえば、脚本(映画の脚本)が脚本であることは誰もが知っています。

脚本(脚本)は、 ない 俳優、カメラ、特殊効果。脚本は彼らに何をすべきかを指示するだけです。

さて、スクリプトとは何ですか 言語, 、 その通り?

ツールボックスの中のさまざまなツールのようなプログラミング言語がたくさんあります。いくつかの言語が設計されました 具体的には スクリプトとして使用されます。

Javasript はわかりやすい例です。スクリプトの領域に当てはまらない Javascript アプリケーションはほとんどありません。

ActionScript (Flash アニメーション用の言語) とその派生言語は、Flash プレーヤー/インタプリタにコマンドを発行するだけのスクリプト言語です。確かに、オブジェクト指向プログラミングなどの抽象化はありますが、それらはすべて目的を達成するための単なる手段にすぎません。Flash プレーヤーにコマンドを送信します。

Python と Ruby は、スクリプト言語としてもよく使用されます。たとえば、私はかつて、基本的な自動テストを行うために、「このサイトにアクセスして、このリンクをクリックして…」というようなコマンドをブラウザに送信するスクリプトを Ruby で作成する会社で働いていました。私はそうでした ない その仕事では、どう見ても「ソフトウェア開発者」です。コンピューターにコマンドを送信してブラウザーにコマンドを送信するスクリプトを作成しただけです。

その性質上、スクリプト言語が「コンパイル」されること、つまりマシンコードに翻訳され、コンピューターによって直接読み取られることはほとんどありません。

Python や Ruby で作成された GUI アプリケーションであっても、C++ または C で書かれた API に送信されるスクリプトです。これは C アプリに何をすべきかを指示します。

もちろん、曖昧な境界線はあります。マシン語/C はコンピュータが基本的なマザーボード/グラフィックス カード/チップとのインターフェースに使用するスクリプトであるため、なぜマシン語/C がスクリプト言語であると言えないのでしょうか?

明確にするために線を引くことができます。

  1. スクリプト言語を作成して「コンパイル」せずに実行できる場合、それは直接スクリプトのようなものです。たとえば、俳優に脚本をどうするかを指示するために、脚本について何もする必要はありません。それはすでにそこにあり、使用され、そのままです。このため、 コンパイル済み言語を除外する 場合によってはスクリプトの目的で使用できる場合でも、スクリプト言語と呼ばれることは避けられます。

  2. スクリプト言語は、コマンドが 複雑な ソフトウェアアプリケーション;それが、私たちがそもそもスクリプトを書く理由のすべてです。そのため、ソフトウェアにコマンドを送信するためにソフトウェアがどのように動作するかの複雑さを知る必要はありません。したがって、スクリプト言語は次のような言語になる傾向があります。 (比較的) 単純なコマンドを複雑なソフトウェア アプリケーションに送信する...この場合、マシン語とアセンブリ コードでは解決できません。

スクリプト言語は、多くの人が遠ざかりつつある用語だと思います。最近では、主にコンパイル言語と動的言語に集約されると思います。

つまり、Python や Ruby のようなものは、今の時代では「スクリプト」言語であるとは言えません (次のようなものもあります) アイアンパイソン そして JIT - あなたの好きな言語, 、違いはさらに曖昧になってきました)。

正直に言うと、個人的には PHP はもうスクリプト言語ではないと感じています。人々が履歴書で PHP を Java などとは異なる分類にしたがるとは思いません。

スクリプト言語は、より大きなアプリケーションの一部であるスクリプト エンジン内で実行される傾向があります。たとえば、JavaScript はブラウザのスクリプト エンジン内で実行されます。

スクリプト言語は、スクリプトが実行されるたびに解釈される言語であり、インタープリタが存在することを意味し、そのほとんどは非常に人間が読める言語であり、学習と使用が簡単であるという利点があります。

コンパイル可能なすべての言語をスクリプト言語にすることも、その逆も同様であり、すべてはインタプリタまたはコンパイラの実装に依存します。たとえば、C++ にはインタプリタがあり、そのように使用される場合はスクリプト言語と呼ぶことができます (C++ として一般的にはあまり実用的ではありません)は非常に複雑な言語です)、現在最も便利なスクリプト言語の 1 つは Python です...

したがって、あなたの質問に答えるために、定義は、迅速かつ簡単なスクリプトプログラムを実行するため、単純なタスクやプロトタイプアプリケーションに対処するためのインタープリタの使用に関するものです。スクリプト言語の最も強力な使用法は、スクリプト言語を拡張するあらゆる用途に可能性を含めることです。コンパイルされたアプリケーション。

私は、「スクリプト言語」という用語を使用すると労力が軽減されると思うので、使用しないことを好みます。Perl のような言語 (よく「スクリプト言語」と呼ばれます) を考えてみましょう。

  • Perlはプログラミング言語です!
  • Perl は Java や C++ と同じようにコンパイルされます。コンパイルが大幅に高速化されました。
  • Perl にはオブジェクト、名前空間、クロージャがあります。
  • Perl には IDE、デバッガー、プロファイラーがあります。
  • Perl にはトレーニング、サポート、コミュニティがあります。
  • Perl は Web だけではありません。Perl は単なるシステム管理者ではありません。Perl は単なるインターネットのダクトテープではありません。

Java のようなコンパイルされた言語と、コンパイルされていない Ruby を区別する必要があるのはなぜでしょうか?ラベルを貼ることにどんな価値があるのでしょうか?

詳細については、を参照してください。 http://xoa.petdance.com/Stop_saying_script.

重要な違いは、 強い型付け (対 弱い型付け). スクリプト言語は型指定が弱いことが多い, により、小さなプログラムをより迅速に作成できるようになります。大規模なプログラムの場合、これはコンパイラ/インタプリタが自律的に特定のバグを検出できなくなり、コードのリファクタリングが非常に困難になるため、欠点となります。

スクリプト言語は、通常、プログラムが読み取り可能なテキスト形式でエンド ユーザーに配信され、それを実行できるプログラムが存在するプログラミング言語です。 どうやら そのプログラムを直接実行します。(プログラムはスクリプトを内部的にコンパイルする可能性があります。ユーザーには表示されないため、ここでは関係ありません。)

スクリプト言語では、ユーザーがプログラムを入力するだけですぐに実行できる対話型セッションをサポートできるのが比較的一般的です。これは、最初の段落の必須要件を簡単に拡張したものであるためです。主な追加要件は、入力されたステートメントが実行エンジンに送信できるように、入力されたステートメントがいつ完了したかを判断するメカニズムを追加することです。

質問については少し異なる見方をします。スクリプト言語はプログラミング言語ですが、プログラミング言語は必ずしもスクリプト言語であるとは限りません。スクリプト言語は、システムの制御またはスクリプト化に使用されます。そのシステムは、スクリプト言語が bash であるオペレーティング システムである可能性があります。システムは、スクリプト言語として PHP を使用する Web サーバーである可能性があります。スクリプト言語は、特定のニッチ市場を満たすように設計されています。これらはドメイン固有の言語です。対話型システムはスクリプト言語を解釈して、スクリプト言語が解釈されるという概念を生み出しました。ただし、これはシステムの結果であり、スクリプト言語自体の結果ではありません。

スクリプト言語は、既存のプログラムを構成または拡張する言語です。
スクリプト言語はプログラミング言語です。

「スクリプト言語」の定義はかなり曖昧です。私は次の考慮事項に基づいて考えます。

  1. 通常、スクリプト言語にはユーザーに表示されるコンパイル手順がありません。通常、ユーザーは 1 つの簡単なコマンドでプログラムを実行できます。

  2. スクリプト言語のプログラムは通常、ソース形式で渡されます。

  3. 通常、スクリプト言語には多数のシステムに存在するランタイムがあり、ランタイムはほとんどのシステムに簡単にインストールできます。

  4. スクリプト言語は、マシン固有ではなく、クロスプラットフォームである傾向があります。

  5. スクリプト言語を使用すると、他のプログラムを呼び出したり、オペレーティング システムと接続したりすることが簡単になります。

  6. スクリプト言語は通常、従来のプログラミング言語で書かれた大規模システムに簡単に組み込むことができます。

  7. スクリプト言語は通常、プログラミングを容易にすることを目的として設計されており、実行速度はあまり考慮されていません。(高速に実行したい場合の通常のアドバイスは、時間のかかる部分を C などでコード化し、言語を C に埋め込むか、言語から C ビットを呼び出すことです。)

上に挙げた特性の一部は実装にも当てはまります。この場合、より一般的な実装について言及しています。(私の知る限り) 明らかなコンパイル手順を持たない C インタープリターはこれまでにも存在しましたが、ほとんどの C 実装には当てはまりません。確かに Perl プログラムをネイティブ コードにコンパイルすることはできますが、それは通常の使用方法ではありません。他のいくつかの特性は本質的に社交的です。上記の基準の一部は多少重複します。先ほども言いましたが、定義は曖昧です。

スクリプト言語は、それ自体が定義していないエンティティを頻繁に操作する言語だと思います。たとえば、JavaScript はブラウザーが提供する DOM オブジェクトを操作し、PHP は C ベースの関数の膨大なライブラリを操作します。もちろん、正確な定義ではなく、それがそうであるかどうかの考え方です。

そうでない場合は/そうはしないだろう CPU 上で実行される、私にとってはスクリプトです。インタプリタがプログラムの下の CPU 上で実行される必要がある場合、それはスクリプトおよびスクリプト言語になります。

これ以上複雑にする理由はありませんか?

もちろん、ほとんど (99%) の場合、言語がスクリプト言語であるかどうかは明らかです。ただし、たとえば、VM が x86 命令セットをエミュレートできることを考えてみましょう。これにより、VM 上で実行すると x86 バイトコードがスクリプト言語になるのではありませんか?Perl コードをネイティブの実行可能ファイルに変換するコンパイラを誰かが書いたらどうなるでしょうか?この場合、言語自体を何と呼んでいいのかもうわかりません。重要なのは言語ではなく、出力です。

繰り返しになりますが、私はこのようなことが行われたことを知らないので、今のところはインタープリタ型言語をスクリプト言語と呼ぶことに抵抗はありません。

脚本 比較的です 小さい プログラム。あ システム 比較的です 大きい プログラム、または コレクション 比較的大きなプログラムの場合。

一部のプログラミング言語は、言語設計者やプログラミング コミュニティが比較的小さなプログラムを作成する場合に便利だと考える機能を備えて設計されています。これらのプログラミング言語は次のように知られています。 スクリプト言語, 、例えばPHP。

同様に、他のプログラミング言語は、言語設計者とプログラミング コミュニティが比較的大規模なプログラムを作成する際に役立つと考える機能を備えて設計されています。これらのプログラミング言語は次のように知られています。 システム言語, 、例えばジャワ。

現在では、小規模なプログラムから大規模なプログラムまで、あらゆる言語で作成できます。小さな Java プログラムはスクリプトです。たとえば、Java の「Hello World」プログラムはスクリプトであり、システムではありません。PHP で書かれた大規模なプログラム、またはプログラムの集合がシステムです。たとえば、PHP で書かれた Facebook はスクリプトではなくシステムです。

単一の言語機能を、その言語がスクリプト作成またはシステム プログラミングに最適であるかどうかを判断するための「リトマス試験紙」と考えることには疑問があります。たとえば、スクリプト 5月 バイトコードまたはマシンコードにコンパイルされるか、またはそれら 5月 直接抽象構文ツリー (AST) 解釈によって実行されます。

それで、 通常、スクリプトを記述するために使用される言語は、スクリプト言語です。. 。スクリプト言語を使用してシステムを作成することもできますが、そのようなアプリケーションは疑わしいと考えられる可能性があります。

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