IT 지식/CS 기초

컴파일과 인터프리터, 고급어 저급어

Security Engineer 2024. 8. 13. 00:12

고급어와 저급어

  • High level과 Low level의 직역이다.
  • 저급어는 기계어(Machine code)이다. = CPU가 인식할 수 있는 명령어
  • 기계어는 알아보기 매우 어렵고 고급어는 인간이 이해하기 쉬운 언어이다.
  • 고급어의 코드는 보통 함수 단위로 묶어 표시한다.
  • 고급어를 기계어로 바꾸는 것이 번역이다.

 

 

기계어 코드와 디스어셈블 코드

그림1 - 기계어 코드 예시
그림2 - 어셈블리어 예시

  • 기계어 코드는 CPU같은 기계장치가 이해하는 코드로 사람이 보고 이해하기 굉장히 어렵다.
  • 어셈블리어는 기계어를 디스어셈블한 코드로 사람이 이해할 수 있는 코드다.
  • 어셈블(Assemble): 어셈블리어 → 기계어
  • 디스어셈블(Disassemble): 기계어 → 어셈블리어

 

 

C언어 코드 = 고급어 = Hige level

그림3 - C언어 예시

  • 고급어가 CPU에서 실행을 하기위해서는 저급어로 번역해야한다. → 컴파일(Compile)
  • 컴파일 과정: C언어 → 기계어

 

 

CPU의 다른 이름 Machine

그림4 - 컴파일 과정

  • CPU는 Machine이므로 기계어(저급어)로 명령을 내려야 실행이 가능하다.
  • 프로그램은 C언어 같은 고급어로 작성되는데, CPU가 인식할 수 있도록 번역해야한다. → 컴파일
  • C언어 코드 = Native 코드 = 특정 CPU와 OS에 종속 = CPU와 OS가 직접 실행할 수 있는 코드
  • Native 코드 = 특정 CPU에서 실행을 하기 위해 컴파일된 언어 = 현재 프로그램이 돌아가는 환경에 적합한 기계 언어
  • S/W = Logical ≒ Virtual, CPU = Machine
  • CPU를 S/W로 구현하면 Virtual Machine이 된다. → 가상화
  • Virtual Machine이 인식하는 코드 = Managed 코드 = CPU와 OS에 의존하지 않는 코드 → Java
  • Java를 위한 Virtual Machine = JVM
  • Java → byte code → JVM → OS(Windows, MAC, Linux) = JVM이 있으면 OS에 상관없이 실행 가능

 

 

인터프리터(Interpreter)

  • 고급어 소스코드를 직접 실행하는 프로그램이나 환경을 의미한다.
  • 보통 한번에 한 줄 단위로 실행한다. → 한 줄 읽고 번역해서 실행을 반복
  • 성능(특히 속도)면에서 컴파일러 방식보다 느리다.
  • JavaScript Python 등이 여기에 해당 한다.

JavaScript는 Front-End 언어로 브라우저에서 작동한다.

크롬 브라우저에는 JavaScript Engine이 내장되어 있음 → V8 Engine (VM)

 

 

프로그래밍 언어 방식

  • 컴파일 언어 = 전체 소스 코드를 기계어로 번역 후 실행
  • 인터프리터 언어 = 소스 코드를 한 줄씩, 번역과 실행을 동시에 진행

 

 

 

 

 

참고

https://www.inflearn.com/course/%EB%84%93%EA%B3%A0%EC%96%95%EA%B2%8C-%EC%BB%B4%EA%B3%B5-%EC%A0%84%EA%B3%B5%EC%9E%90