반응형

 

CSAPP을 읽다가 문득 든 궁금증이다. 인터프리터 언어는 어떻게 기계어로 번역될까?

 

 

C와 같은 컴파일 언어는 아래와 같은 과정으로 기계어로 번역된다.

 

출처: https://blog.hexabrain.net/2

전처리기는 우리가 소스 코드 앞쪽에 작성한 #define과 같은 치환 행위등을 해준다.

 

그런 뒤 컴파일러가 어셈블리어로 이루어진 .s 파일로 만들어주고, 어셈블러는 이것을 '목적파일'로 만들어준다.

 

목적 파일은 이진코드 (0과 1로 이루어진 코드)로 되어있어 기계어처럼 생겼지만 이것만으로는 기계가 알아먹을 수 없다. 링커가 라이브러리와 목적 파일을 합쳐줘야 드디어 우리의 컴퓨터가 이해할 수 있는 '기계어'가 되는 것이다.

 

 

근데 이건 C언어와 같은 컴파일 언어에 해당하는 것이고, 우리가 흔히 쓰는 자바스크립트, 파이썬과 같은 인터프리터 언어들은 어떤 작업을 통해 기계어로 변환되는 것일까?

 

 

인터프리터 언어는 컴파일 없이 코드를 한줄씩 읽어서 바로 실행시켜준다.

 

 

소스코드 -> 바이트코드 -> 실행

 

이런 간단한 순서인데, 여기서 인터프리터가 소스코드를 바이트코드로 변환시켜주면 우리의 컴퓨터에 존재하는 해당 언어의 가상머신이 바이트코드를 기계어로 변환시켜준다.

 

(파이썬을 하고 있다면 윈도우 파일 검색에 python 이라고 입력해보면 버전과 함께 우리가 설치한 파이썬이 보인다. 이 파일을 설치한 모든 컴퓨터는 내장되어있는 가상머신을 활용해 어디서든지 파이썬 파일을 실행할 수 있는 것이다. 물론 버전은 맞춰줘야 충돌이 안일어나겠지만)

 

 

그렇기 때문에 파이썬, 자바스크립트와 같은 인터프리터 언어는 어떤 환경에서 작성을 해도 그것을 실행할 컴퓨터에 가상머신만 존재한다면 실행이 가능한 것이다.

 

심지어 자바스크립트는 브라우저에 가상머신이 내장되어 있어서 정말 자유로운 언어다.

 

 

 

ps) 자바스크립트는 인터프리터 언어긴 한데 일부분 컴파일이 일어난다. 왜 그런지 궁금한 사람은 검색해 보시길

 

 

 

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기