
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
補足です。
皆さん概ね正しいですが、とてもよくあるインタプリタに関する勘違いをされています。
インタプリタが逐次機械語に翻訳するというのは、動的コンパイルの説明で、それはインタプリタの一形態に過ぎません。
「逐次機械語に翻訳して実行する」というよりは、「逐次インタプリタ言語を解釈して、それに対応するインタプリタのサブルーチンを呼び出して実行する」が正しいです。
こちらを参考にされてください。
http://lise.me.sophia.ac.jp/kktm/Essay/virtual_m …
http://www.sophia-it.com/content/インタープリタ型言語
No.4
- 回答日時:
コンピュータが理解出来るのは「機械語」だけなので、どのプログラミング言語で書いても最終的には「機械語」になります。
機械語の実体は、"000A4B13"のような人間には普通は理解出来ない数字の羅列なので、これでプログラムしろというのは無理な話です。「アセンブラ」は、この数字の羅列を少し分かりやすくしたものです。足し算なら"ADD"のように。
しかし、足し算をするのに"ADD 2,DATA"等と書くために、これでも人間には読みにくいですね。もっと人間に読みやすいプログラムを書けるように考えられたのが「コンパイラ」です。足し算なら"data + 2"という書き方が出来るわけです。
アセンブラもコンパイラも、テキストで書かれたプログラムを一気に機械語に変換します。1000行あるプログラムのある1行だけ直したくても、1000行全部を一度機械語に変換しないと実際に動作させる事ができません。
それでは大変なので、1行入力したらその場で機械語に変換してしまうのが「インタプリタ」です。単純な書き間違いはその場でエラーになりますし、プログラムが書き終わったら、すぐに実行する事が出来ます。
こう書くと、インタプリタが一番優れているように見えますが、他の方が書かれているように、それぞれ特徴があり、場合に応じて使い分けされています。
とまあ、かなり大雑把に概念的な事を書いてみました。これでイメージが掴めたら、少し実際のプログラムをやってみてから、もっと深く勉強されたら良いかと思います。
No.3
- 回答日時:
コンパイラ、インタプリタ、アセンブラの違いを理解するには、高級言語と低級言語(?)の違い、コンピュータプログラムの動くソフトウェア的な仕組みを理解する必要があります。
そもそもコンピュータに搭載されるCPU自体は単なる計算機です。
集積度が高いので、高速に多くの計算が出来るだけです。
その際には電流の「オンとオフ」を基にした「1と0」による2進数計算しか厳密に言えば出来ません。
機械語というのは、この2進数による計算処理を直接的に行える様にしてあるもので、16進数で圧縮記載されることもありますが、要は限りなくコンピュータ自体の処理方法に近い書き方で表されるので他の方が言う様に実行速度が速いのです。いわゆる低級言語に当たります。
アセンブリ言語とは、人間にはいきなり2進数や16進数で計算処理を全て書き表す様なプログラムを記述するのは(簡単なものを除けば)現実的ではないので、これを四則演算のようなごく単純な命令を言語として定めておいて、それを使って計算処理を書くようにしたものです。
これもコンピュータ処理自体に近い表記であり、低級言語に近いものです。
コレに対して、BASICのようなインタプリタ言語やコンパイルを要するC言語は高級言語と呼ばれ、人間の思考に近い形で計算処理を表記できるようにしてあるのです。要は、機械語・アセンブリ言語で行う計算処理を組み合わせて「命令セット」として組み合わせて、それを単語と結びつけて擬似的に言語体系化したものです。
コンパイラは、その計算処理の命令セットを実行する際に、機械語表記のような計算機が実行できる形に翻訳するのに「一括変換」が必要な言語体系でかかれたプログラムを「一括変換するための翻訳プログラム」です。コンパイルする、とはその翻訳プログラムを使って一括変換を行うことを指します。
インタプリタ言語は、(他の方が書かれている様に)プログラムを1つの命令処理単位で「逐次実行」するための翻訳プログラムです。
物凄く単純化して言うと、10行で書かれたプログラムに各1行に1つの命令処理があるとして、そのプログラムを実行すると、1行ずつ命令処理を実行していき、10個の命令処理が終わるとプログラムが完結する、というのがインタプリタ言語の翻訳の仕方です。
高級言語で書かれた“文章”を前から読み込んで計算処理をしようとするので、記述に誤りがあった場合、その時点で処理がエラーを起こして止まるのが特徴で、誤り(バグ)を直し易い[=デバッグしやすい]というのが使うメリットです。
計算処理は遅くなるので、昔のPCなどではプログラムの組み方次第では“遅すぎて固まっている”様な状態になることがありましたが、今はCPUの機能やメモリの容量も大きくなっているので、こういう言語体系の方が迅速な開発が出来るということで好まれていることがあります。最近、Webシステムの開発で使われるPerlやPHPなどのスクリプト言語もインタプリタ言語の1つです。
ただ、どんなコンピュータも最終的には機械語・アセンブリ言語レベルでの計算処理が行われているのは同じなので、処理ロジックを計算しやすいように単純化することは、処理を高速化する際のポイントになります。
上手い説明とは思いませんが、他の方の説明とあわせてご理解頂ければと思います。不明な点があれば補足を追加して下さい。
No.2
- 回答日時:
分かりやすく外国語の翻訳に例えて言います。
一番早いのがアセンブラで、通訳とか翻訳家のレベルです。一旦機械語に変換されると最速レベルで実行されます。また変換後のプログラムのサイズもコンパクトです。
次に速いのがコンパイラです。翻訳に例えると機械通訳、翻訳機です。一気に機械語に変換されますが、共通な作業をするランタイム・ルーチンなどが付加されます。そのためプログラムのサイズはアセンブラより大きくなります。
インタプリタはその都度辞書引きですw。一行一行機械語に翻訳しながらプログラムを実行するので、処理のスピードはアセンブラに比べて1000倍位遅くなります。ただし、プログラミングのミスがあった場合でも容易に中断し、手直しできるメリットがあります。
アセンブラやコンパイラの場合、アセンブルやコンパイルの途中でエラーが発見されれば手直しができますが、できあがった機械語にバグがあった場合、多くは暴走してしまい、リセットをかけるしか手が無くなります。また、そのバグを見つけるのもインタプリタより遙かに手がかかります。

No.1
- 回答日時:
コンパイラは、機械語に翻訳した後、実行形式のオブジェクトを
作成します。
インタープリタは、機械語に翻訳しながら実行していきます。
同時通訳のイメージです。
アセンブラは、機械語に近いアセンブラ言語を機械語に変換する
のです。
http://www13.plala.or.jp/dragon-vein/data%20base …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- オープンソース IT用語、ソースとオブジェクト、改変と翻訳と翻案の違いなど どのようにりかいすればよいのですか 1 2022/09/09 10:02
- C言語・C++・C# アセンブラ指令 3 2023/06/17 14:47
- 教育ソフト・学習ソフト 最近小学生、中学生にもプログラミング教育をしているとの事ですが、どの様な教育をしているのかお教え下さ 4 2023/08/11 05:17
- 英語 「羊たちの沈黙」を原書で読んだ方、もしくは英語に堪能な方に質問します 3 2022/06/02 00:04
- 文学・小説 「羊たちの沈黙」を読んだことがある方に質問です 6 2022/06/02 00:10
- その他(コンピューター・テクノロジー) AIに関連する用語を理解したい、RNN、LMM、LSTMなど、書籍で理解したい 1 2023/07/06 22:18
- 大学受験 大学受験英語長文の勉強法について 武田塾のYouTubeなどを参考にして、勉強法を考えました 自分は 2 2023/05/05 08:05
- 日本語 「素直になる」ことと「言いなりになる」ことの違いを教えてください。 10 2023/02/12 17:54
- ノンジャンルトーク 「全部筒抜けなんだっつーの」って 何と訳したらいいでしょうか? 2 2022/07/03 20:12
- その他(プログラミング・Web制作) x86_32のGASの擬似命令 3 2023/06/07 19:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Ajaxの実行速度と読み方について
-
スレッドとプロセスの違い
-
式計算アルゴリズムについて
-
JavaScriptでできることについて
-
JavaScriptでページが移動しても
-
マルチスレッドプログラミング...
-
PHPのstrip_tagsに相当するJava...
-
複数リクエストの扱い
-
JavaScriptのif文について
-
フリック時フリック方向に矢印...
-
ServletからJSPに遷移させた後...
-
スレッドの待機と再開
-
初心者です。
-
MVC C# 共通メソッドはどこに書...
-
処理実行後、終了させないで最...
-
EclipseでのWebアプリケーショ...
-
Javaのスレッドについて
-
スレッドを使用して、ボタンの...
-
Strutsで共通のアクセス解析用U...
-
無限ループ中におけるマウスイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[Java] while(true)の意味
-
tryの終了
-
Javaでのデバッグコード削除
-
Javaアプリケーション実行の返...
-
Javaプログラムからポップアッ...
-
onBlurとonFocusの処理順序につ...
-
Tomcat高負荷時の設定について
-
数値の定数を付ける時
-
アコーディオンメニューをアン...
-
ラジオボタンの選択判定
-
ラベルの表示までが異常に遅い...
-
ExcelVBA で文字列の特定の文字...
-
C#で別スレッドの終了を知りたい
-
素数判定を再帰処理で
-
JavaScriptからJAVAクラスを呼...
-
switch文の中に、throws new Ex...
-
PHPでDB処理中にプログレスバー...
-
C#の処理をリアルタイムに表示...
-
Windowsサービスの処理
-
ftp 同時複数接続の負荷テスト...
おすすめ情報