[CS] Compiler / Interpreter 특징
Compiler(컴파일러)
compile
: Source code
전체를 스캔하여 한꺼번에 기계어로 번역(재구성)하는 과정.
- 때문에 프로젝트의 규모가 클수록 초기에
build
하는 과정이 오래걸리지만 컴파일 후 모든 소스가 기계어로 되어있기 때문에 실행속도는 빠르다.
- 런타임 이전에 이미 해석을 마치고 대게 컴파일 결과물이 바로 기계어로 전환되기 때문에
OS
및 빌드환경에 영향을 많이 받는다.
- 따라서 OS 환경에 맞게 호환되는 라이브러리와 빌드환경을 구분해 구축해야 함.
interprete
언어보다 빠르며 컴파일 하는 과정중 전체 코드를 읽기때문에 프로그램이 동작하기 전에 에러 확인이 가능하다.
- 컴파일러는 프로그램이 작성된 기계상에서 실행할때 효율적이다. 대부분의 하드웨어 제어 시스템 프로그래밍 언어가 C언어인 이유가 여기서 나온다.
- 대표 언어:
C
C++
Java
(자바는 인터프리터도 사용함).
Java
.java
파일을 작성 후 javac HelloWorld.java
명령어를 통해 자바 컴파일러로 부터 .class
파일을 얻을 수 있다.
- 이때
.class
파일은 byte code
파일이다. JVM
에 의해 처리되며 여기서 인터프리터가 개입해 machine language(기계어)
로 번역한다.
- 따라서 자바는
C
C++
보다 빠를 순 없다. 하지만 인터프리터가 사용 환경에 알맞게 기계어 번역을 해주기 때문에 다양한 환경에서 사용하기 편하다.
- 자바의 장점중 하나인 다양한
OS
에서 사용하기 편함이 여기서 나온다.
javac
명령어로 인해 생성된 .class
파일은 java HelloWorld
명령어로 실행될 수 있다.
Interpreter(인터프리터)
interprete
: 컴파일 언어와 다르게 한번에 한줄씩 실행. 따라서 중간에 에러를 만난다면 그때 에러 확인이 가능함.
- 번역과 실행이 동시에 이루어져서
OS
환경에 맞는 라이브러리와 빌드환경의 구축환경 없이 바로 실행이 가능하므로 별도의 별도의 실행 파일이 존재하지 않는다.
- 대부분의 인터프리터 언어는 해석을 위한
VM
위에서 Interpret
을 수행하게 되는데, 이 때 해석의 기반이 되는 머신들이 OS 환경들을 지원해주며, 인터프리터는 이런 방식으로 OS 및 플랫폼 에 종속되지 않는 프로그램 구동이 가능하게 됨.
- 이런 특징을 지닌
Interpreter
는 Java
의 JVM
과 Python
의 Analyzer
가 있다.
- 대표 언어:
python
ruby
javascript
References