Compiler
- 고급 프로그래밍 언어로 작성된 코드를 machine code로 변환하는 컴퓨터 프로그램
- 사람이 읽을 수 있는 코드를 컴퓨터 프로세서가 이해하는 언어(바이너리 1 또는 0비트)로 변환하는 프로그램
- 컴퓨터는 machine code를 처리하여 해당 작업을 수행
- compiler는 작성된 프로그래밍 언어의 구문 규칙을 준수해야 함
- compiler는 해당 프로그램에서 발견된 error는 수정할 수 없음 => 컴파일 불가
- 프로그램이 실행되기 전, 한번에 모든 코드를 machine code로 변환
- interpreted 코드 보다 빠르게 실행됨
- compile을 수행한 후 모든 오류를 한꺼번에 표시
- translation linking-loading model 기반
Interpreter
- 고급 프로그램 statement(source code, pre-compiled code, scripts)를 machine code로 변환하는 컴퓨터 프로그램
- 프로그램이 실행 중에 각 코드를 하나씩 machine code로 변환
- compiled 코드 보다 느리게 실행됨
- 각 행의 오류를 하나씩 표시
- Interpretation method를 기반
Compiler VS Interpreter
Compiler |
Interpreter |
|
프로그래밍 순서 |
1. 프로그램 생성 2. parse 후 정확성을 위해 모든 statement문을 분석 (잘못된 경우, 에러 발생) 3. 에러가 없으면 소스 코드를 machine code로 변환 4. code 파일을 실행 가능한 프로그램으로 link 5. 프로그램 실행 |
1. 프로그램 생성 2. 파일 link 또는 machine code 생성하지 않음 3. 프로그램 실행 동안 한줄 씩 실행된 source statment |
장점 |
이미 machine code로 번역되었기 때문에 코드 실행 시간이 짧다 |
초보 개발자가 사용하기 쉽다 |
단점 |
source code로 돌아가지 않고서는 프로그램을 변경할 수 없다 |
Interpreted 프로그램은 그에 맞는 interpreter가 존재해야 컴퓨터에서 실행 가능 |
machine code |
disk에 저장 |
disk에 저장하지 않음 |
running time |
보다 빠름 |
보다 느림 |
model |
language translationlinking-loading model 기반 |
Interpretation Method 기반 |
프로그램 생성 |
source code와 독립적으로 실행할 수 있는 출력 프로그램을 생성 |
실행 중에 매번 소스 프로그램을 평가 |
실행 |
- 실행은 컴파일과 별개 - 컴파일이 완료되어 출력 프로그램이 나온 후에만 실행 가능 |
프로그램 실행은 interperte 과정의 일부이므로 한줄씩 수행 |
Memory requirement |
필요 없음 |
interpretation 중에 필요 |
가장 적합한 프로그램 |
C나 C++ 모델 |
Web |
Code Optimization |
코드의 실행속도를 높이기 위해 많은 최적화를 수행 |
코드를 한줄씩 인식하므로 최적화는 컴파일러에 비해 강력하지 않음 |
Dynamic Typing |
turn time에 어떤 일이 일어날지 예측할 수 없기에 구현이 어려움 |
동적 타이핑 지원 |
사용법 |
production 환경에 적절 |
development 환경에 적절 |
Error execution |
- 컴파일 시간에 모든 오류와 경고를 표시 - 오류를 수정하지 않고 프로그램을 실행할 수 없음 |
- 단일 문을 읽고 오류가 있으면 표시 - 다음 줄을 해석하려면 오류를 수정해야함 |
Input |
전체 source code |
code의 1줄 |
Output |
intermediate machnie code 생성 |
intermediate machnie code 생성하지 않음 |
Errors |
컴파일 이후 모든 오류 동시 표시 |
각줄의 모든 오류 하나씩 표시 |
관련 프로그래밍 언어 |
C,C++,C#, Scala, Java |
PHP, Perl, Ruby |
High-level Language (고급 언어)
- source code라고도 함
- C, C++, Java 등
- 프로그래밍 프로세스를 쉽게 만듦
- 실행하기 전 기계어로 번역 필요
- 번역 프로세스는 컴파일러나 인터프리터가 수행
Machine Code
- 하드웨어에 매우 가까움
- 일련의 binary pattern으로 구성
- 컴퓨터에서 수행해야하는 간단한 작업을 나타냄
- machine code는 실행 가능하므로 직접 실행 가능
Object Code
- source code를 컴파일할 때, Interl, AMD, ARM과 같은 다른 프로세서에 대해 생성된 machine code는 직접 실행이 불가
- 실행할 수 있게 하기 위해 source code를 먼저 object code로 변환이 필요
- 프로세서가 이해할 수 없는 machine code와 유사한 중간 코드(intermediary code)
- run time에 object code는 기본 플랫폼의 machine code로 변환
출처
https://www.guru99.com/difference-compiler-vs-interpreter.html
'Web' 카테고리의 다른 글
HTTP 헤더(Header) (0) | 2020.10.28 |
---|---|
브라우저 정의, 특징, 동작 원리 (0) | 2020.09.29 |
CORS(Cross-Origin Resource Sharing / 교차 출처 자원 공유) (0) | 2020.09.23 |
HTTP 응답 상태 코드 (Response Status Code) (0) | 2020.07.15 |
[HTML5] Local Storage, Session Storage란? (0) | 2019.07.26 |