인터프리터 언어, Interpreter Language
원시코드(개발자가 작성한 소스코드)를 기계어로 변환하는 과정없이 한줄 한줄 해석하여 바로 명령어를 실행하는 언어.
통역사(Interpreter)처럼 그 즉시 바로바로 컴퓨터가 알아들을 수 있는 말로 바꿔주는 것이라 생각하면 쉽다.
R, Python, Ruby와 같은 언어들이 대표적인 인터프리터 언어이다.
인터프리터가 직접 한 줄씩 읽고 따로 기계어로 변환하지 않기 때문에 빌드 시간이 없다. 런타임(Runtime) 상황에서는 한 줄씩 실시간으로 읽어서 실행하기 때문에 컴파일 언어에 비해 속도가 느리다.
(런타임: 어떤 프로그램이 실행되는 동안의 시간 / 컴파일: 고급언어를 기계어로 변환하는 과정)
실행속도는 느리지만 코드 변경시 빌드 과정없이 바로 실행이 가능하다는 장점이 있다. Ruby를 사용해보면 소스코드를 고치고 난 뒤 서버를 다시 시작하지 않아도 변경사항이 반영된 상태로 테스트를 진행할 수 있다.
컴파일러 언어, Compiler Language
원시코드를 모두 기계어로 변환한 후에 기계(JVM같은 가상머신)에 넣고 기계어 코드를 실행하는 언어.
소스코드를 기계어로 번역하는 빌드 과정에서는 인터프리터언어에 비해 시간이 소요되지만 런타임 상황에서는 이미 기계어로 모든 소스코드가 변환되어 있기 때문에 빠르게 실행할 수 있다.
C, C++, Java 와 같은 언어들이 대표적인 예이다. 여기서 Java의 경우에는 자바컴파일러와 자바인터프리터가 다 있다. 자바컴파일러는 .java라고 쓰여진 소스파일을 .class라는 클래스파일로 변환하고 자바인터프리터는 바이트코드로 작성된 클래스파일을 특정 환경의 기계에서 실행될 수 있도록 기계어로 변환한다. 때문에 Java는 컴파일러 언어라고만 볼 수는 없다.
빌드란?
빌드는 소스파일을 실행파일로 생성하는 과정이다.
즉, 고급언어 ⇒⇒⇒ (변환) ⇒⇒⇒ 저급언어(기계어) 과정을 거쳐 실행파일을 생성한다.
위에서 말했듯, 인터프리터 언어는 이러한 빌드 과정없이 바로 고급언어에서 한줄 씩 읽어서 실행하고
컴파일러 언어는 .class 파일 등과 같이 변환하여 실행하는 것이다.
컴파일러 실행 단계
1. 구문 분석
소스코드 파일을 읽어 개별 문법요소 단위로 자른 후 이 문법 요소들을 해석하여 추상 구문 트리를 생성한다.
이 과정에서 문법에 맞지 않는 소스코드는 사용자에게 알려준다.
2. 최적화
추상 구문 트리를 분석하여 최적화를 수행한다.
도달할 수 없는 코드를 식별하거나 상수 표현식을 미리 계산해두거나 루프 풀기 등의 대부분의 최적화가 수행된다.
3. 코드 생성
최적화된 구문 트리로부터 목적 코드를 생성한다.
목표언어가 기계어일 경우 레지스터 할당, 연산 순서 바꾸기 등 하드웨어에 맞는 최적화가 수행된다.
4. 링킹
목적코드가 기계어일 경우 여러 라이브러리 목적코드를 묶어 하나의 실행파일을 생성한다.
이 과정은 링커에 의해 수행되며 어떤 사람들은 링커를 컴파일러의 일부로 간주하지 않기도 한다.
인터프리터 실행 단계
1. 소스코드
2. 인터프리터
3. 실행
'Basic Information' 카테고리의 다른 글
[기초지식] CPU, RAM, HDD, SSD 에 대하여 알아보자 (0) | 2020.11.02 |
---|