컴파일러와 인터프리터
컴파일(compile) 등장 배경
어셈블리어(assembly language)
- 기계어와 일대일 대응되는 저급 언어
- 컴퓨터 구조에 따라 사용하는 기계어가 달라서 어셈블리어도 각각 다름
- 새로운 아키텍쳐가 적용된 CPU가 나오면 기존 프로그램도 어셈블리어를 다시 작성해야 함
- 통일된 언어체계로 작성한 고급 언어 등장
- 고급 언어로 작성한 코드를 어셈블리어로 번역하는 컴파일 등장
- 컴파일러와 인터프리터는 컴파일 방식
컴파일러(compiler)
- 프로그램 전체를 스캔하여 기계어로 번역
=> 실행파일을 만들어 실행할때 사용
=> 초기 스캔 시간이 오래 걸린다
=> 번역 후 실행 속도는 인터프리터 보다 빠름
- 번역 과정에서 오브젝트 코드 파일 작성
=> 오브젝트 코드를 묶어서 하나의 실행 파일로 다시 만드는 링킹(Linking) 작업 수행
=> 인터프리터 보다 많은 메모리 사용
- 전체 코드를 검사한 후에 오류 메시지를 생성 => 실행 전에 오류를 발견 할 수 있다
- 대표적인 언어로 C, C++, JAVA 등이 있다
인터프리터(interpreter)
- 한 문장씩 즉시 실행
- 컴파일러보다 전체 실행 속도가 느리다
- 메모리 효율이 좋다
- 프로그램을 실행해봐야 오류 발견이 가능
- 대표적인 언어로 Python, Ruby, Javascript 등이 있다
Tip. 자바는 javac로 컴파일 하여 클래스 파일을 생성하고, 실행 시 자바 인터프리터가 한 줄씩 번역하기에 컴파일 언어이면서 인터프리터 언어이다
정리
- 컴파일러는 프로그램 전체를 스캔하여 한 번에 컴파일합니다. 이로 인해 초기 스캔 시간이 오래 걸리지만 이후 실행 속도는 인터프레터에 비해 빠릅니다. 또한 전체를 스캔하기 때문에 실행 전에 오류를 발견하고 수정할 수 있습니다. 다만 오브젝트 코드를 생성하고 링킹 작업을 수행하기 때문에 인터프리터 보다 많은 메모리를 사용합니다.
- 인터프리터는 한 번에 한 문장씩 컴파일합니다. 컴파일러 보다 실행 속도는 느리지만 메모리 효율이 좋습니다.
참고
-
ChatGPT-4.0
보완/복습
- 2023.11.06 복습