- 자바스크립트의 컴파일 과정을 살펴보기 전에 컴파일 언어인 C 언어의 컴파일 과정을 알아봄.
1. compile 언어의 compile 과정 (EX. C 언어)

1-1. preprocessor (전처리기)
: # 이 앞에오는 소스 코드를 처리하며(preprocessing directives) 주석제거, stdio.h 같은 헤더 파일을 코드 상으로 필요한 내용으로 채워주고 define으로 먼저 정의된 상수를 symbol table에 저장 등 매크로를 확장 및 치환하며 전처리된 코드로 변환. (*.c -> *.i)
1-2. compile
: 전처리된 소스 코드를 어셈블리어 코드로 변환하며 언어의 문법 검사, static 영역의 메모리 할당하며 front-end -> middle-end -> back-end(compiler 마다 차이가 있으며, gcc는 명확한 구분이 아닌 의존성 존재, Clang(front) + LLVM(middle, back)는 구분이 명확)로 구성되며 해당 과정을 거쳐 사람이 이해할 수 있게 부호화된 언어인 assembly code(CPU 명령어인 기계어와 1:1로 매칭)로 변환.(*.i -> *.s)
1-3. assembler
: 사람이 알아볼 수 없는 기계어로 변환. (*.s -> *.o)


2. 자바스크립트의 compile 과정

- V8 엔진 이후 profiler의 등장으로 interpreter를 관찰하며 실행되는 코드를 계속해서 모니터링 하며 코드내 반복 실행되는 것이 있다면 컴파일러에게 넘겨 실시간으로 컴파일을 수행하며 바이트 코드를 생성해 낸다. 이를 JITC(just-in-time compilation) 라고 한다. 필요한 경우 decompile 과정을 통해 컴파일러가 컴파일하려고 했던 판단을 되돌려 컴파일 비용을 줄임.
2024.09.25 - [Front-End/Javascript] - AST(Abstract Syntax Tree, 추상 구문 트리)
| 배열의 전개 구문 (0) | 2024.09.25 |
|---|---|
| AST(Abstract Syntax Tree, 추상 구문 트리) (4) | 2024.09.25 |
| 객체 구조 분해 할당 (2) | 2024.09.23 |
| 배열 구조 분해 할당 (0) | 2024.09.23 |
| 브라우저에 따른 고려사항과 compile, transpile, interpreter (0) | 2024.09.21 |