Perlの実行方式とインタプリタ型の特徴を確認
基本情報技術者試験 平成29年度秋期 午前 問8 / アルゴリズムとプログラミング › プログラム言語
過去問にチャレンジ
Perlの実行に関する記述のうち,適切なものはどれか。
- ア
UNIX用として開発されており,Windows用の言語処理系はない。
- イ
実行にWebサーバを必要とする言語であり,CGIの開発に適している。
- ウ
動的デバッグは,言語処理系から独立したプログラムを実行して行う。
- エ
プログラムをコンパイルしたファイルを事前に用意する必要はない。
会話形式の解説
講師今回はPerlという言語がどのように実行されるかを問う問題です。動作環境、Webサーバとの関係、デバッグの方法、事前コンパイルが必要かどうかの4点を一つずつ確かめていきます。
受験者PerlはCGIでよく使われると覚えていたので、Webサーバが必要だという記述が正しいように思えてしまいました。
講師そこが引っかけになりやすいところです。CGIは、Webサーバからプログラムを呼び出して動的なページを作る仕組みのことです。PerlがCGIの記述によく使われてきたのは確かですが、それは用途の一つにすぎません。では、Webサーバがない環境ではPerlは動かないと思いますか。
受験者コマンドラインからスクリプトを実行する例を見たことがあるので、動きそうです。
講師そのとおりです。Webサーバがなくても、単体のコンピュータ上でコマンドラインから実行できます。反例が一つあれば「必要とする」とは言えないので、この記述は誤りです。
受験者UNIX用でWindows用の処理系はないという記述も、「存在しない」と言い切っているので怪しいと感じました。
講師よい着眼点です。PerlはUNIXだけでなくWindowsなど複数のプラットフォームで動き、Windows向けの処理系も提供されています。ですから、この記述も誤りです。
受験者動的デバッグを処理系から独立した別のプログラムで行うという記述は、正直なところ判断がつきませんでした。
講師動的デバッグとは、プログラムを実際に動かしながら誤りを探すことです。Perlには処理系に付属するデバッガがあり、実行するときに -d オプションを指定すれば起動できます。独立した別のプログラムを使うわけではないので、この記述は誤りです。
受験者そうすると、残るのはコンパイルしたファイルを事前に用意する必要はないという記述ですね。Perlはインタプリタ型だからでしょうか。
講師そうです。インタプリタ型とは、ソースを処理系に渡すとそのまま実行される方式のことです。C言語のように先に実行ファイルを作っておく手順は要りません。ですから、この記述が適切です。
受験者整理すると、Perlはインタプリタ型で、複数のプラットフォームで動き、Webサーバがなくても実行でき、デバッガも処理系に付属している、ということですね。
講師そのとおりです。補足すると、Perlの処理系は内部でソースを中間形式に変換してから実行します。ただ、これは自動で行われるので、利用者が事前にコンパイルする必要はありません。実行形式のファイルにまとめる道具もありますが、使うかどうかは任意で、実行の前提条件ではありません。「内部で変換している」という話と「事前の準備が要る」という話を混同しないよう注意してください。
まとめ
Perlはインタプリタ型の言語で、ソースを処理系に渡せばそのまま実行できるため、事前にコンパイルしたファイルを用意する必要はありません。PerlはUNIXだけでなくWindowsなど複数のプラットフォームで動作します。CGIの記述によく使われてきましたが、コマンドラインからも実行できるので、Webサーバは必須ではありません。デバッガは処理系に付属しており、-d オプションで起動します。
解答・解説
正解はエです
この問題のテーマ
Perlがどのような方式で実行される言語かを理解しているかを問う問題です。動作環境、Webサーバとの関係、デバッグの方法、事前コンパイルの要否を一つずつ確かめます。
解き方の考え方
Perlはインタプリタ型の言語で、ソースを言語処理系に渡すとそのまま実行されます。この性質を基準にして、各選択肢が「必要ない」「存在しない」と言っている点が本当かを順に確かめます。「〜しかない」「〜を必要とする」のように範囲を狭めて言い切る記述は、反例が一つあれば誤りだと判断できます。
選択肢ごとの解説
- ×ア UNIX用として開発されており,Windows用の言語処理系はない。UNIX専用でWindows用の処理系はないとする説明は誤りです。PerlはUNIXだけでなくWindowsなど複数のプラットフォームで動き、Windows向けの処理系も提供されています。
- ×イ 実行にWebサーバを必要とする言語であり,CGIの開発に適している。実行にWebサーバが必要だとする説明は誤りです。PerlがCGIの記述によく使われてきたのは確かですが、それは用途の一つにすぎません。Webサーバがなくても、コマンドラインから単体のコンピュータ上でスクリプトを実行できるため、「必要とする」とは言えません。
- ×ウ 動的デバッグは,言語処理系から独立したプログラムを実行して行う。動的デバッグを処理系から独立した別のプログラムで行うという説明は誤りです。Perlには処理系に付属するデバッガがあり、実行するときに -d オプションを指定すれば起動できます。
- ○エ プログラムをコンパイルしたファイルを事前に用意する必要はない。事前にコンパイルしたファイルを用意する必要はないという説明は適切です。Perlはインタプリタ型なので、ソースファイルを処理系に渡せばそのまま実行できます。したがって、C言語のように先に実行ファイルを作っておく手順は要りません。
補足
Perlの処理系は内部でソースを中間形式に変換してから実行しますが、これは自動で行われるので、利用者が事前にコンパイルする必要はありません。なお、実行形式のファイルにまとめる道具もありますが、使うかどうかは任意で、実行のための前提条件ではありません。
POINT
- Perlはインタプリタ型の言語で、ソースを処理系に渡せば直接実行できます。
- PerlはUNIXに限らず、Windowsなど複数のプラットフォームで動作します。
- PerlはCGIの記述に使われてきましたが、実行にWebサーバは必須ではありません。
- Perlのデバッガは処理系に付属しており、-d オプションで起動します。
