728x90
컴파일/트랜스파일/인터프리터
컴파일(Compile)
- 한 언어로 작성된 소스 코드를 다른 언어로 변환하는 것이 컴파일이다.
- C언어를 기계어로 옮기는 것, Java를 Bytecode로 옮기는 것 모두 이 정의에 따르면 Compile에 해당한다. 심지어 TypeScript를 JavaScript로 옮기는 것 역시 이 범주안에 속한다고 할 수 있기도 하다. (엄밀히 말하면 트랜스파일링이다.)
- 고수준의 언어를 바이트 단위의 기계어로 변환해야 컴파일이라고 말하는 것이 아니다. 컴파일은 한 언어로 작성된 코드를 다른 언어로 옮기는 일 자체를 통칭한다고 보면 된다.
트랜스파일(Transpile)
- 한 언어로 작성된 소스 코드를 비슷한 수준의 추상화를 가진 다른 언어로 변환하는 것이 트랜스파일이다.
- Transpile은 Compile의 Subset인데, 추상화 정도가 유사한 언어를 다른 언어로 Compile하는 것을 특별히 Transpile이라고 부른다고 보면 된다.
- 예를 들어 높은 버전의 자바스크립트 코드를, IE 호환성을 위해 낮은 버전의 자바스크립트로 변환하는 Babel도 이 범주에 속한다.
- 타입스크립트를 자바스크립트로 컴파일 하는 것 역시 엄밀히 따지자면 트랜스파일링이다.
- 예시
- C++ → C
- ES6 → ES5( Babel )
- typescript / coffeescript → Javascript
- sass / scss → css
인터프리터(Interpreter)
- 사람이 알아보기 쉬운 프로그래밍 언어로 작성한 코드를 한 줄 씩 기계어로 번역하는 번역기다. 인터프리터는 즉각적인 번역에 특화된 번역기로 번역 속도가 빠르다. 하지만 한 줄 작성하고 엔터칠 때마다 새롭게 번역을 하니, 프로그램을 매번 실행하기에는 느리게 된다.
컴파일러 vs 인터프리터
- 인간이 읽기 편한 고수준의 프로그래밍 언어를 컴퓨터가 읽을 수 있게 저수준의 기계어로 변환하기 위해 대표적인 2가지 이다.
- 컴파일러
- 프로그램 전체를 스캔하여 이를 모두 기계어로 번역한다.
- 전체를 스캔하기 때문에 대개 컴파일러는 초기 스캔 시간이 오래 걸린다. 하지만 전체 실행 시간만 따지고 보면 인터프리터 보다 빠르다.
- 기계어 번역 과정에서 많은 메모리를 사용한다.
- 그리고 컴파일러는 전체 코드를 검사한 후에 오류 메시지를 생성하기 때문에 프로그램을 실행 전에 오류를 발견할 수 있다.
- 대표적으로 C, C++, JAVA 등이 있다.
- 인터프리터
- 프로그램 실행시 한 번에 한 문장씩 번역한다.
- 한 번에 전체를 스캔하고 실행파일을 만들어서 실행하는 컴파일러보다 실행시간이 더 걸린다. 하지만 컴파일러보다 메모리 효율이 좋다.
- 또한 인터프리터는 오류 메시지 생성과정이 컴파일러와 다르다. 인터프리터는 한번에 한문장씩 번역하기 때문에 프로그램을 실행시키고 한 문장씩 번역될 때 오류를 만나게 되면 바로 프로그램을 중지하게 된다. 그래서 프로그램을 실행해봐야지만 오류 발견이 가능해서 사용성에 문제가 될 수 있다.
- 대표적으로 Python, Ruby, Javascript 등이 있다.
참조
https://inpa.tistory.com/entry/CS-🖥️-컴파일-트랜스파일-인터프리터-비교-쉽게-설명
728x90
'Computer > CS' 카테고리의 다른 글
Redis (0) | 2024.07.16 |
---|---|
Database - 트랜잭션 격리 수준(Transaction Isolation Level) (0) | 2024.07.11 |
Database - 정규화(Normalization) (0) | 2024.07.10 |
Database - Index (0) | 2024.07.09 |
Database - Anomaly (0) | 2024.07.09 |