더북(TheBook)

2.1.6 코드 생성

생각할 수 있는 모든 최적화를 사용자 프로그램에 적용했다면 이제 마지막으로 머신이 실제로 작동시킬 수 있는 형태로 바꿀 차례다. 다시 말해, 코드 생성(generating code, 줄여서 코드젠(code gen))에서 ‘코드(code)’란 일반적으로 CPU가 실행하는 원시 어셈블리와 비슷한 명령어(assembly-like instruction)를 나타내며, 인간이 읽을 수 있는 종류의 ‘소스 코드(source code)’가 아니다.

드디어 반대편으로 하산하는 백엔드 지점에 왔다. 여기부터는 코드 표현이 마치 거꾸로 진화하는 것처럼 점점 더 원시적으로(primitive) 바뀐다. 단순하기 짝이 없는 머신이 알아듣는 모습에 점점 가까워지는 것이다.

여기서 결정을 해야 한다. 실제(real) CPU 명령어를 생성할까, 아니면 가상(virtual) CPU 명령어를 생성할까? 실제 기계어를 생성하면 OS가 칩에 직접 로드할 수 있는 실행 파일이 나온다. 네이티브 코드(native code)는 번개만큼 빠르지만 이 코드를 생성하는 작업량은 만만찮다. 요즘 컴퓨터 아키텍처는 명령어 뭉치와 복잡한 파이프라인, 그리고 세월의 짐6을 747 여객기의 화물칸을 채울 만큼 갖고 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.