Compiler
- programming language로 쓰인 computer code를 다른 language로 변환해주는 컴퓨터 프로그램
- compiler라는 이름은 기본적으로 high level programming language source code 를 실행가능한 프로그램을 만들기 위해 lower lever language(assembly language, object code, machine code 등)로 변환하는 것
Compile-time
Compile time refers to the time duration in which the programming code is converted to the machine code (i.e binary code) and usually occurs before runtime.
- compile time에 수행되는 연산에는 systax analysis, sematic analysis(type checks, instantiation of template), code generation이 있음
Compilation strategies
Just-in-time(JIT, dynamic translation, run-time compilations)
- 실행 시점에 바이트 코드를 원시 시스템 코드(기계어)로 컴파일하여 애플리케이션의 성능을 향상시키는 런타임 환경의 컴포넌트
- 프로그램의 실행 속도를 빠르게 하기 위해 사용
- 실행 시점에서 인터프리트 방식으로 기계어 코드를 생성하면서 그 코드를 캐싱하여 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는 것을 방지함
- 중간 코드가 실행되는 동안 기본 실행을 위해 중간 코드를 기계어로 컴파일하여 응용 프로그램의 성능이 저하 될 수 있음
Ahead-of-time(AOT)
- 목표 시스템의 기계어와 무관하게 중간 언어 형태로 배포된 후 목표 시스템에서 인터프리터나 JIT 컴파일 등 기계어 번역을 통해 실행되는 중간 언어를 미리 목표 시스템에 맞는 기계어로 번역하는 방식
- 실행 중이 아니라 실행 전에 컴파일을 수행하여 JIT에서 실행 중에 기계어로 컴파일하는 과정이 필요하지 않음
& Dalvik, ART
- 컴파일 방식에 차이가 있음
- Dalvik — JIT: 실행 시점에 소스코드를 번역하기 때문에 설치는 빠르지만 실행 시점에 느림
- ART — AOT: 설치 시점에 소스코드를 번역하기 때문에 설치가 느리고 번역을 해서 저장해놓기 때문에 용량도 크지만 실행 시점에 미리 번역한 파일을 실행하므로 실행 시점에 빠름
Runtime System(Environment)
- stack, heap 영역을 설정하고 관리함
- garbage collection, thread 또는 언어에서 제공하는 다른 동적 기능을 포함
Runtime(Execution time)
- CPU가 machine code를 실행하는 시간
- runtime error: 프로그램을 실행한 후 감지,
반면 compile-time error는 compiler에서 프로그램을 실행하기 전에 감지. - compile-time 에는 type checking, register allocation, code generation, code optimization이 일반적으로 수행되지만 특정 언어 및 컴파일러에 따라 runtime에 수행되기도 함.
- runtime error는 0으로 나누기, domain 에러, 배열 index bounds 에러, 산술 underflow, overflow 에러 등 많은 runtime error가 일반적으로 발생하거나 발생하지 않을 수 있는 software bug.
Interpreter
- machine lagunage 로 compile 과정 없이 programming 또는 scripting 언어로 작성된 program을 바로 실행하는 것, 아래 세 가지 중 하나의 전략 사용.
_1. source code를 parsing 하고 바로 그 작업을 수행
_2. source code를 효율적인 중간 표현으로 변환하고 즉시 실행
_3. interpreter system의 일부인 컴파일러에 의해 미리 컴파일된 코드를 명시적으로 실행
Virtual Machine
- 컴퓨터 구조를 기반으로하며 실제 컴퓨터의 기능을 제공하는 에뮬레이션
System virtual machines(full virtualization VMs)
- 실제 기계를 대체
- 전체 OS를 실행하기 위한 기능들을 제공
Process virtual machines
- platform-independent 환경에서 프로그램을 실행하기 위해 고안됨
- high-level programming language의 고수준의 추상화 제공
- interpreter는 사용하여 구현됨
- JIT 컴파일을 사용하여 컴파일된 프로그래밍 언어와 비슷한 성능을 얻을 수 있음