컴파일러 & 인터프리터 모두 high-level language를 machine language로 번역한다
컴파일러는 소스 코드(high-level language로 작성) 전체를 링커등을 통해 한번에 번역하여 object file(기계어로 작성)로 만들어 메모리상에 적재한다.
인터프리터는 소스 코드를 한 행씩 중간 코드로 번역 후 실행한다.( 보통 VM안에서 실행됨)
특징 정리 )
- 컴파일러는 소스코드 전체를 컴퓨터 프로세서가 실행 할 수 있도록 바로 기계어로 변환한다. 인터프리터는 고레벨 언어를 중간 코드(intermediate code)로 변환하고 이를 각 행마다 실행한다. 이 중간 코드는 다른 프로그램에 의해 실행된다.
- 일반적으로 컴파일러가 각 행마다 실행하는 특성을 가진 인터프리터보다는 실행시간이 빠르다.
- 컴파일러는 전체 소스코드를 변환 한 뒤 에러를 보고하지만 인터프리터는 각 행 마다 실행하는 도중 에러가 보고되면 이후 작성된 코드를 살펴보지 않는다. 이는 보안적인 관점에서 도움이 된다.
- 예를 들어 파이썬은 인터프리트 언어이고 C, C++는 컴파일 언어이다. 자바는 컴파일러와 인터프리터 모두 사용한다.
바로 기계어로 변환하는 컴파일러의 경우는 프로그램이 작성된 기계상에서실행할 때 매우 효율적으로 실행된다. 이는 대부분의 하드웨어 제어 시스템의 프로그래밍언어가 C인 이유이다. 그러나 이와 동시에 기계 종류에 종속된다는 말이기도 하다. 자바 인터프리팅은 자바 컴파일러를 통해 생성된 클래스파일을 기계어로 변환한다.
자바에서는 인터프리터 특성 중 한 줄씩 읽는 특성에 집중하기 보다, 플랫폼에 독립적으로 작동할 수 있게 사용됨을 중점을 두고 인터프리터를 이해하는 것이 더 좋을 것 같다는 의견이 있다.
https://blog.naver.com/PostView.naver?blogId=ehcibear314&logNo=221228200531&redirect=Dlog&widgetTypeCall=true&topReferer=https%3A%2F%2Fvelog.io%2F&directAccess=false
https://velog.io/@huttels/2020-04-19