質問: 上の参考2の記事の中で ``` コンパイル言語は先ほども説明した通り、コンパイラが必要になってきますが、 スクリプト言語だと、FlashPlayerなどの翻訳機能を兼ね備えているプレーヤーをインストールすれば 翻訳から実行まで可能になります。 コンパイル言語は翻訳がすでにされているので、 プレーヤーをインストールする必要はありませんが、 単体で動かすことになるので、PCにインストールする必要があります。 ``` と書いてあるのですが、 スクリプト言語のコンパイラがFlashPlayerなどのプレーヤーということですか? スクリプト言語はプレーヤーとセットになって初めて翻訳・実行が可能になるのだとしたら コンパイル言語もコンパイラをインストールしないといけないのでは、と思ったのですが、どうでしょうか。 「すでに翻訳がされているからコンパイラをインストールする必要はなく、 (すでに翻訳された状態の)コンパイル言語だけPCにインストールすれば良い」 ↑これは例えば、PCゲームをコンパイラ言語で作って、 機械語の状態(コンパイラ済み)でサイトなどに公開しているから コンパイラは必要ない、とかそういうことでしょうか? 3つ質問しましたが、1つだけでもいいので教えていただきたいです。 よろしくお願いします。
回答: たとえ話しにしたのが反って裏目になったかもしませんが ``` プログラムをコンピュータに対する指示書として仮に2種類の本が有るとします。 一つは機械言語で書かれています。これは、バイナリ、オブジェクト、実行形式とか呼ばれるものです。 もう一冊は、プログラム言語(c、C++、C#、Java、Python、Perl、PHP、Ruby、JavaScript) で書かれていてプログラムソースと呼んでいます。 ◆「機械言語とプログラム言語」 機械言語で書かれている本は、コンピュータ(OS)が読み、実行する事ができます。 この機械語の本を人間が読み理解するのは無理?です。(昔はダンプして読んでましたが) プログラム言語の本は、人間が読み易く書かれています。私たちでも文法を習えば書く事ができますし、 読んで理解もきます、しかしこれを現在のコンピュータが読むことはできません。なので翻訳が必要です。 ◆「コンパイラ言語とインタプリタ(スクリプト言語)」 この翻訳の役目をしているのがコンパイラ、インタプリタ(スクリプト言語)です。 まず、コンパイラは、プログラム言語で書かれているものを翻訳して機械言語本を作成します。 インタプリタは、プログラムソース本を見ながら機械語でコンピュータと話ます。 (余談ですが、StarWARsのC3POもバイナリが話せると言ってました) ◆C言語、PHP言語 c言語で言うとコンパイラは、c言語ソースから機械言語の実行形式を作成します。後はコンピュータ自身が読込み実行します。 ですので高速での実行が可能です。 スクリプト言語はこの機械語本は作成しませんが、機械語への通訳ができますのでコンピュータと話ことができます。 これは私たちが書いたメモを通訳者に渡して機械と話をしてもらのに似ています。 PHPで書かれたプログラムソースであればPHPエンジンがソースを読込み翻訳をしてコンピュータへ指示をします。 この翻訳工程は実行する度に行うのでコンパイラの一回に比べると遅くなる要因です。 例え話ばかりで失礼しました。 ``` > > 「コンパイラは、プログラム言語で書かれているものを翻訳して機械言語本を作成します。」 > > この「機械言語本」は「実行ファイル」ということで良いですか? > > > そう考えて良いと思います。WindowsOSの場合の.exeです。 > > コンパイラ型はコンパイルによってソースコードとは別の「実行ファイル」を作成するのに対して > > インタプリタ型はコンパイルしないので、ソースコードを解釈することによってそのソースコード自体が「実行ファイル」となる、という解釈で合っていますか? > > > インタプリタは、「実行ファイル」を作成しない代わりに、ソースコードを翻訳してOSに対して実行指示と結果をやり取りしますので、ソースコード自体が実行ファイルとは言えます。「実行ファイル」ではありますが、スクリプトと呼ばれた方が良いと思われます。(誤解されない) > > スクリプト言語は「逐次(1行ずつ)コンパイル」しながら実行する、ということですが > > > 「1行づつ」と有ります。見方としてスクリプト言語の多くは、「実行文づつ」する見方もお薦めです。 内側の実行文(コマンド、関数、ルーチン)から実行される結果が外側へと伝わるイメージです。 ``` イメージです 実行文A(実行文B(実行文C))); ```