コンパイラ
何らかのプログラミング言語で記述されたプログラムをコンピュータが実行可能なコードに変換し、その後実行するする言語システムを一般にコンパイラ言語と呼ぶ。コンパイラは、その中でコード変換を行う中核部分もしくは、その技術の名称である。
一般に人間が理解しやすい表現形式を持つ言語を「高級言語」と呼ぶが、この高級言語をコンピュータが実行するには、大きくコンパイラ方式とインタープリタ方式の2つがある。前者は、ソースプログラムを読みこみ、実行可能な機械語からなるバイナリプログラムを出力し、その後実行を行う。インタープリタ方式では、ソースプログラムを読みこみながら、解釈を行い、直接実行を行う。一般にコンパイラ言語のほうが実行効率がよいとされているが、中間言語方式など、両者の方法を取り入れたものなどもあれば、言語仕様によってはインタープリタでも高速な実行が可能な場合もある。

コンパイラ
コンパイラとは、特定のプログラミング言語で記述されたソースコードを読み込み、ターゲットとなるコンピュータ、あるいは、バーチャルマシンが直接実行できる命令語に変換するソフトウェアのことである。
ソフトウェア開発に用いられるプログラミング言語には、アセンブラ言語のような低水準のもの(低級言語)から、より人間に近い表現が可能であるFortran、COBOL、C言語、C++、Pascal、Java、C#といった高水準の言語(高級言語)まで多種である。高級言語でプログラムを作成した場合、そのソースコードは、計算機で直接実行することはできない。コンピュータに実行を指示するためには、CPUが解釈できる機械語で記述された実行プログラムを、あらかじめ記憶装置に格納しておいてから計算機の動作を開始させる必要がある。コンパイラは、あらかじめ高級言語のソースコードを読み込み、実行対象となる計算機のCPUが解釈可能な機械語へと変換するために用いられる。
コンパイラを用いてソースコードを機械語に変換する処理そのものは、コンパイルと呼ばれる。
コンパイラが、最終ターゲットであるCPU固有の機械語を出力する場合、そのコンパイラは特にネイティブコンパイラと呼ばれ、その処理はネイティブコンパイルと呼ばれる。対して、Java仮想マシンのような仮想的な論理計算機をターゲットにしてコンパイルを行うようなコンパイラは、中間言語コンパイラと呼ばれる。中間言語コンパイラにより出力された、中間言語のプログラムを実行するのは、ネイティブな計算機ではなく、Java仮想マシンのようなインタープリタということになる。インタープリタが実行時に、中間言語の一部を部分的にネイティブの機械語に変換してから実行する場合は、動的コンパイル、あるいはジャストインタイムコンパイルと呼ばれる。動的コンパイルに対して、通常のコンパイルは、実行に先立ってあらかじめコンパイルしておくという意味で、事前コンパイル(プリコンパイル)と呼ばれる。
プログラミング言語のうち、高級言語を用いて作成されたプログラムは、特定のターゲットCPUに依存しない。コンパイル時にターゲットCPU向けのコンパイラを用いることにより、特定CPU向けの実行コードを得ることができるため、最終的に任意の計算機で実行できることになる。なお、中間言語方式のコンパイラの場合、コンパイル作業自体は1回だけ行えば、同じ中間言語プログラムをさまざまな計算機上で実行することができる。この場合、コンパイラは1種類で済むものの、コンパイル結果の中間言語プログラムを解釈実行するインタープリタ、あるいは仮想計算機が、ターゲットとなる計算機の種類の分だけ用意する必要がある。
ソフトウェアの規模がある程度以上となる場合、ソフトウェアをモジュールに分割して、モジュールごとにコンパイルを行うこともある。この作業は、特に分割コンパイルと呼ばれる。分割コンパイルを行った場合、その出力としてオブジェクトコードと呼ばれるモジュール単位の出力が得られる。実行に際しては、出力されたオブジェクトコードを一つにまとめ上げ、実行形式のファイルを作成する必要がある。このような操作がリンクと呼ばれる。リンクにより、モジュールごとに記述されている変数やコードが相互に参照できるように相対アドレスの解決を行う。
なお、世界で最初に実用化されたコンパイラは、1957年に開発されたFortranコンパイラである。1960年には、複数のアーキテクチャに対応したCOBOLコンパイラが開発された。1962年には、LISP言語で記述されたLISPコンパイラで自分自身をコンパイルするセルフホスティングコンパイラが初めて開発されている。
コンパイラ
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/09/09 21:01 UTC 版)
コンパイラ(英: compiler)は、高水準言語で書かれたコンピュータプログラムを、 コンピュータが実行や解釈できる形式に、一括して(※[1])変換するソフトウェア[2]。
注釈
- ^ この本の表紙には赤いドラゴンの絵が描かれているのでドラゴンブックと呼ばれている。
- ^ オブジェクトコードの記述に使われる言語は、要は、その言語から最終的に機械語に翻訳する道筋が1筋(1本)でもあるものであればよい。理論上、機械語にたどり着くまでに途中で何種類もの言語にコンパイル(翻訳)する必要があっても、ともかく最終的に機械語に翻訳するまでの道筋が1本あれば良い。オブジェクトコードの記述に使われる言語は必ずしもアセンブリ言語や機械語でなくてもよい。たとえばC++で書かれたオブジェクトコードを出力するコンパイラやC言語で書かれたオブジェクトコードを出力するコンパイラもある。それぞれ、C++を機械語に、あるいはC言語を機械語に変換するコンパイラを別途用意すれば最終的にCPUが実行できる機械語に変換できる。よくあるのはアセンブリ言語で書かれたオブジェクトコードを出力するコンパイラである。アセンブリ言語で書かれたプログラムも通常そのままでは実行できないが、アセンブラを使ってやはりCPUが実行できる機械語に変換できる。
- ^ 最終的に出力されるターゲットプログラムは、機械語やアセンブリ言語で記述したものが多いが、それらに限るわけではなく、中間コードや高級言語のプログラムを出力するコンパイラもある。
出典
- ^ a b (※)コンパイラの定義文にわざわざ「一括して」という言葉を含めることが多いのは、インタプリタと対比するためである。「一括して」を入れないとインタプリタまで含んでしまい、定義文としては落第点ものとなる。Merriam Websterの英文の定義文でも、やはり「translates an entire set of instructions」[1]と、「命令群(の一部分ではなく)全部を」と明記している。
- ^ “コンパイラとは - IT用語辞典”. IT用語辞典 e-Words. 2023年2月22日閲覧。
- ^ a b c d Alfred V. Aho, Compilers, Principles, Techniques, and Tools. Reprinted with corrections March, 1988.(Copyright 1986,Bell Telephone Laboratories, Incorporated), pp.1-2. (Chapter 1.1 "COMPILERS"の節の説明)
- ^ ASCII.jpデジタル用語辞典,デジタル大辞泉,IT用語がわかる辞典. “オブジェクトコード(おぶじぇくとこーど)とは”. コトバンク. 2020年4月26日閲覧。
- ^ 例えばCPUやGPUなど。
- ^ “分割コンパイル”. www3.nit.ac.jp. 2020年4月27日閲覧。
- ^ プログレッシブ英和中辞典「compile」
- ^ Oxford Dictionary; Produce (a list or book) by assembling information collected from other sources 「何らかの情報源から集めた情報を元にして、一覧や本を作りだす」
- ^ プログレッシブ英和中辞典「compiler」
- ^ 大辞泉「コンパイラ」
- ^ Oxford Dictionary; compiler: A person who produces a list or book by assembling information or written material collected from other sources.
- ^ bit 編集部『bit 単語帳』共立出版、1990年8月15日、82頁。ISBN 4-320-02526-1。
- ^ “CSAIL Publications”. publications.csail.mit.edu. 2020年6月16日閲覧。
- ^ “https://www.246.dk/” (デンマーク語). 2020年6月16日閲覧。
- ^ 2020年4月13日 8分. “コンパイラとインタプリタの違いは?言語の違いを分かりやすく解説!”. じゃぱざむ. 2020年4月27日閲覧。
- ^ “インタプリタとコンパイラ”. nyumon-info.com. 2020年4月27日閲覧。
- ^ a b Alfred V. Aho, Compilers, Principles, Techniques, and Tools. 1988., pp.10-15. 「1.3(1章3節) THE PHASES OF A COMPILER」
- ^ “コンパイラの構造を解説 | Shinta's Site”. www.gadgety.net. 2020年4月27日閲覧。
- ^ “コマンド:lex: UNIX/Linuxの部屋”. x68000.q-e-d.net. 2020年4月27日閲覧。
- ^ “パーサジェネレータとは - Weblio辞書”. www.weblio.jp. 2020年4月27日閲覧。
- ^ “コンパイラの入り口、「字句解析」のための文字列操作 (1/3)”. @IT. 2020年4月27日閲覧。
- ^ a b コンパイラの構成と最適化. Nakata, Ikuo, 1935-, 中田, 育男, 1935-. Tōkyō: Asakurashoten. (2009). ISBN 978-4-254-12177-3. OCLC 675837876
- ^ “プリプロセッサとは - IT用語辞典”. IT用語辞典 e-Words. 2020年4月27日閲覧。
- ^ “抽象構文木”. home.a00.itscom.net. 2020年4月27日閲覧。
- ^ “VU - exp. - compiler-general”. www.is.s.u-tokyo.ac.jp. 2020年4月27日閲覧。
- ^ MaryCore. “知っておいて損はない「コンパイラ最適化」の数々”. MaryCore 言語知能総合研究所. 2020年4月27日閲覧。
「コンパイラ」の例文・使い方・用例・文例
- 特定のコンピュータで実行の用意ができているコンパイラーの機械語出力
- Cで書かれたプログラムのコンパイラ
- FORTRANで書かれたプログラムのコンパイラ
- LISPに書かれたプログラムのためのコンパイラ
- パスカルで書かれたプログラムのコンパイラ
- コンパイラは、ソースコードをオブジェクトコードに変換するために、ソースコードを解析しなければならない
- (オペレーティング・システム、コンパイラ、ユーティリティー・プログラムのような)コンピュータ操作のある側面を制御するプログラム
- コンパイラーという,コンピューターのプログラム
- コンパイラー言語という,コンパイラーで機械コードに翻訳される人間にわかりやすい形で書かれたプログラム言語
コンパイラと同じ種類の言葉
- コンパイラのページへのリンク