アプリ版:「スタンプのみでお礼する」機能のリリースについて

情報システムを勉強し始めた初心者です。


私の持っているテキストには以下のように書いてあります。

・「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。
・「言語プロセッサ」には「コンパイラ」や「インタプリタ」が使われる。

つまり、コンパイラもインタプリタもロードモジュールを作成するものだと思っていました。


しかし、以下のような問題がありました。

問題:
インタプリとは、高水準言語で書かれた原子プログラムを、機械語のプログラムに翻訳してロードモジュールを作成するプログラムである。

答え:
間違い。インタプリタではなく、コンパイラの説明になっている。

つまり、インタプリタはロードモジュールを作成しないということなのでしょうか?


どなたかご教授お願いいたします。

A 回答 (7件)

> 「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。


> 「言語プロセッサ」には「コンパイラ」や「インタプリタ」が使われる。

既にここがあいまいですね。
ソースプログラムを実行状態まで持っていくには、コンパイラの場合
「ソースプログラム」→コンパイラ→「オブジェクトモジュール」→連係編集→「ロードモジュール」
→「プログラムローダー」:主記憶にロードして実行 と言う形です。

これに対してインタープリタは一文ごとに機械語に翻訳して逐次実行していきます。
この1回ごとの実行は普通ロードモジュールとは言いません。

> つまり、コンパイラもインタプリタもロードモジュールを作成するものだと思っていました。
むりもありません。


> つまり、インタプリタはロードモジュールを作成しないということなのでしょうか?
上に書いたとおり逐次実行ではロードモジュールとは言いません。

蛇足ですが、英語の論文が5ページあってこれを事前に日本語に翻訳しておいて
これを日本人が読み上げるのがコンパイラー方式、
日本語文書がロードモジュールに当たります。

もし著者が1行づつ英語でしゃべり、それを通訳が1行づつ日本語に直してしゃべる。
これがインタープリター方式です。
インタープリター方式ではロードモジュールに相当すものが無いのにお気づきですね。

繰り返しになりますが、コンパイラーは事前翻訳、インタープリタは即時通訳です。
一長一短がありますので一つの言語で有りながらコンパイラとインタープリタの
2つを備えているものもあります。
    • good
    • 0

> ・「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。


言語プロセッサだと言語を処理するプログラム全般ですね。言語がプログラム言語とは限りませんし、処理が変換だけとは限りません。画面に表示したり(例えばWebブラウザはHTML言語プロセッサ)、何かを実行したり(自然言語を解釈して検索したり、インタプリタ言語で動作したり)。

「ソースプログラム」を「ロードモジュール」に変換するプログラムはコンパイラと言います。出力は必ずしもロードモジュールでなく中間言語コードだったりオブジェクトコードだったりもしますが。

インタプリタはマシン語以外で記述されたプログラムを逐次解釈して実行するプログラムのことです。ソースプログラムを解釈するものだけでなく中間言語コードを解釈するものもあります。
なお、最近のスクリプト言語ではインタプリタが内部に中間言語コンパイラを内蔵し、ソースプログラムを中間言語コードにコンパイルしてから中間言語コードを解釈して実行することが多いです。
# 昔のBASICも入力時に行ごとに内部コードに変換して実行してたけどね
    • good
    • 0

ANo4さんの回答ですがいくつか誤解があります。


> 中間コードで動作するのが、VBなどのBASICと呼ばれている言語です。
VB6はネイティブコンパイラ、VB.2003以降は中間コードコンパイラです。
VB.NET、C#などの出力する中間コードは一応、EMCAで規格化されており、理論上はOSが異なっていても対応するCLRがあれば動作することになっています。その点でJavaと変わりません。ただし、.NET Frameworkはマイクロソフトが著作権を有しているので実際はクローズドな世界になっています。Unix/Linuxでも対応できるようにする試みもあるようですが。
http://www.itmedia.co.jp/enterprise/articles/040 …

> また、直接ソースを解析して動作するのは、ネットワーク系言語に多く、Perl,PHP,Rubyなどがあります。
Perl6、Ruby1.9は中間コードにコンパイラして実行します。ただし、コンパイラ結果をファイル出力する機能および出力した中間コードを実行する仕組みがありません。
    • good
    • 0

インタープリータは、ロードモジュールは生成しません。


ロードモジュールというのは、そのままメモリにロードして、CPUを直接動かすことのできるプログラムのことです。ソースコードや、中間コードは含みません。

>私の持っているテキストには以下のように書いてあります。
>・「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。
「ロードモジュール」と断定している点が間違いでしょう。言語の変換を行うプログラムはすべて「言語プロセッサ」ですから。

インタープリータは、ソースコードを直接、あるいは中間コードに変換されたものを、逐次解釈して実行するためのプログラムの意味と、ソースコードを中間コードに変換するプログラムの、両方の意味で使われます。
これを区別するために、実行時インタープリータ、前処理インタープリータ、などと呼ぶことがあります(定着した名前ではなく、その場ごとで微妙に呼び方は変わります)
あるいは、ソースコードを中間コードに変換するプログラムを、中間コードコンパイラと呼ぶこともあります。この場合はインタープリータというと実行時インタープリータの意味しかありません。

このへんは、いろいろと呼び方が混乱している感じです。
    • good
    • 0

基本的に、コンパイラが出力するロードモジュールは機械語(バイナリ)であるため、対応するCPUでないと動作しません。


また、普通はOSも限定されます。
C言語やC++は、コンパイラ言語です。

異色なのは、Javaです。
これは、コンパイル型言語ですが、出力は仮想環境でのロードモジュールを出力しますので、これはCPUやOSが違っていても動作します。(動作は絶対でもないのかな?)

これ以外が、インタープリタ型言語となります。
インタープリタ型は、ソースをそのまま解析して実行するものと、中間コードに変換して中間コードファイルを実行するものとあります。
中間コードで動作するのが、VBなどのBASICと呼ばれている言語です。
(VBも中間コードを作成する操作を「コンパイル」と言っていたはずですが、分類としてはインタープリタです)
また、直接ソースを解析して動作するのは、ネットワーク系言語に多く、Perl,PHP,Rubyなどがあります。

また、ここで書いたことは絶対ではなく、Perlでもコンパイル型のもあったはずですので、例外はあります。
    • good
    • 0

> インタプリタとは、高水準言語で書かれた原子プログラムを、機械語のプログラムに翻訳してロードモジュールを作成するプログラムである。



この問題の重要な点は「作成するプログラムである」というところでしょう。

インタプリタは言語プロセッサであると同時に、実行環境でもあります。
オブジェクトファイルを作成する「だけ」ということはほとんどありません。
翻訳した結果をファイルに出力すること自体がほとんどありません。

逆にコンパイラは変換だけを行い、それ自体で実行することはほとんどありません。


最近は、インタプリタ型言語で内部的にはコンパイルを行っていて、結果を出力して再利用できるものがある、等、境界が曖昧ですが。
    • good
    • 0

> インタプリタはロードモジュールを作成しないということなのでしょうか?



作成しないものもあります。
昔のBASICとか、プログラム言語かどうか微妙ですが現在のVBAとか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!