
Complier
- 컴파일러는 고급 프로그래밍 언어로 작성된 코드를 어셈블리 언어, 객체 코드, 기계어와 같은 저급 언어로 변환한다.
- 프로그램이 실행되기 전에 미리 코드를 변환한다.
- 컴파일러는 어셈블러보다 더 지능적이며 모든 종류의 한계, 범위, 오류 등을 확인한다
- 하지만 프로그램 실행 시간이 더 길고 메모리를 더 많이 차지한다. 컴파일러가 전체 프로그램을 검토 한 후 기계어로 변환하기 때문에 속도가 느리다
- 컴파일러의 장점
- 컴파일된 코드는 해석된 코드보다 더 빠르게 실행된다
- 컴파일러는 애플리케이션의 보안을 강화하는 데 도움이 된다
- 컴파일러는 디버깅 도구를 제공하며, 이를 통해 오류를 쉽게 수정할 수 있다
- 컴파일러의 단점
- 컴파일러는 구문 오류와 일부 의미 오류만 포착할 수 있다
- 코드가 방대하면 컴파일에 더 많은 시간이 걸릴 수 있다
컴파일러 유형
- 크로스 컴파일러
- 생성된 코드가 실행되는 CPU나 운영 체제와 다른 컴퓨터에서 실행되는 컴파일러
- 네이티브 컴파일러
- 컴파일러 자체와 동일한 유형의 컴퓨터 및 운영 체제에서 실행될 수 있는 출력을 생성한다
- 부트스트랩 컴파일러
- 디컴파일러
- 저수준 언어의 코드를 고급 언어의 코드로 변환한다
- 소스-투-소스 컴파일러 (트랜스파일러)
- 고급 언어 사이를 변환하는 프로그램이다. 트랜스컴파일러 또는 트랜스파일러라고도 한다
- Emscripten : C/C++를 JavaScript로 변환한다
- Babel : JavaScript 코드를 ES6+ 에서 ES5로 변환한다
- Cfront : 1983년 경에 개발된 최초의 C++ 컴파일러.
- 언어 재작성자(A Language Rewriter)
- 일반적으로 언어를 변경하지 않고 표현 형식을 번역하는 프로그램
- 바이트코드 컴파일러
- 고급 언어를 바이트코드 인터프리터나 가상 머신이 해석할 수 있는 중간 수준의 단순 언어로 변환하는 컴파일러
- JIT 컴파일러
- 컴파일을 런타임까지 연기한다. 일반적으로 인터프리터 내부에서 실행된다
- Java 에서는 소스 파일을 먼저 컴파일하여 고도로 최적화된 명령어 세트인 Java 바이트코드를 포함하는 .class 파일로 변환한 다음, 바이트코드 인터프리터가 바이트코드를 실행하고 나중에 JIT 컴파일러가 바이트코드를 기계어 코드로 변환한다
- Java 바이트코드는 가상 머신에 의해 런타임에 해석되거나, 로드 시점이나 런타임에 네이티브 코드로 컴파일 될 수 있다
- AOT 컴파일
- 사전 컴파일(AOT)은 런타임 전에 상위 수준 프로그래밍 언어나 Java 바이트코드와 같은 중간 표현을 컴파일 하는 방식
- 어셈블러
- 사람이 읽을 수 있는 어셈블리 언어를 기계어로 번역한다.
- 이 컴파일 과정을 어셈블리라고 한다
컴파일러 작동 방식