コンパイラ言語について今日は紹介するよ!
- コンパイラ言語ってなに?
- コンパイラ言語の種類は?
- コンパイラ言語とインタプリタ言語の違いは?
などの疑問をお持ちの方の悩みを解決できる記事になっています!
コンパイラ言語、インタプリタ言語とよく聞きますが違いがわかりづらいという人も多いのではないでしょうか。
この記事では、コンパイラ言語の特徴、コンパイラ言語の種類、コンパイラ言語とインタプリタ言語の違いについて解説します!
記事を読めば、コンパイラ言語の理解が深まりますよ!
- プログラミングを始めたばかりの人
- コンパイラ言語とインタプリタ言語の違いがわからない人
- コンパイラ言語の特徴を知りたい人
目次
コンパイラ言語とは
コンパイラ言語とは、プログラムを実行する前に「コンパイル」を行うプログラミング言語です。
コンパイルとは、人が書いたソースコードをコンピュータが理解できる言葉に置き換える作業のことを言います。
なぜ、コンピュータが理解できるように置き換えないといけないのでしょうか。
私たちが使うプログラミング言語は、「人が理解できる」ように設計されています。プログラミング言語を用いてソースコードを書き、それをコンピュータに命令として伝えます。
しかし、コンピュータはプログラミング言語を理解することができません。コンピュータが理解できるのは、「機械語」と呼ばれる形式のデータのみです。そのため、コンピュータに命令を送るには「プログラミング言語」を「機械語」にする必要があります。
この一連の作業をコンパイルと呼びます。
コンパイラ言語は、このコンパイルをプログラムの実行前に行います。そしてコンパイルした結果をコンピュータに読み込ませて、プログラムの処理を実行します。
コンパイラ言語がプログラムを実行する順番を見てみましょう。
- コードを書く
- コンパイルする
- 機械語のファイルが生成される
- 実行する
「1.コードを書く」では、プログラミング言語でプログラムを書きます。
「2.コンパイルする」で、プログラミング言語を機械語に翻訳します。
「3.機械語のファイルが生成される」では、コンパイルした結果のファイルが作られます。
「4.実行する」では、コンパイルされた結果をコンピュータに読みませて、プログラムを実行します。
コンパイラ言語は、「2.コンパイルする」が通らないとエラーが出続けるため、プログラムをいつまでも実行できません。そのため、学習コストが高いプログラミング言語と言われています。
コンパイラ言語とインタプリタ言語の違いは
コンパイラ言語が「プログラムの実行前」にコンパイルを行うのに対して、インタプリタ言語は「プログラムの実行時」にコンパイルを行います。
また、インタプリタ言語はソースコードを一行ずつ読み取って、コンパイルを行います。そのため、コンパイラ言語よりも実行速度が遅いという特徴があります。
インタプリタ言語がプログラムを実行する順番を見てみましょう。
- コードを書く
- 一行ずつコンパイルされる
- 実行する
コンパイラ言語では自分でコンパイル作業をする必要がありましたが、インタプリタ言語ではプログラムが実行されると同時にコンパイルが走ります。
そのため、プログラムの実行が簡単に行えるというメリットがあります。
コンパイラ言語、インタプリタ言語の違いをまとめると次のようになります。
特徴 | インタプリタ言語 | コンパイル言語 |
コンパイル方式 | 一行ずつ機械語に翻訳 | 一度に全てを機械語・中間言語に翻訳 |
コンパイルするタイミング | プログラムの実行時 | プログラムの実行前 |
実行速度 | 遅い | 速い |
学習コスト | 低い | 高い |
インタプリタ言語についてはこちらの記事で解説しているので確認しましょう。
スクリプト言語とは?コンパイラ言語・インタプリタ言語との違いをわかりやすく解説!JIT コンパイラとは
コンパイラ言語は、ソースコードを一括でコンパイルします。一方、インタプリタ言語は一行ずつ行います。
この中間のような処理をするのが、「JITコンパイラ」と呼ばれるものです。
JITコンパイラは、機械語に一気に変換するのでなく、中間言語に変換したあとに一行ずつコンパイルして実行する形式のコンパイラです。
JITコンパイラがプログラムを実行する順番を見てみましょう。
- コードを書く
- コンパイルする
- 中間言語のファイルが生成される
- 一行ずつコンパイルされる
- 実行する
このように見ると手間を感じるかもしれませんが、JITコンパイラは、中間言語のファイルを作ることでOSやCPUに依存しない環境で実行できるメリットがあります。
機械語にコンパイルされたファイルはOSに依存してしまうのに比べると、柔軟性が高いと言えるでしょう。
JITコンパイラは、「.NET」や「Java」で採用されています。
コンパイラ言語のメリット
コンパイラ言語のメリットを見てみましょう。
- 実行速度が速い
- バグに気づきやすい
- 中規模・大規模開発に向いている
実行速度が速い
コンパイラ言語はプログラムの実行前に機械語に一括でコンパイルするので、一行ずつ行うインタプリタ言語と比べると、実行速度が速いのが特徴です。
また、CPUにかかる負荷も小さくなるため大量のデータ処理が必要となるシステムに適しています。
バグに気づきやすい
機械語にコンパイルされる際に同時にデータの整合性や妥当性をチェックします。
インタプリタ言語は実行時にこのチェックを行うため、実際に動かしてからバグが発見されることが多いです。
コンパイラ言語は、プログラム実行前にチェックをするため早期にバグを発見できるメリットがあります。
中規模・大規模開発に向いている
上記の「実行速度が速い」「バグに気づきやすい」という理由から、コンパイラ言語は中規模・大規模開発に適しています。
データに型を定義できるため、より強固なシステム開発が可能です。
コンパイラ言語のデメリット
一方、コンパイラ言語にもデメリットがあります。
- 実行に手間がかかる
- 学習コストが高い
実行に手間がかかる
インタプリタ言語に比べると、コンパイラ言語は実行するのに手間がかかります。
先ほどの実行手順をもう一度見てみましょう。
- コードを書く
- コンパイルする
- 機械語のファイルが生成される
- 実行する
コードを書いてもコンパイルが通らなければプログラムを実行できません。また、コンパイルする時間も要します。
この仕組みは安全性を高められる反面、素早い実行はインタプリタの方が向いているでしょう。
学習コストが高い
コンパイラ言語は、初心者にとって学習コストが高いです。
なぜなら、プログラミング以外にも開発環境の整備やコンパイラのインストールなど手間がかかるからです。
インタプリタ言語は、コードを書いてすぐ実行できます。
そのため、インタプリタ言語からプログラミングを始める人が多いでしょう。
コンパイラ言語の種類
それでは、代表的なコンパイラ言語を見てみましょう。
開発の現場で使われる主なコンパイラ言語は次の通りです。
- C言語
- Go言語
- Java
C言語
C言語は、1972年に開発された代表的なコンパイラ言語です。
C言語はメモリ管理や、論理演算など、ハードウェアに関わる処理が得意なのが特徴です。
今現在でもC言語は広く使われ、次のようなメリットがあります。
- 汎用性が高い
- 実行速度が速い
C言語は、TOIBE指標のような人気や成長の度合いからプログラミング言語を測る指標のほとんどで、 トップ10内にランクインし、今でも人気のあるプログラミング言語です。
Go言語
Go言語は、2009年にGoogleが発表したオープンソースのコンパイラ言語です。
Go言語は、静的型付け言語でパフォーマンス性に優れているので、大規模な開発やマイクロサービスアーキテクチャの実装に広く使われます。
Go言語の最大の特徴は、シンプルでわかりやすいことです。Go言語の思想は「シンプルな機能を組み合わせて大きなプログラム作る」ことです。そのため、コンパイラ言語でありながらも言語仕様が簡潔で、直感的な設計になっています。
また、クロスプラットフォームに対応しており、異なるOS間でも実行できるファイルをコンパイル可能です。
Go言語の注目度は高く、これから活躍が期待されるサーバーサイドのプログラミング言語です。
今、大注目のGo言語とは?何ができるのか、特徴、勉強方法を初心者にわかりやすく解説!Java
Javaは、1995年にSun Microsystemsからリリースされたプログラミング言語です。
オブジェクト指向やガベージコレクション、マルチスレッドに対応しています。
Javaは、JITコンパイラを用いてJavaバイトコードと呼ばれる中間言語をコンパイルします。JavaバイトコードはJVMというJava仮想マシン上で実行されます。そのため、異なるOS間でもJVM環境があればプログラムを実行することができます。
まとめ
この記事では、コンパイラ言語についてまとめました。
最後にもう一度内容を確認しましょう。
- コンパイラ言語は、プログラムの実行前に一括でコンパイルするプログラミング言語
- インタプリタ言語は、一行ずつコンパイルする
- コンパイラ言語は実行速度が速く、バグに気付きやすい
- ただ、学習コストが高く習得は難しい
- 主なコンパイラ言語は、「C言語」「Go言語」「Java」
コンパイラ言語は、難易度が高いので初心者には難しいかもしれません。しかし、その分安全性の高いシステム開発や、大規模アプリケーションに向いています。
特に、Go言語は最も注目されているコンパイラ言語です。
C言語に劣らない実行速度なのに、シンプルなコードを書けるからですね。
バックエンドエンジニアを目指す人はチャレンジしてみましょう!