Compiler vs Interpreter (컴파일러와 인터프리터의 차이)

2019. 9. 6. 00:15Computer Science

반응형

#오늘의 개념 :

Compiler vs Interpreter 의 차이 

 

 

1. Compiler 란?

- 정의

인간의 언어에 가까운 고급 언어로 작성된 원시 프로그램을 입력으로 받아 기계어(機械語)로 된 목적 프로그램을 출력하기 위해 사용되는 언어 번역 프로그램 (정의가 너무 어렵당 ..)

 

 ==> 즉, 고급언어(프로그래밍 언어) -> 기계어(0,1로 이루어진 이진 숫자 : 기계가 이해할 수 있는 언어)로 변환해주는 것.

(사진은 인터넷에서 주워왔지만 이것의 출저는 열열강의 C언어에서 나왔다고 합니다 ㅎㅎ)

 

- 역사

초기 컴퓨터 프로그램들은 어셈블리어로 작성되었다. 그러나 서로 다른 CPU 아키텍처가 등장할 때마다 매번 똑같은 프로그램을 서로 다른 어셈블리어로 작성하는 비용이 커지면서, 고급 프로그래밍 언어의 필요성이 대두되었다. 그러나 초기 컴퓨터 하드웨어의 메모리 크기가 너무 작아, 컴파일러의 등장에 기술적 장애물이 되었다.

1950년대 초부터 기계어에 독립적인 최초의 고급 프로그래밍 언어가 나타났고, 실험적인 컴파일러들이 등장하기 시작했다. 세계 최초의 컴파일러는 1952년 그레이스 호퍼가 개발한 프로그래밍 언어 A-0를 기계어로 번역하는 컴파일러이다. 컴파일러라는 용어 또한 이때 호퍼가 처음 사용하였다. 최적화 기능이 탑재된 최초의 "완전한" 컴파일러는 1957년 IBM 존 배커스가 개발한 포트란 컴파일러이다.

**어셈블리어 : 어셈블리어란 사용자가 이해하기 어려운 기계어 대신에 명령 기능을 쉽게 연상할 수 있는 기호를 기계어와 1:1로 대응시켜 코드화한 기호 언어

 

 

 

2. Interpreter 란?

- 정의

고급 언어로 작성된 원시코드 명령어들을 한번에 한 줄씩 읽어들여서 실행하는 프로그램

==> Interpreter 의 사전적 의미가 '번역기' 임. 말그대로 한 줄씩 번역을 해준다의 의미.

 

- 특징

  • 소스 코드를 직접 실행함

  • 소스 코드를 중간 코드로 변환 후, 변환한 것을 바로 실행.

- 역사 (출처 - 위키백과)

최초의 인터프리트 방식의 고급 언어는 리스프였다. 리스프는 1958년 스티브 러셀 IBM 704 컴퓨터에 최초로 구현하였다. 러셀은 존 매카시의 논문을 읽고 리스프의 eval 함수가 기계어로 구현될 수 있었다는 것을 발견했는데, 이는 맥캐시를 놀라게 했다.[2] 작업 중인 리스프 인터프리터가 그 결과 만들어졌으며 리스프 프로그램의 실행, 더 정확히 말해, "리스프 식의 평가"에 사용될 수 있었다. ????

 

 

 

 

3. 차이점은 ??

 

  Compiler Interpreter
번역 단위 전체 문장 단위
프로그램 실행속도 빠름 느림
실행파일 생성 여부 O X
메모리 할당 여부 O(실행파일을 생성하므로) X
에러 발생 전체 코드를 변환 후 에러 보고 에러가 나면 그 이후의 코드는 실행안됨.
언어 C, C++, Java 스크립트 언어 - Python, HTML, JS, Ruby 등 ..

 

결국은 둘 다 고급언어를 기계어로 바꾸는 프로그램인데, 왜 각각 존재하는 걸까 ??? 이유가 있을거야 분명!

컴파일러가 존재하지만, 인터프리터가 나온 이유는 ??

=> 만약, 굉장히 큰 소스 코드라면, 해당 파일을 컴파일하기 위해서는 엄청난 시간이 걸릴 것.

=> 만약, 컴파일 시간이 5분이 걸린다면, 코드를 5번 업데이트하면 총 컴파일 시간은 25분이 소요 .. 이 경우, 인터프리터를 사용한다면 컴파일 시간을 줄일 수 있음.

 

 

 

참조

 

What is an interpreter and its need? - Codeforwin

An interpreter is a program that translates source code written in high-level language to machine code. It is similar to compiler and does the same task of translation from high-level to low-level language. Despite of its similarity, the working mechanism

codeforwin.org

 

인터프리터 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 인터프리터(interpreter, 문화어: 해석기)는 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. 원시 코드를 기계어로 번역하는 컴파일러와 대비된다. 인터프리터는 다음의 과정 가운데 적어도 한 가지 기능을 가진 프로그램이다. 소스 코드를 직접 실행한다. 소스 코드를 효율적인 다른 중간 코드로 변환하고, 변환한 것을 바로 실행한다 인터프리터 시스템의 일부인 컴파일러가 만든, 미리 컴파일

ko.wikipedia.org

반응형