【仕組み解説】コンパイラはどうやってソースコードを実行ファイルに変換しているのか — コンパイルの裏側を図解
一気に翻訳するの?それとも段階があるの?
大きく分けて4段階あるよ。字句解析→構文解析→最適化→コード生成の順番で処理されるんだ。料理に例えると、材料を切る→レシピ通りに並べる→無駄を省く→実際に調理する、みたいな流れだね。
字句解析って何をするの?
なるほど!じゃあ構文解析は何をするの?
ASTって聞いたことある!そのあとの「最適化」って何をするの?
賢いんだね!最後のコード生成は?
最適化されたASTから、CPUが直接実行できる機械語(0と1の列)を生成する工程だよ。x86やARMなど、ターゲットのCPUアーキテクチャに合わせた命令を出力するんだ。ここでようやくコンピュータが理解できる形になるんだね。
JavaとかJavaScriptは「JITコンパイル」って聞くけど、普通のコンパイルと何が違うの?
コンパイルエラーとランタイムエラーって何が違うの?
コンパイルエラーは翻訳の段階で見つかるミスで、文法ミスや型の不一致なんかが該当するよ。ランタイムエラーは実行してみないとわからないエラーで、ゼロ除算やnull参照が代表例だね。コンパイルエラーは「レシピの書き方がおかしい」、ランタイムエラーは「レシピ通りに作ったけど材料が足りなかった」みたいな違いだよ。
コンパイルエラーで止まってくれる方がありがたいんだね!
いろんな言語が同じエンジンを使ってるなんて面白いね!