오늘도 개발
컴파일 VS 인터프리팅 본문
우리가 작성하는 코드를 소스코드라고 하고
컴퓨터가 이해할 수 있는 0과 1로 된 코드를 머신코드라고 한다.
우리가 작성하는 모든 코드는 머신코드로 변환하는 과정을 거쳐야 컴퓨터가 실행할 수 있다.
인터프리팅과 컴파일은 소스코드를 머신코드로 변환하는 두 가지 방법이다.
인터프리팅을 사용하는 언어를 스크립트 언어라고 하고
컴파일을 사용하는 언어를 컴파일 언어라고 한다.
컴파일(Compilation)
컴파일러가 소스코드 전체를 한꺼번에 머신코드로 변환한다.
컴파일 후 언제든지 원하는 시점에 실행할 수 있다.
에러가 있으면 컴파일이 안 되기 때문에 프로그램 실행 자체가 불가능하다.
(parsing 단계에서 에러를 감지하고 컴파일을 멈춤)

자세한 컴파일 단계는 다음과 같다.
1) Tokenizing(Lexing) : 코드를 의미있는 단위(token)으로 나누는 과정
예: var example = 1;은 다섯 개 토큰으로 나뉨(var, example, =, 1, ;)
2) Parsing : token을 모아 AST(Abstract Syntax Tree)로 만드는 과정
AST란? 소스 코드를 해당 언어의 문법 구조에 맞춰 트리 형태로 표현한 것
3) Code generation : AST를 머신 코드로 바꾸는 과정

인터프리팅(Interpreting)
인터프리터가 소스코드를 읽으며 한 줄씩 머신코드로 바꾼다.
변환된 머신코드는 바로 바로 실행한다.
만약 에러가 있으면 앞선 행까지 실행한 다음 에러가 발생한다.
static error(=syntax error, 문법 오류)도 실행 중에 알려준다.
컴파일 언어보다 느리다는 단점이 있다.

Just-in-time Compilation
느린 인터프리팅 방식을 보완하기 위해 나온 방법이다.
컴파일 방식으로 전체 코드를 한번에 머신 코드로 변환한 후
인터프리팅 방식처럼 머신 코드를 바로 실행한다.
컴파일 방식처럼 사용 가능한 머신 코드 파일을 생성하지 않는다.
(어차파 바로 실행하니까)
현대 자바스크립트에서 사용하는 방식이다.
참고
유데미 - The Complete JavaScript Course 2022: From Zero to Expert by Jonas Schmedmann
Simpson, K. (2019). You don’t know JS yet: Get Started. Sebastopol, CA: O’Reilly Media.
'CS' 카테고리의 다른 글
| 동기화(프로세스 동기화, 스레드 동기화) (1) | 2022.10.28 |
|---|---|
| 프로세스와 스레드 (0) | 2022.10.27 |