컴파일러 언어와 인터프리터 언어

1c2·2024년 4월 3일
0

CS

목록 보기
10/19

컴파일러 언어와 인터프리터 언어

컴파일러와 인터프리터는 프로그래밍 언어로 작성된 코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 과정에 관여하는 프로그램이다.

[참고]
기계어 코드는 컴퓨터 프로세서가 직접 이해하고 실행할 수 있는, 가장 기본적인 형태의 명령어 집합이다. 이러한 코드는 0과 1, 즉 이진수로 표현되며, 컴퓨터의 중앙 처리 장치가 직접 실행할 수 있는 유일한 언어이자 가장 낮은 수준의 언어이며 이는 기계어가 컴퓨터 하드웨어와 직접적으로 소통할 수 있는 언어이다.

컴파일러

  • 전체 변환 : 소스 코드의 전체를 읽어 한 번에 기계어로 변환한다. 변환 과정을 거친 후, 생성된 기계어 코드를 실행한다.
  • 속도 : 컴파일 과정 자체는 시간이 걸리지만, 변환된 코드는 직접 실행되므로 실행 시간은 빠르다.
  • 사용 예 : C, C++, Go, Rust 등의 언어가 컴파일러를 사용한다.
  • 코드를 수정했을 때 컴파일과정이 필요하다.

[참고] 컴파일과정
고수준의 소스코드를 전처리, 컴파일러, 어셈블러, 링커의 과정을 거쳐 저수준언어로 만들고 실행할 수 있는 프로그램을 만드는 과정

인터프리터

  • 한 줄씩 변환 : 소스 코드를 한 줄씩 읽어가며 바로 기계어로 변환하고 실행한다.
  • 속도 : 컴파일 단계가 없으므로 초기 시작은 빠르지만, 전체 코드 실행 시간은 컴파일러를 사용할 때보다 느릴 수 있다. 코드를 실행할 때마다 변환 과정을 거치기 때문.
  • 사용 예 : Python
  • 코드를 수정했을 때 컴파일 과정이 필요하지 않다.

컴파일러와 인터프리터 모두 고수준의 언어를 기계어로 변환한다는 공통점이 있다.

JIT 컴파일러

JIT 컴파일러는 인터프리터와 컴파일러의 중간 형태이다.
1. 코드 분석 : 실행 시점에 프로그램 코드를 분석하여, 어떤 부분이 가장 자주 실행되는지(hot spot) 판단. (실행 전 분석 X)
2. 동적 컴파일 : 분석 결과에 기반하여, 자주 실행되는 코드(Hot Spot)만을 선별적으로 기계어로 변환. 이 과정은 프로그램 실행 중에 실시간으로 이루어진다.
3. 최적화 : 컴파일 과정에서 다양한 최적화 기법을 적용한다. (ex 메모리 접근 패턴 분석, 가비지 컬렉션의 오버헤드 최소화 등)
4. 실행 : 컴파일된 기계어 코드를 실행한다. 프로그램이 계속 실행되면서 새로운 핫 스팟이 발견되면, 해당 부분도 JIT 컴파일을 통해 최적화된다.

ex) JVM, .NET, V8(node.js 엔진)

  • 장점 : 자주 사용되는 코드(hot spot)의 실행 속도가 크게 향상된다.
  • 단점 : 코드를 메모리에 저장해 캐싱하기 때문에 인터프리터 방식에 비해 더 많은 메모리를 소비한다.

0개의 댓글