はじめに
プログラミング言語は大きく「コンパイラ言語」と「インタプリタ言語」に分類されます。
それぞれの特性を理解することで、目的に合った言語を選ぶことができます。
本記事では、その違いをわかりやすく解説します。
コンパイラ言語とは?
コンパイラ言語は、ソースコードを実行前に機械語に変換(コンパイル)する言語です。
C言語、Java、Go言語などがコンパイラ言語にあたります。
特徴1. 事前コンパイル
コンパイラ言語は一度コンパイルすれば、高速に実行が可能です。
プログラムを事前に機械語にしたり、機械が読みやすく最適化しておくため、
作成したプログラムを動かす際の変換処理がなくなり機械側の処理負担が減ります。
この結果、高速に実行させることができるわけです。
特徴2. エラーチェックが事前に可能
要するにプログラムを実行する前に間違いに気づけるということです。
コンパイラ言語は間違っていたら一貫して動かないんです。
これによって、バグを事前に防げたりリリースの前に予期せぬエラーを防ぐことができるわけです。
身近なものに例えると(コンパイラ言語編)
身近なものに置き換えて考えてみると、書籍などでしょうか。
海外の書籍を読む際、多くの方は日本語に翻訳されたものを書店で買って読むと思います。
基本的には公正がなされて、ぐちゃぐちゃな日本語になっていることはないですよね。
このような形でソースコードを機械語にしたファイル(バイナリファイル)を作成しておき、
何かの処理要求が来たらすぐに対処できるように準備しておいてあげるのがコンパイラ言語です。
インタプリタ言語
インタプリタ言語は、コードを一行ずつ逐次実行する言語です。
Python、JavaScript、PHPなどがインタプリタ言語にあたります。
特徴1. 即時実行
1行ずつ実行をしてくれるので、書いたスクリプトを直接実行することができます。
例えば、JavaScript は開発者ツールで直接コードを実行できますよね。
あんな感じでわざわざコンパイルしてバイナリファイルを作成してという手順が必要ないわけです。
特徴2. 移植性が高い
要するにどんな環境(OS)でも同じファイルで基本的に動きます。
先ほどの例にも挙げましたが、JavaScript の検証ツールはブラウザ(ChromeやFirefoxなど)が標準で持ち合わせているものです。
そのため、各環境でブラウザさえ動いてくれれれば、作成したコードを一行ずつ読み込んで実行してくれるのです。
移植性についてGo言語でちょっとだけ補足
Go言語では、実行ファイルを作るときにOSごとに形式の異なるファイルを作る必要があったりします。
例えば以下のようなコードがあって、
// === hello.go ===
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
このプログラムをコンパイルすると、OSで以下のような違いが出てきます。
- Windows 環境:
hello.exe
という実行ファイルが作成される - Linux 環境:
hello
という実行ファイルが作成される
こんな感じでコンパイルした実行ファイルは環境ごとに作り直さないと動かない(移植性が低い)というわけです。
身近なものに例えると(インタプリタ言語編)
ちょっとニュアンスが違うかもしれませんが、英語の長文問題とかでしょうか。
問題を解くために必要な英文を一行ずつ読んで内容を理解し、問題を解けるように準備をする。
私自身はこんなざっくりとした概要で理解しています。
すでに翻訳されたものが渡されているインタプリタ言語の方が実行速度が速いというイメージはついたでしょうか?
「最初から自分の読める言語で用意されている」、「自分で翻訳しながら読み進めていく」の違いです。

どちらを使うべきか?
一般的に以下の使い分けが良いかと思います。
- コンパイラ言語: 「高速な処理」「安定性」を求めたいとき
- インタプリタ言語: 「開発スピード」「柔軟性」を求めたいとき
具体的に見ていきましょう。
コンパイル言語が向いているケース
基本的には高速な処理が求められるもの思って貰えれば OK。
以下のようなケースで利用して見ると良いのではないでしょうか。
- Webサーバやバックエンド開発
- ゲーム開発
- 組み込みシステム・IoT
- 大規模システム開発
インタプリタ言語が向いているケース
素早く開発したり、柔軟にコードを修正したいときにはこちらです。
具体的には以下のケースで検討してみましょう。
- Webアプリ、フロントエンド開発
- データ分析、機械学習
- スクリプト、自動化ツール
- プロトタイピング(とりあえず作ってみる)
まとめ
今回はコンパイラ言語とインタプリタ言語について解説してみました。
特徴を理解して「自分の目的にあった言語」を使う一助になってくれたら幸いです。
最後まで目を通していただき、ありがとうございました。
コメント