言語はいつスクリプト言語と見なされますか?[閉まっている]


107

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

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


あなたは少し疑問に思うかもしれません。それ以外の場合、これはほとんどだまされていると思います。他の人は区別を見ないかもしれません
ケントフレドリック

他のどの質問にだまされますか?
Sietse

2
stackoverflow.com/questions/98268/…多くの類似点があります。本質的に同一ではないが、多くの共有されたコンテキスト/意見。
ケントフレドリック

7
...言語がAPIを破壊し、マイナーリリースごとに構文を変更する場合、ダーティでメンテナンスされていないバグの多いCライブラリのラッパーである場合、それはスクリプト言語です。;)
ivan_ivanovich_ivanoff 2009

1
「関連」のサイドバーでは、あなたは見つけることができますstackoverflow.com/questions/1514206/...私はに戻って行く、既存の重複の山リンク先のstackoverflow.com/questions/101055/...~~Vを
dmckee ---元モデレーターの子猫2010

回答:


52

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


では、Pythonなどの言語についてはどうでしょうか。どこに重点が置かれているかを判断するのは簡単ではありませんが、独自のアプリケーションにより重点を置いていると言えるかもしれませんが、それでもよく「スクリプト言語」と呼ばれます。おそらく、参照CPythonのバイトコードへの隠されたコンパイルが実装されているためです。「タイプセーフ」に関するコンパイルエラーは発生しませんか?多分Odedの答えはこれらを持っています...
n611x007

バイトコードと型システムは、実際にはそれとは何の関係もありません。上記の定義によれば、アプリがAPIをPythonに公開する場合、そのスクリプト言語としてPythonを使用すると言われています。アプリを完全にPythonで構築する場合、そのアプリはそれをプログラミング言語として使用します。
バグ

「スクリプト」は、言語の種類の定義ではありません。言語が持つことができるのが特徴です。したがって、Pythonは「優れたスクリプト言語」です。スクリプトを作成するコードを簡単に記述できるためです。アセンブリはスクリプトの作成を難しくするため、良いスクリプト言語ではありません。Cは途中のどこかにあります。Cは呼び出すためのキーワード(システム)を持っていますが、そこにたどり着く前に、多くの不器用でユーザーをサドルしているからです。
名目

93

シンプル。私が使用する場合、それは現代の動的言語であり、使用する場合、それは単なるスクリプト言語です!


19
うん。「それは 『おもちゃの言語』ではなく、 『高級言語』だ」:P
Roberto Bonvallet

6
それはでこぼこで、話題から外れていました、-1
adf88

1
-(1 + 1)を使用しても、チェックマークが付いたものより約2倍の+1が得られます。:D
anatoly techtonik 2013年

ベスト。回答。エバール!
iconoclast 2013

41

伝統的に、スクリプトとプログラミングの違いについて話すとき、スクリプトは解釈され、プログラムがコンパイルされます。言語はさまざまな方法で実行できます-解釈またはコンパイル(バイトコードまたはマシンコードへ)。これで言語が変わるわけではありません。

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

これは、スクリプト言語に関するウィキペディアの記事からの抜粋です。

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

「通常」、「しばしば」、「伝統的に」、「ほぼ常に」の使用に気づくでしょう–これらはすべて、特定の言語を「スクリプト言語」にする一連の明確な属性がないことを示しています。


1
@ Amr:それはjava スクリプト
sepp2k

1
@Ram Bhat-区別は人為的なため、混乱を招きます。
2010年

11
@Andrey:最新のJavaScript実装はすべてコンパイルされています。Cには通訳がいます。
JörgW Mittag 2010年

27
これはまったく間違っています。まあ、それは実際には間違っていません、それだけでは意味がありません。コンパイルまたは解釈された言語などはありません。言語はコンパイルされていません。言語はただです。これは、抽象的な数学的ルールの集まりです。解釈とコンパイルは、言語ではなく実行エンジンの特性です。すべての言語は、コンパイラーまたはインタープリターのいずれかで実装できます。実際、このページで「解釈済み」として引用されているすべての言語には、JavaScript、PHP、Python、Rubyなど、ほとんど独占的にコンパイルされた実装があります。
イェルクWミッターク

5
@Andrey:Chakra(IE9)、TraceMonkey /JägerMonkey(Firefox)、Nitro(Safari)、Carakan(Opera)すべてJavaScriptをバイトコードにコンパイルし、一部のバイトコードは解釈され、一部はネイティブコードにコンパイルされます。V8(Chrome)はバイトコードをスキップし、JavaScriptを直接ネイティブコードにコンパイルします。IronJSはJavaScriptをCILバイトコードにコンパイルします。RhinoはJavaScriptをJVMLバイトコードにコンパイルします。BESEN(これまでのところ唯一のECMAScript 5エンジン)はJavaScriptをBESENバイトコードにコンパイルし、現在ネイティブコンパイラが追加されています。上記の一部は、正規表現をネイティブマシンコードにコンパイルします。
イェルクWミッターク

31

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

違いはほとんどないと思います。いわゆる「スクリプト」言語はしばしばコンパイルされます-非常に迅速に、実行時に。また、「プログラミング」言語の一部は実行時にもコンパイルされ(JITと考えてください)、「コンパイル」の最初の段階は構文チェックとリソース解決です。

それに夢中にならないでください、それは本当に重要ではありません。


うーん..私は電話を切ったわけではありませんが、ほとんどの面接担当者と教師は電話を切っています。そして、私はこれらの人々の誰も私に満足のいく答えを与えたことがありませんでした!
Laz、

1
そして、ここで他の答えの1つを挙げた場合、インタビュアーとして、あなたは本当に質問を処理できなかったと思います。区別は本当にぼやけており、明確な答えはありません。あなたが「まあ、伝統的に...」と言っていたら私はそれをとりますが、ランタイムコンパイルやJITのようなことについても議論することを期待します。
クリントンピアス2010年

25

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


5
php、pythonなどがスクリプト言語だと思いますか?
Sietse

「スクリプト」はPythonとPHPの一般的な説明です。
S.Lott、2008

22
phpとpython-もちろんそれらはスクリプト言語です!
アントニーカーシー

これは私の定義が最初からあったものです

@Antony Carthyこれは間違いです。Pythonは通常スクリプト言語ではありませんが、他の言語と同様に、プログラム(Word(VB)、ブラウザ(JS)など)内で使用できます
Joschua

16

これに対する可能な答えはたくさんあります。

まず、スクリプト言語はプログラミング言語であるため、スクリプト言語プログラミング言語の違いについての問題ではありません。別のプログラミング言語スクリプト言語ではないのに、一部のプログラミング言語をスクリプト言語にする特性の問題です。

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

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

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

だから、私にとって、私は次の定義を見つけました:

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

  • 容易にスクリプトを(オブジェクト指向プログラミング/関数型プログラミング)、つまりはそれだけではなく、可能にしていますが、作る簡単かつ自然と含まれています助けをそれで、
  • スクリプティング(オブジェクト指向プログラミング/関数型プログラミング)を推奨ます

したがって、5つの段落を経て、「スクリプト言語はスクリプト言語」であることに到達しました。なんて素晴らしい定義でしょう。ない。

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

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

さて、まずスクリプトプログラミングです。これは特別なプログラミングです。IOW:すべてのスクリプトはプログラムですが、すべてのプログラムがスクリプトであるとは限りません。すべてのスクリプトのセットは、すべてのプログラムのセットの適切なサブセットです。

私の個人的な意見では、スクリプティングスクリプトを作成し、それを他の種類のプログラミングと区別するのは、…

スクリプトは主に以下のオブジェクトを操作します

  • スクリプトによって作成されたのではありません。
  • スクリプトに依存しない有効期間があり、
  • スクリプトのドメインの外に住んでいます。

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

シェルスクリプトについて考えてください。通常、シェルスクリプトはファイル、ディレクトリ、プロセスを操作します。システム上のファイル、ディレクトリ、プロセスの大部分は、現在実行中のスクリプトによって作成されたものではない可能性があります。また、スクリプトが終了しても消えることはありません。その存続期間はスクリプトから完全に独立しています。また、実際にはスクリプトの一部ではなく、システムの一部でもあります。あなたが書き込むことによって、あなたのスクリプトを起動していないFileDirectoryクラス、これらのデータ型は、あなたの懸念のどれもありません:あなたは、ちょうど彼らがあると仮定し、あなたも知らない(またあなたが行う必要がある、彼らがどのように機能するかを知っています)。また、独自のアルゴリズムも実装しません。たとえば、ディレクトリトラバーサルの場合findは、独自の幅優先検索を実装するのではなく、単に使用します。

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

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

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

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

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

  • 実際のプログラミング言語:私のプログラミング言語
  • スクリプト言語:プログラミング言語

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


この答えのいくつかはばかげています。オブジェクトを使ったプログラミングを指向する言語は、「オブジェクト指向」です。ファーストクラスの機能を備えている言語は、「機能的」です。これは、言語が両方になることはできないという意味ではありません。これらは言語の特性であり、型の定義ではありません。スクリプティングも同様です。言語は、スクリプトを簡単に作成できる場合、「優れたスクリプト言語」です。つまり、ユーザーアプリケーションの相互作用の短い単純なビットです。
名目

16

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

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
これは非常に良い説明ですが、一部の人々は「ポルノ」を見ているので
賛成していると思います

論文へのリンクが切れています。
Quazi Irfan、2015

5

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

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

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

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


Perlは、実行前にバイトコードにコンパイルされます。
ブラッド・ギルバート

2
Javaはどうですか?Javaプログラムを実行するにはjvmが必要ですが、私はそれをスクリプト言語とは呼びません
Eineki

5

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

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


4

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

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


これは質問にまったく答えません!
ポールビガー

言い直してみましょう。スクリプト言語は、コンパイラーが含まれていて、オンザフライで生成されたコードを実行できる言語です。それがどうして質問に答えないのですか?
ロドリゴロペス

それはインタプリタ言語です。インタプリタ言語がスクリプト言語であると言いたい場合は、そのように言ってください。
ポールビガー

まあ、すべての言語をスクリプトに使用できますが、私にとって重要なのは、それらの言語がどれほど適しているかです。私にとっての顕著な特徴は、はい、それらは解釈されます。
ロドリゴロペス

4
Common Lispは、私が通常スクリプト言語と考えるものではありませんが、十分なeval機能を備えています。
David Thornley、2010年

4

1つの区分は

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

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

ヨルクが指摘したように、解釈/コンパイルされた区別は言語の機能ではなく、実行エンジンの機能であることを付け加えておきます。

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

一般に、静的に型付けされた言語と動的に型付けされた言語の区分はより適切に定義されており、言語のユーザビリティーに大きな影響を与えます。


Objective-Cはどうですか?
mouviciel 2010年

1
動的なタイピングをサポートしていますが、スクリプト言語とは呼びません。
TimoWestkämper、2010年

2
これはまったく間違っています。まあ、それは実際には間違っていません、それだけでは意味がありません。コンパイルまたは解釈された言語などはありません。言語はコンパイルされていません。言語はただです。これは、抽象的な数学的ルールの集まりです。解釈とコンパイルは実行エンジンの特性です、言語ではなくです。すべての言語は、コンパイラーまたはインタープリターのいずれかで実装できます。実際、このページで「解釈済み」として引用されているすべての言語には、JavaScript、PHP、Python、Rubyなど、ほとんど排他的にコンパイルされた実装があります。
イェルクWミッターク

@ jorg-w-mittag、回答をより正確にするために自由に編集してください。あなたのポイントは有効です。ただし、通常、言語について話す場合は、デフォルトの実行エンジンについても説明します。
TimoWestkämper、2010年

3

通常、スクリプト言語は次のとおりです。

  1. 動的に型付け
  2. 解釈され、パフォーマンスはほとんど重視されませんが、移植性は良好です
  3. 必要なボイラープレートコードがはるかに少ないため、プロトタイピングが非常に高速になります。
  4. 小さなタスクに使用され、いくつかの便利な「スクリプト」を実行する単一のファイルを書き込むのに適しています。

通常、非スクリプト言語は次のとおりです。1.静的に型付けされます。2。パフォーマンスを重視してコンパイルされます。デザインパターン

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

悲しいことに、「スクリプト言語」として知覚するものを嫌い、単純で強力ではないと考えている開発者を何人か知っています。私の意見は、古い決まり文句-仕事に適したツールを使用することです。


2
コンパイルまたは解釈された言語などはありません。言語はコンパイルされていません。言語はただです。これは、抽象的な数学的ルールの集まりです。解釈とコンパイルは、言語ではなく実行エンジンの特性です。すべての言語は、コンパイラーまたはインタープリターのいずれかで実装できます。実際、このページで「解釈済み」として引用されているすべての言語には、JavaScript、PHP、Python、Rubyなど、ほとんど独占的にコンパイルされた実装があります。
イェルクWミッターク

@ヨルグ:良い点、私は同意する。しかし、私はそれがコンパイルできないとは言いませんでした、これらの種類の言語は一般的な使用法ではコンパイルされるのではなく、通常解釈されると言っただけです。
オーク

彼らは?Python、PHP、Perl、Luaの現在の実装はすべてコンパイルされています。MRIを除いて、Rubyの現在の実装はすべてコンパイルされています。(そして、そこです、実際にはない1が、2つの MRIのためのJITコンパイラを。)のJScriptの例外を除いて、すべての現在のJavaScript実装がコンパイルされます。JScriptの後継であるChakraがコンパイルされていることに注意してください。Schemeの多くの実装がコンパイルされています。ELispがコンパイルされます。
イェルクWミッターク

3

スクリプト言語は、当初、ハードプログラミング言語で記述されたアプリケーションの制御メカニズムと考えられていました。コンパイルされたプログラムは実行時に変更できなかったため、スクリプティングは人々に柔軟性を与えました。

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

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

ただし、「スクリプト言語」は「解釈された言語」と同義ではありません。たとえば、BASICはそのほとんどの期間(つまり、その略語性を失い、Visual Basicになる前)に解釈されましたが、誰もそれをスクリプト。

更新:ウィキペディアで入手可能な通常どおりの資料を読みます。


実際、元のBASIC実装はコンパイラでした。BASICクローンがインタープリターとして書かれたのは、コンパイラーよりもインタープリターの方がおそらく記述が簡単なためです。
イェルクWミッターク

1
@ヨルク:そうではありません。Dartmouth BASICの最初のテスト実装はコンパイルされましたが(Card BASICと呼ばれます)、実際の実装はインタープリターでした。実際、おそらくBASICの最も重要な新機能は、インタラクティブであったことです。ソースコードをカードにパンチしてコンパイラに送る必要はありません。ユーザーはテレタイプに座ってプログラムを作成し、実行するだけです。
PauliL

この回答が「難しい」言語の考え方を取り入れているのは興味深いことです。「ハード」には、このコンテキストでの定義が必要ですか?
DAビンセント

@DavidVincent:おそらく「もっと難しい」という意味だったはずです。形式的な定義は必要ありません。直感的な理解で十分です。RubyやPythonよりもアセンブリまたはCでプログラムを書くのは、前者が後者よりもはるかに低レベルで冗長であることを考えると、はるかに困難です。
アマダン

3

第一に、プログラミング言語は「スクリプト言語」などではありません。それは「スクリプト言語」と他の何かでありえます。

2番目のポイントは、言語の実装者がスクリプト言語かどうかを通知することです。

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

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


3

私はスクリプト言語を、明白でヘビーな感覚の「コンパイル」ステップを必要としないものと見なしています。プログラマーの観点からの主な機能は、コードを編集してすぐに実行することです。

したがって、私はJavaScriptとPHPをスクリプト言語と見なしますが、ActionScript 3 / Flexはそうではありません。


ピーターの答えを否定したくありませんが、意見以上のものを追加できますか?
DA Vincent

3

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

人気のある議論は、プログラミング言語がコンパイルされ、スクリプト言語が解釈されることです-しかし、私はこの議論が完全に偽であると信じています...なぜですか?

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

その上で、これはプログラミング言語とスクリプト言語の違いに対する私の議論です。

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

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


2

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

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

だから私は(とにかく)私が言語をどのように使うかにより違いがあると思います。PHP、Perl、Rubyなどの言語は「スクリプト言語」として使用できますが、私は通常、「通常の言語」として使用されていることを確認します(Perlは双方向で動作するようです)。


ありがとうございます。これにより、状況が少し明確になります。つまり、スクリプト言語は、既存のプログラムを順番に一緒に使用するように設計されています。しかし、Cのような言語は、APIを介して同じことを行うために使用できます。したがって、技術的に言えば、すべては使用に依存します
Laz

いいえ、あなたは人為的な区別をしているだけです(これが何であるかです)。すばやく何かを作成できる場合、言語はスクリプト言語と呼ばれることがよくありますが、厳密な定義などではありません。一般的に解釈される言語は、スクリプト言語とも呼ばれます。
wlangstroth

@Will:区別は人工的なものです。これは私の見解の違いでした。;)
FrustratedWithFormsDesigner 2010年

ええ、でも、この場合の「スクリプト」は非常に口語的で漠然とした使い方です。「既存のプログラムを順番に一緒に使用する」ことを決定することは非常に具体的であり、正しくありません。おそらくシェルスクリプトのように聞こえますが、Perlではありません。それをAPIと対比して(?)...私は彼があまりに軌道から外れることを望んでいませんでした。
wlangstroth

2

先に進んで、重複した質問から私の回答を移行します


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

たとえば、むかしむかし、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 Playerにコマンドを送信するだけです。

PythonとRubyは、スクリプト言語としても一般的に使用されています。たとえば、Rubyを使用してコマンドをスクリプト化し、「このサイトにアクセスし、このリンクをクリックして...」というブラウザに送信して、基本的な自動テストを行う会社で働いていたことがあります。その仕事では、私は決して「ソフトウェア開発者」ではありませんでした。コンピューターにコマンドを送信してブラウザーにコマンドを送信するスクリプトを書いたところです。

スクリプト言語はその性質上、めったに「コンパイル」されません。つまり、マシンコードに変換され、コンピューターによって直接読み取られます。

PythonおよびRubyから作成されたGUIアプリケーションでさえ、C ++またはCで記述されたAPIに送信されるスクリプトです。これは、Cアプリに何をすべきかを指示します。

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

明確にするために描くことができるいくつかの線があります:

  1. スクリプト言語を記述して「コンパイル」せずに実行できる場合、それは直接スクリプトのようなものです。たとえば、脚本で何をするかを俳優に伝えるために、脚本で何もする必要はありません。すでに使用されており、現状のままです。このため、コンパイルされた言語は、スクリプトの目的で使用できる場合もありますが、スクリプト言語と呼ばれることはありません。

  2. スクリプト言語は、複雑なソフトウェアアプリケーションに送信されるコマンドを意味します。それが、そもそもスクリプトを作成する全体の理由です。したがって、ソフトウェアがコマンドを送信するためにソフトウェアがどのように機能するかの複雑さを知る必要はありません。したがって、スクリプト言語は、複雑なソフトウェアアプリケーションに(比較的)単純なコマンドを送信する言語である傾向があります。この場合、機械語とアセンブリコードはそれをカットしません。


2

多くの人がスクリプト言語から遠ざかっているということをお勧めします。最近のコンパイルされた言語と動的言語に主に要約すると私は言うでしょう。

つまり、Pythonのようなことを実際に言うことはできません、またはRubyはこの時代の「スクリプト」言語です(IronPythonJIT-your-favorite-languageのようなものさえあり、違いはさらにぼやけています)。

正直なところ、個人的にはPHPがスクリプト言語ではなくなったと感じています。私は人々が彼らの履歴書で言うJavaとは異なる方法でPHPを分類することを好むとは思わないでしょう。


私が多くのphpで作業している場合でも、スクリプトベースからサーバーから委任されたタスクをディスパッチする/ real / fcgiサーブレットモデルに移行するまで、私はそれを「かなり良いスクリプト言語と呼びます。アプリケーションのような錯覚を与えることができます」
ケントフレドリック'19

静的/動的、コンパイルされる動的言語があります。
ブラッド・ギルバート

繰り返しますが、Pythonのようなことを実際に言うことはできません、またはRubyはこの時代では「スクリプト」言語です(IronPythonやJitYourFavoriteLanguageのようなものさえあり、違いはさらにぼやけています)。
ロバート・グールド

1

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


受け入れられた回答には2つの反対票があることは陽気です。
Robert S.

1
そのための何らかのバッジが必要です。「真実を扱えない」というのはどうですか?いや、ちょっと言い過ぎ。;-)
ジョセフフェリス

3
Perl、Python、Ruby、Tcl / Tk-例を挙げると4つのスクリプト言語-は、主に大きなアプリケーションに組み込まれていません。
ジョナサンレフラー

3
エルゴ-スクリプト言語ではありません。
Milen A. Radev

3
ええと、これがどういうわけか正しいとマークされていない場合はいいでしょう。
正午シルク

1

スクリプト言語は、スクリプトが実行されるたびに解釈される言語であり、インタープリターがいることを意味し、ほとんどが人間が読める形式であるため、スクリプト言語は簡単に習得して使用できます。

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

したがって、あなたの質問に答えるには、インタープリターを使用して迅速で簡単なスクリプトプログラムを実行し、単純なタスクやプロトタイプアプリケーションに対処することを定義します。コンパイルされたアプリケーション。


1

「スクリプト言語」という言葉を使わない方が、努力が減ると思います。「スクリプト言語」と呼ばれることが多いPerlなどの言語を取り上げます。

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

コンパイルされたJavaのような言語とそうでないRubyを区別する必要があるのはなぜですか?ラベル付けの価値は何ですか?

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


どのコンピューターもperlやruby(またはそれらをコンパイルできる任意の形式)をネイティブで実行できません。したがって、perlとrubyはスクリプト言語であり、パーサーまたはVMによって解釈されます。
anon6439 2008年

@psoul:はい。Javaもそうです。
Stefano Borini、

Rubyをマシンコードにコンパイルする方法はいくつかありますが、それらのいずれかがインタープリターをルビコードを表す文字列にバンドルするだけではないかどうかはわかりませんが、それが真実であっても、Rubyからマシンコードへのトランスレーターを作成できます。とりわけ、動的なディスパッチとgcがあるため、コードをマシンコードに変換しても、c速度に近づくことはありません。Rubyプロセッサはないと思いますが、lispモデルとJavaバイトコードを実行するプロセッサにより適合するように設計されたマシンです。
ローマンA.テイチャー

1

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


1

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

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


1

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


1

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


1

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

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

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

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

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

  5. スクリプト言語を使用すると、他のプログラムを簡単に呼び出したり、オペレーティングシステムとインターフェイスしたりできます。

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

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

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


0

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


うーん、PHPは基礎となるCライブラリを使用しますが、Javaを含むほとんどの言語(最低レベル)に当てはまります。そして、それはこれらの機能を操作しません...
PhiLho

0

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

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

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

繰り返しになりますが、このようなことが行われたことに気づいていないので、今のところ、インタープリタ型言語のスクリプト言語を呼び出すことに慣れています。


1
スクリプト言語用のネイティブバイナリにコンパイルする言語を除いて、ほとんどすべての言語を呼び出していますか?Java開発者がスクリプターと呼ばれることを嬉しく
思う

1
彼らです。スクリプト作成者、つまり。
anon6439 2008

0

スクリプトは比較的ある小さなプログラム。システムが比較的ある大きなプログラム、またはコレクションの比較的大きなプログラムの。

一部のプログラミング言語は、言語デザイナーやプログラミングコミュニティが比較的小さなプログラムを書くときに役立つと考える機能を使用して設計されています。これらのプログラミング言語は、PHPなどのスクリプト言語として知られています

同様に、他のプログラミング言語は、言語デザイナーやプログラミングコミュニティが比較的大きなプログラムを書くときに役立つと考える機能を備えて設計されています。これらのプログラミング言語はシステム言語として知られています、Javaなどの。

現在、大小のプログラムを任意の言語で作成できます。小さなJavaプログラムはスクリプトです。たとえば、Javaの「Hello World」プログラムはシステムではなくスクリプトです。PHPで書かれた大きなプログラム、またはプログラムのコレクションはシステムです。たとえば、PHPで記述されたFacebookはシステムであり、スクリプトではありません。

言語がスクリプトまたはシステムプログラミングに最も適しているかどうかを判断するための「リトマステスト」として単一言語機能を検討することには疑問があります。たとえば、スクリプトバイトコードまたはマシンコードにコンパイルされる場合や、直接抽象構文ツリー(AST)解釈によって実行される場合あります。

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

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