학계에는 객체 지향 언어를 얕잡아보는 사람들이 있지만, 사실 객체 지향 언어는 언어를 만드는 일에도 널리 쓰이고 있다. GCC와 LLVM도 다른 대부분의 자바스크립트 가상 머신(Javascript virtual machine)처럼 C++로 개발됐다. 객체 지향 언어는 이제 공용어나 마찬가지라서, 언어 개발용 도구와 컴파일러를 동일한 언어로 작성하는 경우도 흔하다.
컴파일러는 하나의 언어로 작성된 파일을 읽어 다른 언어로 옮기고 파일을 출력한다. 컴파일러 자체도 그 컴파일러가 컴파일하는 동일한 언어로 구현할 수 있는데, 이를 셀프 호스팅(self-hosting)이라고 한다.
아직 컴파일러 자체만으로 컴파일러를 컴파일할 방법은 없지만, 다른 언어로 작성된 컴파일러가 있으면 그 컴파일러를 이용해서 여러분 언어의 컴파일러를 딱 한 번 컴파일할 수 있다. 일단 이렇게 컴파일된 버전의 컴파일러를 이용하면 이후 버전의 컴파일러를 계속 컴파일할 수 있고, 처음 한 번 다른 언어로 작성한 컴파일러로 컴파일한 원래 컴파일러는 버리면 된다. 이를 부트스트래핑(boostrapping)이라고 하는데, 아래 그림처럼 부트스트랩14을 잡고 자기 몸을 위로 잡아당기는 모습에서 유래됐다.15