2.1.6 코드 생성
생각할 수 있는 모든 최적화를 사용자 프로그램에 적용했다면 이제 마지막으로 머신이 실제로 작동시킬 수 있는 형태로 바꿀 차례다. 다시 말해, 코드 생성(generating code, 줄여서 코드젠(code gen))에서 ‘코드(code)’란 일반적으로 CPU가 실행하는 원시 어셈블리와 비슷한 명령어(assembly-like instruction)를 나타내며, 인간이 읽을 수 있는 종류의 ‘소스 코드(source code)’가 아니다.
드디어 반대편으로 하산하는 백엔드 지점에 왔다. 여기부터는 코드 표현이 마치 거꾸로 진화하는 것처럼 점점 더 원시적으로(primitive) 바뀐다. 단순하기 짝이 없는 머신이 알아듣는 모습에 점점 가까워지는 것이다.
여기서 결정을 해야 한다. 실제(real) CPU 명령어를 생성할까, 아니면 가상(virtual) CPU 명령어를 생성할까? 실제 기계어를 생성하면 OS가 칩에 직접 로드할 수 있는 실행 파일이 나온다. 네이티브 코드(native code)는 번개만큼 빠르지만 이 코드를 생성하는 작업량은 만만찮다. 요즘 컴퓨터 아키텍처는 명령어 뭉치와 복잡한 파이프라인, 그리고 세월의 짐6을 747 여객기의 화물칸을 채울 만큼 갖고 있다.