インタプリタはロードモジュールを作成する?

このQ&Aのポイント
  • コンパイラとインタプリタはロードモジュールを作成するものだと思っていたが、実は間違いであり、インタプリタはロードモジュールを作成しない。
  • 言語プロセッサにはコンパイラやインタプリタが利用されるが、インタプリタは高水準言語から機械語のプログラムに翻訳してロードモジュールを作成する役割を持たない。
  • インタプリタは高水準言語の原子プログラムを実行する際に逐次的に機械語に変換し、実行するプログラムであり、ロードモジュールを作成しない。
回答を見る
  • ベストアンサー

インタプリタはロードモジュールを作成する?

情報システムを勉強し始めた初心者です。 私の持っているテキストには以下のように書いてあります。 ・「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。 ・「言語プロセッサ」には「コンパイラ」や「インタプリタ」が使われる。 つまり、コンパイラもインタプリタもロードモジュールを作成するものだと思っていました。 しかし、以下のような問題がありました。 問題: インタプリとは、高水準言語で書かれた原子プログラムを、機械語のプログラムに翻訳してロードモジュールを作成するプログラムである。 答え: 間違い。インタプリタではなく、コンパイラの説明になっている。 つまり、インタプリタはロードモジュールを作成しないということなのでしょうか? どなたかご教授お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

> 「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。 > 「言語プロセッサ」には「コンパイラ」や「インタプリタ」が使われる。 既にここがあいまいですね。 ソースプログラムを実行状態まで持っていくには、コンパイラの場合 「ソースプログラム」→コンパイラ→「オブジェクトモジュール」→連係編集→「ロードモジュール」 →「プログラムローダー」:主記憶にロードして実行 と言う形です。 これに対してインタープリタは一文ごとに機械語に翻訳して逐次実行していきます。 この1回ごとの実行は普通ロードモジュールとは言いません。 > つまり、コンパイラもインタプリタもロードモジュールを作成するものだと思っていました。 むりもありません。 > つまり、インタプリタはロードモジュールを作成しないということなのでしょうか? 上に書いたとおり逐次実行ではロードモジュールとは言いません。 蛇足ですが、英語の論文が5ページあってこれを事前に日本語に翻訳しておいて これを日本人が読み上げるのがコンパイラー方式、 日本語文書がロードモジュールに当たります。 もし著者が1行づつ英語でしゃべり、それを通訳が1行づつ日本語に直してしゃべる。 これがインタープリター方式です。 インタープリター方式ではロードモジュールに相当すものが無いのにお気づきですね。 繰り返しになりますが、コンパイラーは事前翻訳、インタープリタは即時通訳です。 一長一短がありますので一つの言語で有りながらコンパイラとインタープリタの 2つを備えているものもあります。

その他の回答 (6)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.7

> ・「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。 言語プロセッサだと言語を処理するプログラム全般ですね。言語がプログラム言語とは限りませんし、処理が変換だけとは限りません。画面に表示したり(例えばWebブラウザはHTML言語プロセッサ)、何かを実行したり(自然言語を解釈して検索したり、インタプリタ言語で動作したり)。 「ソースプログラム」を「ロードモジュール」に変換するプログラムはコンパイラと言います。出力は必ずしもロードモジュールでなく中間言語コードだったりオブジェクトコードだったりもしますが。 インタプリタはマシン語以外で記述されたプログラムを逐次解釈して実行するプログラムのことです。ソースプログラムを解釈するものだけでなく中間言語コードを解釈するものもあります。 なお、最近のスクリプト言語ではインタプリタが内部に中間言語コンパイラを内蔵し、ソースプログラムを中間言語コードにコンパイルしてから中間言語コードを解釈して実行することが多いです。 # 昔のBASICも入力時に行ごとに内部コードに変換して実行してたけどね

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.6

ANo4さんの回答ですがいくつか誤解があります。 > 中間コードで動作するのが、VBなどのBASICと呼ばれている言語です。 VB6はネイティブコンパイラ、VB.2003以降は中間コードコンパイラです。 VB.NET、C#などの出力する中間コードは一応、EMCAで規格化されており、理論上はOSが異なっていても対応するCLRがあれば動作することになっています。その点でJavaと変わりません。ただし、.NET Frameworkはマイクロソフトが著作権を有しているので実際はクローズドな世界になっています。Unix/Linuxでも対応できるようにする試みもあるようですが。 http://www.itmedia.co.jp/enterprise/articles/0406/24/news087_2.html > また、直接ソースを解析して動作するのは、ネットワーク系言語に多く、Perl,PHP,Rubyなどがあります。 Perl6、Ruby1.9は中間コードにコンパイラして実行します。ただし、コンパイラ結果をファイル出力する機能および出力した中間コードを実行する仕組みがありません。

  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.5

インタープリータは、ロードモジュールは生成しません。 ロードモジュールというのは、そのままメモリにロードして、CPUを直接動かすことのできるプログラムのことです。ソースコードや、中間コードは含みません。 >私の持っているテキストには以下のように書いてあります。 >・「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。 「ロードモジュール」と断定している点が間違いでしょう。言語の変換を行うプログラムはすべて「言語プロセッサ」ですから。 インタープリータは、ソースコードを直接、あるいは中間コードに変換されたものを、逐次解釈して実行するためのプログラムの意味と、ソースコードを中間コードに変換するプログラムの、両方の意味で使われます。 これを区別するために、実行時インタープリータ、前処理インタープリータ、などと呼ぶことがあります(定着した名前ではなく、その場ごとで微妙に呼び方は変わります) あるいは、ソースコードを中間コードに変換するプログラムを、中間コードコンパイラと呼ぶこともあります。この場合はインタープリータというと実行時インタープリータの意味しかありません。 このへんは、いろいろと呼び方が混乱している感じです。

noname#140082
noname#140082
回答No.4

基本的に、コンパイラが出力するロードモジュールは機械語(バイナリ)であるため、対応するCPUでないと動作しません。 また、普通はOSも限定されます。 C言語やC++は、コンパイラ言語です。 異色なのは、Javaです。 これは、コンパイル型言語ですが、出力は仮想環境でのロードモジュールを出力しますので、これはCPUやOSが違っていても動作します。(動作は絶対でもないのかな?) これ以外が、インタープリタ型言語となります。 インタープリタ型は、ソースをそのまま解析して実行するものと、中間コードに変換して中間コードファイルを実行するものとあります。 中間コードで動作するのが、VBなどのBASICと呼ばれている言語です。 (VBも中間コードを作成する操作を「コンパイル」と言っていたはずですが、分類としてはインタープリタです) また、直接ソースを解析して動作するのは、ネットワーク系言語に多く、Perl,PHP,Rubyなどがあります。 また、ここで書いたことは絶対ではなく、Perlでもコンパイル型のもあったはずですので、例外はあります。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> インタプリタとは、高水準言語で書かれた原子プログラムを、機械語のプログラムに翻訳してロードモジュールを作成するプログラムである。 この問題の重要な点は「作成するプログラムである」というところでしょう。 インタプリタは言語プロセッサであると同時に、実行環境でもあります。 オブジェクトファイルを作成する「だけ」ということはほとんどありません。 翻訳した結果をファイルに出力すること自体がほとんどありません。 逆にコンパイラは変換だけを行い、それ自体で実行することはほとんどありません。 最近は、インタプリタ型言語で内部的にはコンパイルを行っていて、結果を出力して再利用できるものがある、等、境界が曖昧ですが。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

> インタプリタはロードモジュールを作成しないということなのでしょうか? 作成しないものもあります。 昔のBASICとか、プログラム言語かどうか微妙ですが現在のVBAとか。

関連するQ&A

  • コンパイラとインタプリタとアセンブラの違いって何?

    言語プロセッサの説明で「コンパイラ、インタプリタ、アセンブラ」などがあると書かれていたのですが、 コンパイラもインタプリタもアセンブラもどれも説明が「機械語に翻訳する」と書かれていました。 何が違うのでしょうか? 違いをわかりやすく教えてください。 いろいろなプログラミング言語があるというところまでは理解できましたが、プログラミングはわかりません。(涙) これから勉強します。

  • コンパイラ、インタプリタ、クロスコンパイラについて

    インタプリタについて質問があります。 色々と調べたところ、perl、php、rubyなど、ソースをインタプリタで実行する言語の利点は以下なのだと思います。 ソフトを作っている環境と実行環境の間でcpuやos等が異なる場合は、 ソースは互いに異なる機械語に翻訳されるので、翻訳は実行環境で行わなければならない。 その際、コンパイラの場合はわざわざ手動で翻訳を実行しなければならないが、 インタプリタの場合は勝手に実行時に翻訳してくれるので楽。 1.それで質問なのですが、 コンパイラは環境に対応した機械語を出すらしいですが、 何故そんな事ができるのでしょうか。 コンパイラが、自身が置かれた環境を分析して、それに対応した機械語を出すのでしょうか? それとも、そもそも環境毎に対応したコンパイラを使うという事でしょうか? 2.また、世の中にはクロスコンパイラというものがあると聞きました。 クロスコンパイラがあれば、ソフトを作っている環境でそのままコンパイルできるので、 インタプリタはいらないのではないでしょうか? クロスコンパイラの短所や長所などを教えてほしいです。 3.翻訳後の話として、機械語はcpuやosによって違うという話ですよね。 つまり、機械語にコンパイル済みのソフトを配布する際は環境毎に対応したソフトを それぞれ配布しなければならないのですよね。 しかし、ネット上でダウンロードできるフリーのソフトなんかは、 特定のOS向け、あるいはOS別に違うファイルを配布、というのはよく見かけますが、 cpuやその他の環境毎に配布物を分けているのは見たことがありません。 機械語は、本当にos以外にも依存するものなのでしょうか?

  • rubyのインタプリタについて

    プログラムを作って実行しました。すると5秒ぐらい経過して出力が現れ終了しました。このプログラムをまた実行するとつぎは1秒ぐらいで終了しました。rubyはインタプリタ言語なので機械語に一旦翻訳して実行していると聞いたのですがそれではなぜ上記のように5秒かかっていたものが次の実行時には1秒ぐらいですんでしまったのでしょうか?

  • プログラム言語って何があるの?

    私、プログラム言語について調べています。 ウィキペディアをみてもたくさんあって、そこからまたリンクがたくさんあってどこでどのように区切っていいのか分かりません。そこで皆さんに質問したいのですが、プログラム言語はどのようなものがありますか? 大まかにプログラム言語の総称があってその次に (1)機械語(マシン語) (2)アセンブラ言語 高水準言語これの中に (3)インタプリタ言語 (4)コンパイラ言語がありますが、 (1)~(4)のそれぞれの詳細を教えてください。例:BASIC、C等 またこの枠に入らないプログラム言語がありましたら教えてください。 とってもマイナーなものでも構いません。出来ればURL欲しいです。 お願いします。m(_ _)m

  • ロードモジュール?

    現在OSについて勉強中なのですがわからないことがあるので教えていただけたらと思います。 ロードモジュールとは機械語に変換されたプログラムなのですよね? そこでデータはPSECT、命令がCSECTになるのでしょうか? また、CSECTはスワップ領域には退避しないと聞きましたが、それでは再配置したときどのように命令を実行するのでしょうか? まだまだ初心者で見当違いな質問かもしれませんが教えていただけたら幸いです。 よろしくお願いします。

  • LMがリンクしている全モジュール名の調べ方

    OS : HP-UX R13 言語 : C コンパイラ : aCC LM(ロードモジュール)にリンクされているモジュールをリストアップする方法があったような 覚えがあるのですが思い出せません。 どなたかご存じありませんでしょうか? 私は静的ライブラリ(*.a)の提供者で、LM作成者は別の人間、提供しているライブラリ中のどのモジュールが 使われているのかを調べたい、といった状況です。

  • 基本情報技術者 連係編集について

    基本情報技術者 連係編集について こんにちは。 2010年1月末のJava2級に合格し、今年度秋期の基本情報技術者を 受験できないかと考えて、教科書と過去問に取り組んでいる者です。 その過程において、わからないことが出てきましたので、 質問させていただきます。 もしよろしければ、まずは、以下の問題を見ていただきたいのですが、 高水準言語で原子プログラムを作成した後、そのプログラムをコンパイル方式に よって実行するまでの手順として、正しいものはどれか、 次の中から選択せよ。 ア 原子プログラム作成 → 連係編集 → コンパイル → ロード → 実行 イ 原子プログラム作成 → コンパイル → ロード → 連係編集 → 実行 ウ 原子プログラム作成 → コンパイル → 連係編集 → ロード → 実行 エ 原子プログラム作成 → 連係編集 → ロード → コンパイル → 実行 正解は「ウ」なのですが、その中で「連係編集」という語句がありますが、 「連係編集」とは、Javaで言えば、ソースコードの中の自作クラス、 API中のクラス、メソッドなどを、組み合わせて コンピュータが実行可能なものにする、ということでよいのでしょうか? これはつまり、「バイトコードを作成する」ということでしょうか? もし、違っていれば、どなたか解説していただけないでしょうか。 よろしくお願いします。

  • アセンブリ言語は原始プログラムですか?

    質問(1) アセンブリ言語というのは、 add $S1, $S2 みたいなやつですよね? wikipediaで「ソースコード(ソースプログラム、原始プログラム)」の注釈1,2を読むと、 注1:【機械語の命令に記述するアセンブリ言語(アセンブラ)が存在するが、このアセンブラ用の文字列で記述されたプログラムはソースコードとは呼ばれないのが普通である。】 注2:【アセンブリ言語で書かれたプログラムはソースコードと呼ばれない】 と書かれてあります。 でも、 他の教材では アセンブリ言語で書かれたプログラム(原始プログラム) と書かれています。 どっちが正しいのでしょうか? 質問(2) 目的プログラム(オブジェクトプログラム)とは、 IT用語辞典によると 【オブジェクトプログラムとは、ソースプログラム(人間が認識できるプログラム言語で高水準言語など?)をコンパイラで機械語に翻訳したプログラムのことである】 とありますが、 ソースプログラムをコンパイラで翻訳するとアセンブリ言語になるんではないのですか? そのアセンブリ言語をアセンブラで翻訳して機械語になるのではないのでしょうか? どなたかご教授ください。 お願いします。

  • .NET frameworkについて

    .NET frameworkとはJVMとほとんど同じような気がするのですが、いろんな言語が使えること以外に何かメリットあるのでしょうか? それと、たとえば、VC.NETで作ったプログラムはコンパイラで中間コードになって、実行時に.NET frameworkでインタプリタみたいに機械語に直して実行しているのでしょうか?

  • 実行モジュールからソースを作りたい

    WindowsのMS-FORTRAN で作成したexe形式のプログラムがあるのですが、ソースを無くしてしまいました。 修正が必要となったので、このプログラムからソース(高級言語ならなんでも)を 取り出したい(変換したい)のですが、可能なのでしょうか? また、今回は個人使用目的のプログラムなので問題ないとは思いますが、 この行為自体、著作権(?)等の問題が発生しないのか教えていただければうれしいです。

専門家に質問してみよう