システムエンジニアやプログラマーとして働く上で、プログラミングスキルは必須です。
プログラミング言語には多くの種類がありますが、各プログラミング言語の特徴などを調べるときに、専門用語を理解しているとより選びやすくなるでしょう。
そこで本記事では、プログラミングを学習する際に知っておきたい「コンパイラ」と、合わせて理解しておきたい「インタプリタ」や「アセンブラ」との違いについて解説します。
プログラミング学習を始めるための知識として活用してください。
※この記事は現役エンジニアによって監修済みです。
この記事もオススメ
この記事の目次
コンパイラとは
プログラミング言語の学習をする際に、知っておきたい用語の1つが「コンパイラ」です。
まずは、コンパイラが何なのか、どのような役割を果たすものなのかを確認していきましょう。
- コンパイラは人間と機械の言葉をつなぐ役割を持つプログラム
- コンパイラは英語で編集者の意味
コンパイラは人間と機械の言葉をつなぐ役割を持つプログラム
コンパイラは、人間がC言語やJava言語などで書いたプログラムを、機械語へ翻訳する役割を果たします。つまり、人間と機械をつなぐための「プログラム」がコンパイラです。
システム開発やアプリケーション開発で、私たちが利用するプログラミング言語の多くは、人間が読めるように設計されています。コードに英単語が多いのはそのためです。
しかし、機械は「1」と「0」しか理解できませんので、人間が書いたプログラムをそのまま理解して実行することができません。そこで必要となるプログラムが「コンパイラ」です。
コンパイラは、人間の言葉を機械が理解できる言葉へ通訳・編集してくれます。
コンパイラは英語で編集者の意味
コンパイルとは英語表記で「compile」、「編集する」という意味を持っています。そして、コンパイラは英語表記で「compiler」、直訳すると「編集する者」という意味です。
その言葉の意味という観点で考えると、コンパイラは人間が書きやすい言葉や数式で書いたプログラムを、コンピュータが理解して実行できる機械語に翻訳してくれる編集者だといえるでしょう。
この記事もオススメ
コンパイラの構造・仕組み
コンパイラは、プログラミング言語を機械語に編集するために、5つのフェーズで構成されます。
ここでは、コンパイラの構造・仕組みを細分化して確認していきましょう。
- 字句解析
- 構文解析
- 中間コード生成
- 最適化
- コード生成
字句解析
コンパイラはまず、字句解析を行います。字句解析とは、プログラムソースにどのような要素が含まれているのかを”ザっと見る”ことです。
プログラムソースは、コードの区切りである括弧やカンマの記号、命令のキーワードとなる「if」や「while」、また識別子や演算子といったもので構成されています。
このように文字列単位でコードを確認していく字句解析を行い、ソース全体を把握していくのです。
構文解析
字句解析でコード全体を確認したら、次に構文解析を行います。
構文解析では、先ほど字句解析で把握したコード全体から、構文構造になっているまとまりをチェックしていきます。
例えば、分岐構造となるif文や、繰り返しとなるwhile文単位に分けていくということです。
こうすることで、プログラム全体が命令ごとにまとまりはじめます。つまり、プログラム構造が分かってくるフェーズということですね。
中間コード生成
構文が分かったら、中間コードの生成を行います。
中間コードとは文字通り、人間が読めるプログラミング言語と、コンピュータが理解できる機械語の中間に当たる表現です。人間がギリギリ読める言語だといえるでしょう。
わざわざ中間コードを生成するのは、プログラミング言語と機械語の間に大きな隔たりがあり、直接翻訳することが難しいというのが理由の1つです。
誤解を恐れずにいえば、英語を日本語に同時通訳するよりも、一度書き起こして翻訳した方が簡単、というイメージですね。
こうして、中間コード生成を介すことで、プログラムコードの全体像を把握します。
最適化
最適化では、プログラムコードの処理を、より速く実行できるように効率化していきます。
実行時間が短いコードに編集していくことで、コンピューターがより理解しやすくなり、実行が速くなるのです。
例えば、命令実行回数を減らすために、同じ計算命令を削除(データフロー最適化)したり、同じ計算はループの外側で実行(ループ最適化)したりといった方法で最適化されます。
コード生成
最後に行われるのが、コード生成です。
コード生成では、最適化された中間コードの中から、使用する命令や実行順序、またレジスタの割り当てなどを確定して機械語の命令に変換します。
結果、コード生成時に無駄な命令が省かれてコードが短くなり、実行速度が速くなるということです。
また、それぞれのフェーズでは並行してエラーハンドリングが行われていますので、コンパイラがソースコードの矛盾を見つけるとエラーとして返ってきます。
コンパイラ・インタプリタ・アセンブラの違い
コンパイラの説明などに一緒に出てくる用語として、「インタプリタ」や「アセンブラ」があります。
これらは混同しやすい用語ですので、しっかりと区別しながら確認していきましょう。
- コンパイラはソースコードを一度にまとめて翻訳
- インタプリタは命令を1つずつ解釈・実行する
- アセンブラは機械語に近いアセンブリ言語を翻訳する
コンパイラはソースコードを一度にまとめて翻訳
まずはここまで紹介してきたコンパイラです。コンパイラは、プログラムを記述したファイルをまとめて翻訳するものでしたね。
学習段階でも業務でも、プログラミングをする前に、全体像と細かな設計までを完了させてからプログラミングに着手しなければなりません。
しかし、後述するインタプリタ型よりも処理速度が速いという特徴があります。
ソースコードを実行できるファイルへのコンパイルが必要なプログラミング言語を、「コンパイラ型言語」と表現します。C言語やJava言語が代表的です。
この記事もオススメ
インタプリタは命令を1つずつ解釈・実行する
インタプリタは、プログラミングしたソースコードの命令を1つずつ解釈しながら実行する方式です。
コンパイラとは対照的な方式として、合わせて覚えておくとよいでしょう。
インタプリタは少しずつコードを実行していくので、その場ですぐに実行して結果を確認できるという特徴を持っています。
このような実行方法のプログラミング言語を「インタプリタ型言語」と呼びます。
また、記述ミスなどがあった場合には、その命令でプログラムが停止しますので、インタプリタ型言語はコンパイラ型言語よりもデバッグも容易です。
ただし、コンパイラ型に比べて処理速度が遅いという特徴があります。
例えば、近年需要が高まっている「Python」や「Ruby」などがインタプリタ型言語です。
アセンブラは機械語に近いアセンブリ言語を翻訳する
アセンブラは、アセンブリ言語を機械語に翻訳するプログラムのことです。
コンパイラ型言語と対比させるならば、C言語やJava言語に当たるものが「アセンブリ言語」、コンパイルに当たるものが「アセンブル」、コンパイラに当たるものが「アセンブラ」となります。
アセンブリは、機械語に近く、コンピューターへの命令を1対1で記述する言語です。そのため、コンパイラ型言語やインタプリタ型言語と比較すると、ソースコードの量が多くなります。
機械語に近いとはいえ、アセンブリも機械語に変換する必要がありますので、そこで利用するのが「アセンブラ」というプログラムだとイメージしておきましょう。
プログラミング初心者におすすめのコンパイラ型言語は?
コンパイラ型言語はその特性上、大規模開発や複雑なシステム開発でも用いられる、法人からの需要が高い言語です。
需要が高い一方で、基本的な概念や文法が難しく、初心者には学習難易度が高いです。
その中で初心者におすすめのコンパイラ型言語を挙げるとすれば、Javaがおすすめ。
Javaは世界中のシステム開発で採用されているコンパイラ型言語の代表格で、Javaの概念を理解してある程度使いこなせるようになると、他言語への理解も容易に。
学習難易度は高めなものの、コミュニティが活発で学習リソースも豊富にあるので、C言語やC#などと比較すると学習しやすいでしょう。
この記事もオススメ
コンパイラの構成や仕組みを理解することでプログラミング言語の選択にも役立つ
コンパイラは、プログラミング言語を機械語へ翻訳するための重要なプログラムです。
コンパイラと混同しやすい「インタプリタ」や「アセンブラ」も合わせて区別することで、構築するシステムに合ったプログラミング言語の選択にも役立つでしょう。
また、学びやすさも異なりますので、それぞれの違いを理解するとプログラミング学習のやりやすさも変わってきます。
この記事もオススメ
はじめての転職、何から始めればいいか分からないなら
「そろそろ転職したいけれど、失敗はしたくない……」そんな方へ、テックキャンプでは読むだけでIT転職が有利になる限定資料を無料プレゼント中!
例えばこのような疑問はありませんか。
・未経験OKの求人へ応募するのは危ない?
・IT業界転職における“35歳限界説”は本当?
・手に職をつけて収入を安定させられる職種は?
資料では、転職でよくある疑問について丁寧に解説します。IT業界だけでなく、転職を考えている全ての方におすすめです。
「自分がIT業界に向いているかどうか」など、IT転職に興味がある方は無料カウンセリングにもお気軽にお申し込みください。