인터프리터
![](https://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Disambig_grey.svg/23px-Disambig_grey.svg.png)
프로그램 실행 |
---|
일반 개념 |
코드의 종류 |
컴파일 전략 |
저명한 런타임 |
저명한 컴파일러 및 툴체인 |
|
인터프리터(interpreter, 문화어: 해석기)는 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. 원시 코드를 기계어로 번역하는 컴파일러와 대비된다. 인터프리터는 다음의 과정 가운데 적어도 한 가지 기능을 가진 프로그램이다.
- 소스 코드를 직접 실행한다.
- 소스 코드를 효율적인 다른 중간 코드로 변환하고, 변환한 것을 바로 실행한다
- 인터프리터 시스템의 일부인 컴파일러가 만든, 미리 컴파일된[1] 저장 코드의 실행을 호출한다.
인터프리터는 고급 언어로 작성된 원시코드 명령어들을 한번에 한 줄씩 읽어들여서 실행하는 프로그램이다. 고급언어로 작성된 프로그램들을 실행하는 데에는 두 가지 방법이 있다. 가장 일반적인 방법은 프로그램을 컴파일 하는 것이고, 다른 하나는 프로그램을 인터프리터에 통과시키는 방법이다. 인터프리터는 고급 명령어들을 중간 형태로 번역한 다음, 그것을 실행한다. 이와는 대조적으로, 컴파일러는 고급 명령어들을 직접 기계어로 번역한다.
컴파일된 프로그램들은 일반적으로 인터프리터를 이용해 실행시키는 것보다 더 빠르게 실행된다. 그러나 인터프리터의 장점은 기계어 명령어들이 만들어지는 컴파일 단계를 거칠 필요가 없다는데 있다. 컴파일 과정은 만약 원시 프로그램의 크기가 크다면, 상당한 시간이 걸릴 수 있다. 이와는 달리 인터프리터는 고급 프로그램을 즉시 실행시킬 수 있다. 이런 이유 때문에, 인터프리터는 종종 프로그램의 개발단계에서 사용되는데, 그것은 프로그래머가 한번에 적은 양의 내용을 추가하고 그것을 빠르게 테스트 해보길 원하기 때문이다. 이 외에도 인터프리터를 이용하면 프로그래밍을 대화식으로 할 수 있기 때문에, 학생들의 교육용으로 사용되는 경우도 많다.
인터프리터와 컴파일러는 둘 다 대부분의 고급언어에 적용이 가능하지만 BASIC 이나 LISP과 같은 일부 언어들은 개발 당시에는 특별히 인터프리터에 의해서만 실행되도록 설계되었다. 그 외에도 포스트스크립트와 같은 페이지 기술 언어 들도 인터프리터를 사용한다. 모든 포스트스크립트 프린터는 포스트스크립트 명령문을 실행할 수 있도록 인터프리터가 내장되어 있다.
역사
[편집]최초의 인터프리트 방식의 고급 언어는 리스프였다. 리스프는 1958년 스티브 러셀이 IBM 704 컴퓨터에 최초로 구현하였다. 러셀은 존 매카시의 논문을 읽고 리스프의 eval 함수가 기계어로 구현될 수 있었다는 것을 발견했는데, 이는 맥캐시를 놀라게 했다.[2] 작업 중인 리스프 인터프리터가 그 결과 만들어졌으며 리스프 프로그램의 실행, 더 정확히 말해, "리스프 식의 평가"에 사용될 수 있었다.
종류
[편집]바이트코드 인터프리터
[편집]스레드 코드 인터프리터
[편집]추상 구문 트리 인터프리터
[편집]JIT 컴파일
[편집]자체 해석기
[편집]같이 보기
[편집]각주
[편집]- ↑ In this sense, the CPU is also an interpreter, of machine instructions.
- ↑ According to what reported by Paul Graham in Hackers & Painters, p. 185, McCarthy said: "Steve Russell said, look, why don't I program this eval..., and I said to him, ho, ho, you're confusing theory with practice, this eval is intended for reading, not for computing. But he went ahead and did it. That is, he compiled the eval in my paper into IBM 704 machine code, fixing bug, and then advertised this as a Lisp interpreter, which it certainly was. So at that point Lisp had essentially the form that it has today..."
외부 링크
[편집]- IBM Card Interpreters page at Columbia University
- Theoretical Foundations For Practical 'Totally Functional Programming' (Chapter 7 especially) Doctoral dissertation tackling the problem of formalising what is an interpreter
- Short animation explaining the key conceptual difference between interpreters and compilers
![](https://upload.wikimedia.org/wikipedia/commons/thumb/2/22/Heckert_GNU_white.svg/20px-Heckert_GNU_white.svg.png)