습관처럼

Compiler, Assembler, Interpreter 란? 본문

Certification/정처기

Compiler, Assembler, Interpreter 란?

dev.wookii 2020. 2. 29. 21:00

Compiler?

컴파일러(compiler)는 해석기, 번역기라는 뜻으로 특정 프로그래밍 언어로 쓰여진 문서를 다른 프로그래밍 언어로 옮기는 프로그램을 말한다. 기존의 문서를 소스 코드 또는 원시 코드라 부르고, 출력되는 문서를 목적 코드라고 부른다. 목적 코드는 주로 다른 프로그램이나 하드웨어가 처리하기 용이한 형태로 출력되지만! 그 외에도 사람이 읽을 수 있는 문서 파일이나 그림 파일 등으로 옮기는 경우도 있다. 원시 코드를 목적 코드로 옮기는 과정을 컴파일(compile)이라고 한다.  원시 코드를 컴파일 하는 이유는 사람에게 이해하기 쉬운 형태의 고수준 언어를 기계가 이해하기 쉬운 기계어로 바꿔주기 위해서 이다. 좁은 의미로 컴파일러는 고수준 언어를 저수준 언어(어셈블리어, 기계어)로 번역해주는 프로그램을 말한다.

>>고수준 언어 → 저수준 언어(어셈블리어, 기계어)

Assembler?

어셈블러(assembler)어셈블리어를 기계어 형태의 오브젝트 코드로 해석해주는 컴퓨터 언어 번역 프로그램! 이다. 어셈블러는 컴퓨터 명령어들을 컴퓨터 프로세서가 기본 연산을 수행 할 수 있게 피트 패턴으로 변환시켜주는 프로그램이다.

Linker?

어셈블러를 거친 오브젝트 코드사용된 함수를 포함하고 있는 함수 라이브러리를 묶어주는 작업을 한다. 이 과정을 링킹이라 한다.

Interpreter?

인터프리터(interpreter)는 해석기라는 뜻으로 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램! 또는 환경을 말한다. 원시 코드를 기계어로 번역하는 컴파일러와 다르다. 인터프리는 아래 과정 중 적어도 하나의 기능을 가진 프로그램이다.

  1. 소스 코드를 직접 실행한다. 
  2. 소스 코드를 효율적인 다른 중간 코드로 변환하고, 변환한 것을 바로 실행한다.
  3. 인터프리터 시스템의 일부인 컴파일러가 만든 미리 컴파일된 코드의 실행을 호출한다.
  4. 좁은 의미로 인터프리터는 고급언어로 작성된 원시 코드들을 한번에 한 줄씩 읽어들여서 실행하는 프로그램이다.

Compiler vs Interpreter

(1) Compiler 장점

  1. 컴파일러는 컴파일 하는 과정이 복잡하고 그 시간이 많이 걸리게 된다. 한번 컴파일 하면 그대로 사용이 가능하여 반복 작업을 할 경우 처리 시간이 매우 빠르다.
  2. 컴파일 하는 과정에서 단계별로 주기억장치안에 들어 가기 때문에 기억장소의 크기가 조정이 가능하다.
  3. 전체 실행 시간 면에서 매우 효율적이다.
  4. 컴파일러는 매번 번역할 필요가 없다. 

(2) Compiler 단점

  1. 한 줄의 입력 시 프로그램이 때론 몇 백 개의 기계어로 번역되기 때문에 그 프로그램은 큰 기억용량을 요구한다. 특히 입출력 명령은 입출력 형식을 위한 코드 외에 기계 상태 파악코드로 인해 큰 기억 장치가 요구된다.

(3) Interpreter 장점

  1. 프로그램이 될 때까지 원시 언어의 형태를 유지하기 때문에 기억 장소가 따로 필요하지 않다.

(4) Interpreter 단점

  1. 원시 프로그램을 직접 실행하기 때문에 이 실행에 필요한 소프트웨어가 항상 기계 안에 상주하면서 원시 프로그램의 명령들을 받아서 치리해야 한다. 만일 반복을 하게 되면 그때마다 원시 프로그램을 해석하고 처리해야 하기 때문에 많은 시간이 걸리기도 한다.
  2. 인터프리터의 시행 시간은 컴파일러 방법에 비해 비효율적이다.
  3. 실행순서를 맞쳐줘야한다. (실행 시간 설정을 해놔야한다.)

5) 컴파일러 언어, 인터프리터 언어 예시

 컴파일러 언어 : Fortran, Algol, PL/1, Pascal, Cobol, C, C++

 인터프리터 언어 : Lisp, Snobol4, APL, Prolog, Python

정리

 Compiler

 C 소스등을 파싱하여, Assemble 코드로 만들어주는 프로그램

 Assembler

 Assemble 코드를 Object(기계어)로 만들어주는 프로그램

 Linker

 Object 코드를 사용된 함수 라이브러리와 묶고 실행파일로 만들어주는 프로그램

 Interpreter

 어떤 대상을 타형태로 만들지 않고 바로 실행하는 프로그램

 

 

출처: https://lastmorning.tistory.com/entry/컴파일러-인터프리터-링커-어셈블러의-정의