web-dev-qa-db-ja.com

スクリプト言語を理解する

Wikipedia から引用:

スクリプト言語、スクリプト言語、または拡張言語は、1つ以上のアプリケーションの制御を許可するプログラミング言語および言語ランタイムの言語部分のコンパイラー、その結果により、コードを動的に生成できます。 「スクリプト」は、通常は異なる言語で記述され、多くの場合エンドユーザーによって作成または少なくとも変更されるため、アプリケーションのコアコードとは異なります。多くの場合、スクリプトはソースコードまたはバイトコードから解釈されますが、アプリケーションは通常、最初にネイティブマシンコードにコンパイルされます。

  1. 「コードを動的に生成できるようにする」とはどういう意味ですか?スクリプト言語のコードは、実行される前に書かれていないので、どのように動的に生成されますか?
  2. 定義により、スクリプト言語は常にインタプリタ言語ですか?逆に、インタプリタ言語は常にスクリプト言語ですか?それらは非常に密接に関連しているか、あるいは同じものでさえあるようです。
  3. 言語はどのように非スクリプトですか?
9
Tim

スクリプト言語を定義する技術標準はありません。一般的な用法で定義されているのは単なるWordであり、一般的な用法の他のWordと同様に、すべての用法が一貫しているという保証はありません。特定の質問に取り組む:

  1. 彼らが話している動的コード生成はマシンコードです。従来のインタープリター型言語(BASICインタープリターを考えてください)では、スクリプトの行が実行されるたびに、その行がその場でネイティブマシンコードに変換されます。多くのスクリプト言語が仮想マシンのバイトコードに変換され、バイトコードがキャッシュされる可能性があるため、これはより複雑になります。

  2. ここは非常にぼやけて、時間とともに変化します。昔、ほとんどのスクリプト言語は古典的なインタプリタ言語でした。現在、多くはバイトコード、仮想マシンを使用しており、ジャストインタイムコンパイラを使用している場合があります。その時点では、インタープリター型言語とコンパイル型言語の境界線はぼやけています。それでも、ネイティブマシンコードへの1回限りの変換という古典的な意味でコンパイルされたスクリプト言語と一般的に呼ばれる言語については知りません。

  3. 一般にスクリプト言語と呼ばれる言語は、通常、セット、リスト、ディクショナリなどの一連の高レベルのデータ構造と、正規表現などの機能を提供します。これらの高度な機能を提供しないインタプリタ言語があり、それらは通常スクリプト言語と呼ばれていません。多くの人がインタープリタ型のBASICや、UCSD Pascalをスクリプト言語と呼ぶことはないと思います。

11

チャールズ・E・グラントが頭に釘を打ちましたが、何か付け加えたいです。実用的な観点から見ると、スクリプト言語は(ほとんど)実行中のソリューションを取得するためのビルドプロセスを設定する必要がない言語です。したがって、テキストエディターを取得してPerlを入力するだけです/ Python/Ruby/Bash/VBScript/awk/[...お気に入りのスクリプト言語を追加しますここに..]コードがあり、それをファイルに保存して実行します。これにより、ユーザーのマシンで動的にスクリプトコードを生成するプログラムを作成し、そのコードを実行することも簡単になります。

C/C++/Java/Fortran/COBOL/Pascal/[...ここにお気に入りの非スクリプト言語をここに追加...]などの言語を使用する場合、通常はコンパイルを設定する必要があります/ソースコードから実行可能ファイルを取得する前のリンクステージ。多くのシナリオでは、ユーザーは自分のマシンにそれらの言語用のコンパイラーを持っていないため、同じ言語で他のプログラムを作成するプログラムを簡単に作成できません-ユーザーのマシンでそれらを実行して実行します。もちろん、これが可能なスクリプト言語とは見なされない言語(C#やVB.NETなど、Javaについては不明です)がありますが、Charles Eです。グラントは書いた、それらのカテゴリー間の線はあいまいです。

「解釈された言語」についての質問:私の理解では、舞台裏で何が起こっているかは、スクリプト言語と非スクリプト言語の区別にとって重要ではありません。ランタイム環境がソースコードを直接解釈するか、それともバイトコードにコンパイルされるかは関係ありません。バイトコードは、ジャストインタイムでマシンコードにコンパイルされる場合があります。ビルドステージをセットアップする必要なく、環境がソースコードを直接実行していると感じる限り、それはスクリプト言語です。

5
Doc Brown

これが私のスクリプトの定義です。理解していただければ幸いです。

スクリプト-は、いくつかの単純な問題のquickソリューションです。いくつかの例は次のとおりです:デプロイメントスクリプト(必要な場所にアプリファイルをコピーする、サービスを再起動する)、ログ解析スクリプトなど。ここではパフォーマンスは重要ではなく、スクリプトをすばやく記述して変更する機能-それは重要です。したがって、スクリプト言語はスクリプトの記述に適した言語です。

「コードを動的に生成できるようにする」とはどういう意味ですか?スクリプト言語のコードは、実行される前に書かれていないので、どのように動的に生成されますか?

「コードを動的に生成できるようにする」とは、スクリプト言語でeval("print 'hello world! ")`。

定義により、スクリプト言語は常にインタプリタ言語ですか?逆に、インタプリタ言語は常にスクリプト言語ですか?それらは非常に密接に関連しているか、あるいは同じものでさえあるようです。

はい、そうです。しかし、最近のスクリプト言語の多くは厳密に解釈されていません。例えば。 pythonはソースからバイトコードを生成します。これはマシンコードではありませんが、まだコンパイル段階があります。

言語はどのように非スクリプトですか?

ワンライナーを書くことが許可されていない言語は、非スクリプトです。例えば。 main()関数なしでCアプリを記述したり、Javaアプリを1つのクラスを記述せずに記述したりすることはできません。しかし、Pythonでそれを行うことができます。これは完全にオブジェクト指向ですが、簡単に記述できます関数やクラスのないプログラム。

3
rvs

答えるべき最初の質問、スクリプトとは何か(そしてそれがプログラムとどう違うのか)。

スクリプトは事前に定義された一連のコマンドであり、通常はコンソールとのやり取りを必要としません(実際、ユーザーインターフェイスはほとんどありません)。スクリプト言語は、スクリプトをサポートする言語です。一般に、どの言語でもスクリプト言語の機能を実行できますが、必ずしも解釈されるとは限りません(たとえば、awkスクリプトをCに変換できます)。

3
James McLeod