더북(TheBook)

다시 언어 이야기로 돌아가자.

컴파일(compile)은 소스 언어를 다른 (보통 더 로우레벨의) 언어로 번역하는 구현 기법이다. 바이트코드나 기계어를 생성하는 작업이 바로 컴파일이다. 다른 하이레벨 언어로 트랜스파일하는 것 역시 컴파일이다.

• 어떤 언어 구현체가 “컴파일러다(is a compiler)”라고 함은, 소스 코드를 다른 형식으로 번역하되, 그것을 실행하지는 않는다는 뜻이다. 결과물을 가져와 실행하는 일은 사용자의 몫이다.

• 반대로 “인터프리터다(is an interpreter)”라고 함은, 소스 코드를 받아 즉시 실행한다는 뜻이다. 즉, ‘소스에서 바로(from source)’ 프로그램을 실행하는 것이다.

사과와 오렌지처럼 어떤 언어 구현체는 분명히 인터프리터가 아닌 컴파일러다. GCC와 클랭(Clang)은 C 코드를 기계어로 컴파일하는 컴파일러다. 최종 사용자는 어떤 도구를 사용해서 컴파일했는지는 절대로 알 수 없으며, 실행 파일을 직접 실행한다. 즉, GCC와 클랭은 C 언어의 컴파일러다.

마츠18가 개발한 루비 옛 버전은 사용자가 소스 코드를 직접 실행했었다. 이 구현체는 파싱 후 구문 트리를 탐색하며 바로바로 코드를 실행했다. 그 과정에서 내부든 사용자가 볼 수 있는 형태든 어떤 형식으로도 번역은 일어나지 않았다. 즉, 명백한 루비 언어의 인터프리터였다.

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