티스토리 뷰

 

 

 

 

1. interpreter vs compiler


컴파일 언어와 인터프리터 언어의 가장 큰 차이점은 컴파일 유무이다.

둘의 차이를 알려면 우선 컴파일이 어떤건지 알아야 한다.

- 컴파일이란?
인간이 알아듣기 쉬운 프로그래밍 언어인 High Level Language(고수준언어)를 기계가 알아들을 수 있는 0과 1로 이루어진 기계 언어인 Low Level Language(저수준언어)로 변환시키는 것 이다.

- 그렇다면 고수준언어, 저수준언어는 무엇일까?

1. 저수준언어
0과 1로만 이루어져 있는, 컴퓨터가 이해하기 쉬운 언어를 뜻한다.

2. 고수준 언어
사람이 이해하기 쉬운 언어를 말한다. print,if,while 등의 문법 같이 인간이 사용하는 언어들로 이루어져 있다.

공식적인 분류법은 아니고 자연스럽게 사람들이 부르기 시작한 것으로, 컴퓨터가 이해하기 쉬울수록 저수준언어, 인간이 이해하기 쉬울수록 고수준 언어라고 생각하면 된다.

+) 어셈블리 언어는 무엇일까?

사람이 기계어를 편하게 이해하기 위해서 만들어진 언어입니다.

모든 컴퓨터 언어는 반드시 기계어로 번역되어야 하는데, 예를들어 사람이 4를 말하면 컴퓨터는 101로 받아들이고, 12를 말하면 1100으로 받아들인다.

하지만 이런식으로 계속 소통하다보면 인간은 컴퓨터와 소통하는 것이 어렵지 않을까? 그래서 탄생하게 된 언어가 바로 어셈블리어이다.

어셈블리어의 특징으로는 기계어와 가깝기 때문에 실행속도가 빠르고, 하드웨어를 직접 컨트롤 할 수 있어서 어떤 명령이라도 수행이 가능하다는 점이 있다. 그런데 대부분의 사람들이 배우기 어렵고, 인간의 언어와는 덜 친화적이기 때문에 이를 해결하기 위해서 고수준언어가 탄생하게 된다.

 

다음으로 컴파일 언어와 인터프리터 언어의 차이점을 비교해보다.

 

1. 컴파일 언어는 내가 작성한 소스 코드 전체를 컴퓨터가 알아먹을 수 있는 기계어로 번역한 뒤, 이 번역된 코드를 한번에 실행하는 두 단계를 거쳐 진행된다.

 

번역과 실행이 완전히 따로 이루어지는데, 번역은 컴파일러를 통해 수행되며 대표적인 예시로는 C, C++, Go 등이 있다.

 

특징은 다음과 같다.

 

1) 컴파일 시간이 오래 걸릴 수 있다.

2) 하지만 이미 컴파일이 완료된 프로그램이라면 빠른 속도로 실행이 가능하다.

3) 운영체제 이식성이 낮다.

- 운영체제마다 실행할 수 있는 기계어가 다른 경우가 있는데, 다른 운영체제에서 내 실행 파일을 실행하려 하면 실행되지 않는 경우가 있다. 이 경우에는 해당 운영체제에 맞는 컴파일러로 다시 컴파일 해주어야 한다.

 

 

 

2. 인터프리터 언어는 소스 코드를 한 줄씩, 번역과 실행을 동시에 진행한. 번역은 인터프리터를 통해 수행되며 대표적인 예시로는 Python, JavaScript 등이 있다.

 

특징은 다음과 같다.

 

1) 줄 단위로 번역하기 때문에 실행이 느리다.

2) 디버깅이 쉽다. (개발의 편의성)

- 오류를 발견하면 해당 코드 밑으로는 번역 및 실행이 불가하기 때문에 오류 발견이 쉽다.

3) 운영체제 이식성이 좋다.

- 운영체제 마다 호환되는 인터프리터가 있는 경우 바로 실행이 가능하다.

 

 

2. 자바스크립트의 동작


그럼 자바스크립트는 인터프리터 언어일까요, 컴파일 언어일까?

 

자바스크립트는 인터프리터 언어이다. 개발자도구 콘솔에서 스크립트를 작성해 실행하는데 컴파일이 필요하지 않기 때문이다. 

 

하지만, 결론부터 이야기하면 자바스크립트도 컴파일 과정을 거친다. 다만 자바스크립트 엔진 내부에서 실행중 컴파일이 필요한 경우에 내부에서 컴파일 한다. 대표적인 현대 자바스크립트 엔진인 크롬 V8의 내부를 간략히 살펴보자.

 

 

 

chrome v8 엔진


출처 : advanced javascript from udemy

 

 

자바스크립트의 성능을 비약적으로 향상시킬 수 있었던 이유는 엔진 내부에서 컴파일 과정 거치기 때문이다. 엔진이 작동하는 원리는 다음과 같다.

  1. 먼저 엔진이 실행할 JS 파일을 받게된다.
  2. 파싱, AST(Abstract Syntax Tree)를 구축하는 과정을 거친다.
  3. 다음으로 Interpreter가 코드를 읽으며 실행한다.
  4. 코드를 수행하는 과정에서 프로파일러가 지켜보며 최적화 할 수 있는 코드를 컴파일러에게 전달해준다. (주로 반복해서 실행되는 코드 블록을 컴파일(최적화)한다.)
  5. 그리고 원래 있던 코드와 최적화된 코드를 바꿔준다.

코드를 우선 인터프리터 방식으로 실행하고 필요할 때 컴파일 하는 방법을 JIT(Just-In-Time) 컴파일러 라고 부른다. 크롬의 V8 엔진을 포함해 Mozilla의 Rhino, Firefox의 SpiderMonkey도 같은 방법을 사용한다.

 

 

결론은 자바스크립트는 실행되는 플랫폼에 따라 인터프리팅과 컴파일이 혼합되어 사용되고 이 방식은 자바스크립트의 성능을 크게 향상시켰다.

 

 

3. 정리


  • 자바스크립트는 인터프리터 언어다
  • 하지만 플랫폼에 따라 엔진 내부에서 컴파일 과정을 거친다 (대부분의 현대 자바스크립트 엔진)
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함