
Crafting Compilers
Crafting compilers Compilers 이 포스팅 및 앞으로 쓰게 될 시리즈는 compiler가 무엇인지, 어떻게 만들어지는지, 그리고 직접 compiler를 만드는 방법을 설명하는 시리즈가 될 것입니다. Compiler는 (어느 정도는) 복잡한 프로그램으로, 사람이 작성한 high-level 프로그램(주로 English 형태로 존재하는)을 컴퓨터가 이해할 수 있는 binary 형식으로 변환합니다. Compiler engineering은 이러한 변환 과정을 어떻게 설계할 것인지 결정하는 일입니다. 우선 “프로그램"이 무엇인지, 그리고 어떻게 생겼는지부터 생각해보겠습니다. 저는 프로그램을 하드웨어가 실행해야 하는 명령어들의 순서라고 정의할 수 있다고 생각합니다. 가장 낮은 수준에서는 프로그램은 단순히 ‘1’과 ‘0’으로 이루어진 명령어들의 시퀀스입니다. 프로그램이 표현되던 초기 형태 중 하나는 IBM 360 같은 컴퓨터에서 사용되던 assembly language였습니다. 과거의 프로그래머들은 하드웨어 명령어를 직접 작성하여, 우주 로켓의 궤적 계산이나 은행 계좌 관리 같은 아주 중요한 프로그램들을 만들었습니다. 이러한 명령어들은 컴퓨터가 각 단계에서 무엇을 해야 하는지를 직접 표현했으며, 프로그래머는 컴퓨터가 가진 모든 하드웨어 디테일을 이해해야 했습니다. Register usage, memory state, 기타 모든 하드웨어 세부 사항을 직접 계산해야 했고, 잘못 계산하면 프로그램이 오작동하거나 심각한 문제가 발생할 수 있었습니다. ...