Develope/기타

컴파일러(Compiler), 트랜스파일러(Transpiler)

oper0116 2024. 6. 22. 22:20
반응형

컴파일링(Compiler)과 트랜스파일링(Transpiler)

[(Babel)https://babeljs.io/] 공식 홈페이지에 들어가면 Babel is a JavaScript Compiler 라는 설명을 볼 수 있다.

또한 위키피디아에서는 Babel에 대해서는 아래와 같이 설명하고 있다.

Babel is a free and open-source JavaScript transcompiler ...

transcompiler(Transpilier) 라는 설명으로 Babel을 설명한것으로 확인할 수 있는데, 그렇다면 CompilerTranspiler가 어떠한 차이가 있을까?

컴파일러(Compiler)

일반적으로 컴파일러(Compiler)은 한 언어로 작성된 소스 코드를 실행 가능한(excutable) 하위 수준의 언어(binary)변환하는 것이다.

이러한 언어의 예로는 C, C++, Java가 있으며, 컴파일 후에는 바이너리 파일에 가까운 바이트 코드 또는 어셈블리 수준의 언어를 생성한다.

트랜스파일러(Transpiler)

트랜스파일러(Transpiler)은 한 언어로 작성된 소스 코드를 유사한 추상화 수준을 가진 다른 언어로 변환하는 과정이다.

반면에 트랜스파일링은 하나의 상위 수준의 언어를 다른 상위 수준의 언어로 변화는하는 '소스 대 소스' 컴파일러라고 할 수 있다.

예를 들어, Typescript 는 Transpiling 이후에 자바스크립트로 변환되며 이 또한 상위 수준의 언어이다.
또한 바벨을 통하여 ES6 문법에서 ES5 의 문법으로 변환하여 오래된 브라우저에서 사용가능하도록 변환하는 것도 마찬가지이다.

마무리

그렇다면 컴파일러(Compiler), 트랜스파일러(Transpiler)는 정말로 다른것일까?

결과적으로는 컴파일과 트랜스파일의 차이는 변환되어 생성되는 언어의 레벨의 차이이며, 컴파일러라는 큰 범주 안에 트랜스파일러라는 하나의 영역이 존재하는 것으로 개인적인 생각을 정리하고자 한다.

그러기에 컴파일, 트랜스파일이라는 용어를 사용하고자 할때 이러한 차이점을 알고 사용한다면, 트랜스파일의 과정을 컴파일이라 설명하는것도 문제가 없을것 같다.

반응형