コンパイルシステムと解釈システム

3522 ワード

コンピュータは、高度な言語で作成されたソースプログラムを直接受け入れ、実行することはできません.ソースプログラムは、コンピュータを入力するときに、「翻訳プログラム」を機械言語形式のターゲットプログラムに翻訳することで、コンピュータが識別し、実行することができます.このような「翻訳」には通常、コンパイル方式と解釈方式の2つの方式がある.
コンパイル方式とは、事前に作成したコンパイラと呼ばれるマシン言語プログラムを利用して、システムソフトウェアとしてコンピュータに格納し、ユーザが高度な言語で作成したソースプログラムをコンピュータに入力すると、コンパイラはソースプログラムをマシン言語で示す等価なターゲットプログラムに全体的に翻訳し、コンピュータがそのターゲットプログラムを実行し、をクリックして、ソースプログラムで処理する演算を完了し、結果を取得します.
解釈方式とは、ソースプログラムがコンピュータに入った後、解釈プログラムがスキャンしながら解釈し、文ごとに入力して文ごとに翻訳し、コンピュータが文ごとに実行し、目標プログラムを生成しないことを指す.PASCAL、FORTRAN、COBOLなどの高級言語のコンパイル方式を実行する.BASIC言語は解釈方式を主とする.PASCAL、C言語はコンパイラを書くことができる高度なプログラム設計言語である.
コンパイラ、解釈プログラム、アセンブリプログラムは3つの言語処理プログラムである.主な違いは次のとおりです.
アセンブリプログラム(低レベルサービス)は、アセンブリ言語で書かれたソースプログラムを機械命令やその他の情報からなるターゲットプログラムに翻訳するものである.
解釈プログラム(高度なサービス)は、ソースプログラムまたはソースプログラムの内部形式を直接実行し、一般的にはソースプログラムを読み、翻訳し、実行し、BASIC解釈プログラムのようなターゲットコードを生成しない.
コンパイラ(高度なサービス)は、高度な言語で書かれたソースプログラムを等価な低級言語に翻訳するターゲットプログラムである.
コンパイラと解釈プログラムの最大の違いの一つは、前者がターゲットコードを生成し、後者が生成しないことである.また、前者が生成するターゲットコードの実行速度は、解釈プログラムの実行速度よりも速い.後者は人と機械の相互作用がよく、初心者に適している.COBOLやFORTRANなどの言語で作成されたプログラムは,実行速度を考慮するとコンパイル実行が一般的である.プログラムの実行時に、一つの指令を取って、それを機械指令に変えて、この機械指令を実行します.コンパイル:プログラムが実行される前に、プログラムのコードをマシンコードにコンパイルして、このプログラムを実行します.
PS:テンセントの筆記試験問題:
以下、解釈システムとコンパイルシステムについての言い方で、間違っているのは()
A.解釈プログラムは目標コードを生成せず、直接ソースプログラムまたはソースプログラムの内部形式を実行する
B.コンパイルシステムを使用する場合、コンパイルフェーズと実行フェーズを区別する
C.一般的に、解釈システムはコンパイルシステムより複雑であるが、移植性がよい
D.一般的に、コンパイルに基づくシステムの実行速度は、解釈に基づくシステムよりも速い
答えはAを選ぶことです.後半で間違いました.ソースプログラムを直接実行するのではなく、マシン識別コードに変換して実行しなければなりません.
C++コードは更新するたびに再コンパイルする必要があります.一部の大規模なシステムでは、コンパイルに時間がかかることがあります.これはLinuxカーネルのようなシステムのデバッグに多くの不便をもたらします.これはコンパイルシステムの不足です.
網易の1本の筆記試験問題
解釈システムについての記述では,正しいのは()
A.          ,                 
B.                   
C.                 ,      、    
D.    ,                                

正解:A D
BとCはいずれもコンパイルシステムを記述している.
次に、コンパイル言語と解釈言語について説明します.
コンパイル言語:コンパイルとは、アプリケーションのソースプログラムが実行される前に、プログラムのソースコードをターゲットコード(マシン言語)に「翻訳」することであるため、ターゲットプログラムは言語環境から離れて独立して実行でき、使用が便利で、効率が高い.ただし、アプリケーションが修正する必要がある場合は、ソースコードを修正してから、新しいターゲットファイル(*.OBJ)を再コンパイルして生成してから実行する必要があります.ソースコードがなくても、ターゲットファイルだけが修正するのは不便です.現在、ほとんどのプログラミング言語はコンパイル型です.コンパイラは、ソースプログラムをターゲットプログラムに翻訳して別のファイルに保存します.このターゲットプログラムは、コンパイラから離れて直接コンピュータ上で複数回実行できます.ほとんどのソフトウェア製品はターゲットプログラム形式でユーザーに発行されており、直接実行するだけでなく、その中の技術C、C++、Fortran、Visual Foxpro、Pascal、Delphi、Adaを盗用しにくいようにしています.解釈型言語:解釈型言語の実現では、翻訳器はターゲットマシンコードを生成するのではなく、実行しやすい中間コードを生成する.この中間コードはマシンコードとは異なり、中間コードの解釈はソフトウェアによってサポートされており、ハードウェアを直接使用することはできず、ソフトウェア解釈器は通常、実行効率が低い.解釈型言語で記述されたプログラムは,中間コードを理解できる別の解釈プログラムによって実行される.コンパイラとは異なり、解釈プログラムのタスクは、ソースプログラムの文を実行可能なマシン命令として逐一解釈し、ソースプログラムをターゲットコードに翻訳して実行する必要はありません.解釈プログラムの利点は,文に構文エラーが発生した場合,直ちにプログラマの注意を喚起し,プログラマはプログラム開発中に補正できることである.解釈型Basic言語では、Basicプログラムを実行するために専門の解釈器が必要であり、各言語は実行されてこそ翻訳される.この解釈型言語は実行するたびに1回翻訳されるため,効率が低下する.一般に、動的言語は、Tcl、Perl、Ruby、VBScript、JavaScriptなどの解釈型である.ハイブリッド:Javaは特殊で、Javaプログラムもコンパイルする必要がありますが、直接コンパイルしてマシン言語と呼ぶのではなく、コンパイルしてバイトコードと呼び、Java仮想マシン上で解釈でバイトコードを実行します.PythonもJavaのようなコンパイルモードを採用しており、まずPythonプログラムをPythonバイトコードにコンパイルし、その後、専用のPythonバイトコード解釈器がバイトコードの実行を説明する.(Java仮想マシンのバイトコードの実行はcpuをシミュレートすることに相当し、ruby 1.8は仮想マシンがまだ現れない前に成語法ツリーを解釈することによって実行される.)
個人的には、javaは解釈型の言語だと思います.javaもコンパイルし、コンパイルする必要があるからです.classファイルですが、マシンが認識できる言語ではなく、バイトコードであり、最終的にはjvmの解釈が必要で、各プラットフォームで実行することができます.これはjavaがプラットフォームをまたいでいる理由でもあります.だからjavaはコンパイル型であり、解釈型でもあるが、分類しなければならないなら、概念的な定義から、おそらくjavaは解釈型の言語に帰属すべきである.