더북(TheBook)

학계에는 객체 지향 언어를 얕잡아보는 사람들이 있지만, 사실 객체 지향 언어는 언어를 만드는 일에도 널리 쓰이고 있다. GCC와 LLVM도 다른 대부분의 자바스크립트 가상 머신(Javascript virtual machine)처럼 C++로 개발됐다. 객체 지향 언어는 이제 공용어나 마찬가지라서, 언어 개발용 도구와 컴파일러를 동일한 언어로 작성하는 경우도 흔하다.

컴파일러는 하나의 언어로 작성된 파일을 읽어 다른 언어로 옮기고 파일을 출력한다. 컴파일러 자체도 그 컴파일러가 컴파일하는 동일한 언어로 구현할 수 있는데, 이를 셀프 호스팅(self-hosting)이라고 한다.

아직 컴파일러 자체만으로 컴파일러를 컴파일할 방법은 없지만, 다른 언어로 작성된 컴파일러가 있으면 그 컴파일러를 이용해서 여러분 언어의 컴파일러를 딱 한 번 컴파일할 수 있다. 일단 이렇게 컴파일된 버전의 컴파일러를 이용하면 이후 버전의 컴파일러를 계속 컴파일할 수 있고, 처음 한 번 다른 언어로 작성한 컴파일러로 컴파일한 원래 컴파일러는 버리면 된다. 이를 부트스트래핑(boostrapping)이라고 하는데, 아래 그림처럼 부트스트랩14을 잡고 자기 몸을 위로 잡아당기는 모습에서 유래됐다.15

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