本ページはプロモーションが含まれています

IT全般

会話で学ぶコンパイル

トム

・都内自社開発IT企業勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

コンパイルとは何か

プログラムの「コンパイル」って、結局なにをしてるの?

なんか「実行できる形にする」って聞くけど、ふわっとしてて。

いいところに気づいたね。

まず言葉の出自から行こう。

「compile」はラテン語の compilare が語源で、「寄せ集める」「まとめ上げる」という意味なんだ。

寄せ集める? プログラムを?

そう。

人間が書いたバラバラな“意味のかけら”を、機械が理解できる形に組み立て直す行為、それがコンパイル。

人間語と機械語の決定的な断絶

でもさ、JavaとかPythonって、人間でも機械でも読めそうじゃない?

そこが錯覚ポイント。

CPUが本当に理解できるのは、0と1だけ。

しかも決まった並び方じゃないと意味すら持たない。

たとえばこんな感じ:

10101010 00001111 11001010

これは人間にはただの呪文。でもCPUには「命令」になる。

じゃあJavaのコードは?

完全に人間側の都合で書かれた文章。

読みやすさ・意味のまとまり・保守性のための言語。

だから間に「翻訳者」が必要になる。

コンパイルとは「翻訳+検証+再構築」

翻訳ってことは、Google翻訳みたいなもの?

方向性は近いけど、精度は段違いに厳しい。

コンパイルはだいたい次のことをやっている。

  1. 文法チェック 文として正しいか(セミコロン忘れてない?)
  2. 意味解析 変数は存在する?型は合ってる?
  3. 最適化 無駄な処理を減らす(人間より几帳面)
  4. 機械語への変換 CPUが理解できる命令列に変換

この一連をまとめて「コンパイル」と呼ぶ。

なぜ“実行”と“コンパイル”は別なのか

じゃあ、実行って何してるの?

コンパイルは「設計図を完成させる」工程。

実行は「その設計図どおりに動かす」工程。

建築で言えば、

  • コンパイル → 建築設計図を作る
  • 実行 → 実際に建物を建てる

設計図が壊れてたら、建築すら始まらない。

Javaはちょっと変わり者

Javaってコンパイルも実行もしてるよね?

鋭い。

Javaは一度「中間言語(バイトコード)」に変換する。

.java → .class → 実行

この .class は「どのCPUでも読める共通語」みたいなもの。

だから「Write once, run anywhere(一度かけばどこでも動く)」が成立する。

じゃあコンパイルって結局なに?

結局コンパイルってなんだっけ?

一言で言うと

人間の意図を、機械が誤解しない形にまで厳密化する作業

ここが重要で、

コンパイラは「空気を読まない」。

  • 曖昧さゼロ
  • 推測しない
  • 書いてないことは存在しない

だからエラーは冷たく正直になるってわけ

哲学的に言うと

なんか急に深いな…。

プログラミングって、実は「思考の翻訳」なんだよ。

人間は

「まあこういう感じで…」

って曖昧に考える。

でも機械は

「0か1か。はいかいいえか」

しか受け取らない。

コンパイルは、曖昧な思考を、世界で一番厳密な言語に落とす儀式になるんだ。

まとめ

  • コンパイルの語源は「寄せ集める」
  • 人間の言葉を機械語へ変換する工程
  • 文法・意味・最適化・変換を一括で行う
  • 実行とは別物
  • 思考を厳密化する行為そのもの

コンパイルを理解すると、

「なぜこのエラーが出るのか」じゃなく

「コンパイラは何を誤解したのか」が見えてくる。

これは、コードを読む力そのものを底上げする視点になる。

  • この記事を書いた人
  • 最新記事

トム

・都内自社開発IT企業勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

-IT全般