오늘도 개발

컴파일 VS 인터프리팅 본문

CS

컴파일 VS 인터프리팅

Sueeeeeee 2022. 5. 25. 18:36

우리가 작성하는 코드를 소스코드라고 하고

컴퓨터가 이해할 수 있는 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