[JavaScript] - Babel은 트랜스파일러(transpiler)일까? 컴파일러(compiler)일까?

ain·2022년 7월 1일
1

JavaScript

목록 보기
1/4
post-thumbnail

transpiler vs compiler

Babel에 대해서 좀 더 자세하게 찾아보다가 트랜스파일러(transpiler)와 컴파일러(compiler)의 차이점도 알아보게 되었다. 이전에 Sass를 사용해본 적이 있어서 Sass와 같은 컴파일러인 줄 알았는데 누구는 transpiler라고 하고, 누구는 compiler라고 해서 이 두 단어에 대해서 더 깊게 파보았다. 찾아보니 Sass는 두개 다 해당이 되고, Sass 자체를 부를때는 transpiler보다는 preprocessor(전처리기) 혹은 dynamic stylesheet language로 불린다.

babel이 도대체 compiler인지 transpiler인지, 두 단어의 차이점이 무엇인지는 인터넷상에서 굉장히 치열하게 갈린다. 한국어로 찾아봤을 때는 Babel이 transpile이라는 답이 많이 나왔고, 영어로 찾아봤을 때는 비등비등하다. 정작 Babel 공식 문서에는 "Compiler"라는 단어를 쓴다.

모국어가 영어가 아니라 두 단어의 깊은 뜻은 잘 모르지만, 사전상에서도 의미가 비슷하게 나오고, 영어권 사람들의 말로는 두 개의 단어가 모호하다고 한다.


사전적 의미


compiler
1. 명사 편집자, 편찬자
2. 명사 컴퓨터 컴파일러(명령어 번역 프로그램)

transpiler
[Noun] (computing) transcompiler

transcompiler
[Noun] (computing) A translating compiler that takes the source code of a programming language as its input and outputs the source code into either another programming language or an older version of the same language.
.
.
.

compile은 컴퓨터 용어기 전에 이미 다른 뜻이 있었다. 무언가를 변환시키는 것, 변환시키는 사람이라는 뜻이 있었고, compile이라는 동사도 있다.
다음으로 transpiler를 찾아봤더니 이 단어는 transcompiler라는 단어의 줄임말이라고 한다. 그래서 사전상에는 transpile이라는 동사도 없고, 위키피디아에서는 transpile은 transcompile의 줄임말이라고 나온다.
갑자기 언어학 논문 쓰는 기분...

  • 사전
  • 위키피디아

Babel은 둘 중 뭐?


우선 정리해본 결과는 이렇다.
compilertranspiler 사이의 차이점은 굉장히 모호하고, 두 단어 모두 하나의 언어를 다른 언어로 변환한다는 뜻이 있다.
compiler | compiler는 인간이 입력한 코드를 바이트(byte)로 변환해서 컴퓨터가 알아들을 수 있게 하는 것을 말한다. 우리가 작성한 인풋보다 낮은 레벨(low-level)의 아웃풋을 결과로 받아야 할 때 쓰는 단어이다. 바이트, 즉 Binary code는 JavaScript보다 낮은 레벨이기때문에 ES6에서 Byte로 변환되는 과정에서 compile 됐다고 보면 된다.
*high-level과 low-level 언어란 high-level 일수록 사람이 이해하기 쉬운 언어이고, low-level에 가까울 수록 읽고 이해하기 힘든 언어이다.
(이 블로그에 자세하게 정리되어 있다↓)
https://www.kirupa.com/hodgepodge/compiling_transpiling.htm

transpiler | source-to-source compiler 또는 transcompiler 라고도 불리는 transpiler는 우리가 작성한 인풋과 결과로 나오는 아웃풋이 비슷한 레벨의(similar level) 언어일 때 쓰는 단어이다. 예를 들면, TypeScript도 JavaScript의 transpiler이다.
이처럼 tranpiler의 뜻을 봤을 때 Babel도 이에 해당한다.↓


마무리


update(2022.07.18)
결론적으로, Babel은 엄밀히 말하면 transpiler이다.
compiler라는 큰 영역안에 transpiler라는 작은 영역이 존재 하는 것이기 때문에 transpiler라고 하는 것이 더 적합하다. ES6에서 ES5로 변환되는 것은 같은 언어(자바스크립트)의 버전을 바꾸는 것뿐이기 때문이다. transpiler라는 단어도 compiler에 속하기 때문에 compiler, transpiler 두 개 다 해당이 되기 때문에 느슨히 말하면 'compiler라고도 할 수 있지!' 라고 할 수 있지만 우리가 치킨이 먹고싶을 때 굳이 '튀긴 닭 요리 먹고싶다'라고 하지 않고 '치킨 먹고싶다'라고 하듯이 transpiler라고 칭하는게 더 적합하다.

참고

profile
프론트엔드 개발 연습장 ✏️ 📗

0개의 댓글