1. はじめに
エンジニアとして3年が経過しようとしている中、技術を使ってより高度な問題解決をしていくためには、フレームワークや言語に依存しない基礎となる知識が必要だと感じたため、CSを勉強し直しています。
その学習内容を備忘録として発信します。
今回はプログラムについてです。
2. プログラムとは
プログラムとは、コンピュータに対する「命令」と「データ」の集合体です。コンピュータはこの「命令」と「データ」を解釈して定められた処理を実行します。
3. プログラムが実行されるまで
プログラムを実行するには大きく分けて、「コンパイラを使った実行」と「インタプリタを使った実行」の2つの分けられます。
コンパイラとインタプリタの違い
項目 | コンパイラ | インタプリタ |
---|---|---|
実行前の処理 | ソースコード全体を事前に機械語(バイナリ)に変換する | ソースコードを1行ずつ解析・実行する |
実行可能ファイル | 生成される(バイナリファイルとして保存される) | 生成されない(逐次実行される) |
実行速度 | 高速(事前にコンパイル済みのため) | 低速(実行時に逐次解析するため) |
エラー検出 | コンパイル時にすべてのエラーを検出 | 実行中にエラーが発生した時点で停止 |
OSへの依存 | 高い(コンパイルしたバイナリは特定のOS・CPU向けに作られる) | 低い(インタプリタが異なるOSでもソースコードを解釈して実行できる) |
使用例 | C, C++ など | Python, JavaScript など |
OSへの依存の違い(分かりやすい説明)
項目 | コンパイラ | インタプリタ |
---|---|---|
OSへの依存 | 高い(コンパイルしたバイナリは特定のOS・CPU向けに作られる) | 低い(インタプリタが異なるOSでもソースコードを解釈して実行できる) |
コンパイラの場合(OS依存が高い)
コンパイラは、特定のOSやCPU向けに機械語へ変換します。そのため、Windows用にコンパイルしたプログラムはLinuxでは動かないことが一般的です。
→ もし異なるOSで動かしたい場合は、そのOS向けに再コンパイルする必要があります。
インタプリタの場合(OS依存が低い)
インタプリタは、OSごとに用意された実行環境(インタプリタ)を使って、ソースコードを解釈・実行します。そのため、同じPythonやJavaScriptのスクリプトは、WindowsでもLinuxでもMacでも、対応するインタプリタがあれば動作します。
→ プログラムをそのまま別のOSで実行しやすいのがメリットです。
具体例
-
コンパイラ型のC言語プログラム
- Windows用にコンパイルしたCプログラム(
.exe
)は、Linuxでは動かない。 - Linuxで動かすには、Linux用にコンパイルし直す必要がある。
- Windows用にコンパイルしたCプログラム(
-
インタプリタ型のPythonスクリプト
- WindowsのPythonでも、MacのPythonでも、同じスクリプト(
.py
)を実行できる。 - ただし、インタプリタ(Python)がインストールされていないと実行できない。
- WindowsのPythonでも、MacのPythonでも、同じスクリプト(
つまり、コンパイラ型のプログラムはOSやCPUに依存しやすく、インタプリタ型のプログラムはOSをまたいで動作しやすいという違いがあります。