🦜

Compile과 Transpile 그리고 Interpreter

FE 공부를 하면서 Transpile, Transpiler, Transcompile 이라는 용어가 많이 등장하길래 알아보았다.

Interpreter

인터프리터는 대부분의 스크립트형 언어에서 사용되는 방식이다. 코드를 한줄씩 읽어가면서 코드를 기계어로 번역해 실행하는 방식이다.
현재 고급 프로그래밍 언어의 대부분이 인터프리터 언어이다.

Compile

Compile은 한 언어로 작성된 코드를 다른 언어로 옮기는 일을 통칭한다. C언어를 기계어로 옮기는 것, Java를 Bytecode로 옮기는 것, TypeScript를 JavaScript로 옮기는 것 모두 이 정의에 따르면 Compile에 해당한다.

AOT (Ahead Of Time) Compile

AOT 컴파일이란 코드가 기계어로 컴파일 되기 이전에 중간 단계의 추상화 정도를 가진 다른 언어로 컴파일 되는 것을 말한다.
이후 AOT를 통해 컴파일된 언어가 Interpret, JIT 컴파일 되어 기계어로 실행된다.

JIT (Just In Time) Compile

JIT 컴파일은 코드가 실행됨과 동시에 코드에 해당하는 기계어 코드를 생성한다. 여기까지만 들으면 Interpreter와 차이가 없다고 할 수 있지만, JIT 컴파일에서는 Interpreter와 다르게 기계어로 번역된 코드를 Caching 해서 사용하기 때문에 인터프리터보다 빠른 속도를 갖는다.
JVM이 Bytecode를 JIT 컴파일 하여 실행한다. Python 런타임 중 하나인 PyPy도 JIT 컴파일을 사용하여 CPython의 느린 속도를 개선하였다.

Transpile

Transpile은 Compile의 Subset인데, 추상화 정도가 유사한 언어를 다른 언어로 Compile하는 것을 특별히 Transpile이라고 부른다.
C++를 C로 바꾼다거나, TypeScript를 JavaScript로, ES6를 Babel등을 통해 ES5로 바꾸는것 등등이 Transpile에 해당한다.