컴파일 기법 - 고급 언어로 작성된 프로그램을 컴퓨터가 바로 실행할 수 있는 프로그램으로 변환하는 방식
(컴파일러를 이용)
고급 언어의 컴파일 단계
1. 원시 프로그램
2, 어휘 분석 단계
3. 구문 분석 단계
4. 중간 코드 생성 단계 (의미 분석)
5. 최적화 단계
6. 코드 생성 단계 ( 기계어로 번역)
7. 목적 프로그램 (기계어 프로그램)
C언어 컴파일 과정 // 위의 7단계를 축약해놓은 것 // 각각의 고급언어 마다 컴파일 과정이 약간식 다름
1. 전처리기(Preprocessor) 단계: #으로 시작하는 전처리기 지시자를 처리하여 소스코드를 수정하고, 필요한 헤더 파일을 포함시키는 등의 작업을 수행합니다.
2. 컴파일러(Compiler) 단계: 전처리된 소스코드를 어셈블리 코드(기계어)로 번역합니다. 이 때, 구문 분석, 타입 체크, 코드 최적화 등의 작업이 수행됩니다.
(컴파일러에서 바로 기계어로 번역할 수 도 있지만 일반적으러 어셈블리 코드로 변환하고 어셈블러 에서 기계어로 번역한다고 한다)
3. 어셈블러(Assembler) 단계: 어셈블리 코드를 기계어로 번역합니다.
4. 링커(Linker) 단계: 여러 개의 오브젝트 파일과 라이브러리 파일을 하나의 실행 파일로 결합합니다. 이 때, 실행 파일 내에서 함수와 변수들의 실제 주소를 매핑하는 작업이 수행됩니다.
프로그래밍 언어와 해당하는 번역 프로그램의 조합
- C언어: 컴파일러 (예: gcc, Clang)
- C++언어: 컴파일러 (예: g++, Clang++)
- 자바: 컴파일러 (예: javac)
- 파이썬: 인터프리터 (예: CPython, Jython, PyPy)
- 자바스크립트: 인터프리터/컴파일러 (예: Node.js)
- 고(Go): 컴파일러 (예: Golang)
- 스칼라(Scala): 컴파일러 (예: Scala)
- 루비(Ruby): 인터프리터 (예: MRI)
각각의 프로그래밍 언어들이 번역프로그램이 다른 이유 ( 컴파일러 vs 인터프리터 )
컴파일러는 소스 코드 전체를 분석하여 기계어로 변환 -> 한방에 실행 -> 실행 빠름 (컴파일 과정 필요)
인터프리터는 소스 코드를 한 줄 씩 읽어들여 바로 실행 -> 한줄한줄 실행 -> 실행 느림 (컴파일 과정 불필요)
-> 기계어로 변경안해도 되는 이유는 인터프리터가 바로 소스 코드를 해석하고 실행 해줌 = 생산성 우수
- 요즘은 워낙 성능이 좋아 둘 중 어떤게 빠르다고 논하기 힘들다고 함
-> JIT(Just In Time) 인터프리터와 컴파일러의 장점을 결합한 방식 -> 자바
'잡다한 CS' 카테고리의 다른 글
JOIN ( CROSS JOIN, INNER JOIN, RIGHT JOIN, LEFT JOIN, FULL OUTER JOIN ) (0) | 2023.04.13 |
---|
댓글