본 글은 이 글( link ) 을 읽고 작성합니다.
텍스트로 된 소스코드가 실행가능한 프로그램 파일로 변하는 과정을 빌드(Build) 라고 부른다. Build 안에는 compile, preparse, preprocess, link 등의 다양한 과정이 포함되어있다.
소스코드가 빌드가 되는 방식에 따라 프로그래밍 언어의 종류를 몇가지로 나눌 수 있다. 그 분류는 아래와 같다.
id | type | description |
---|---|---|
1 | Compile language | 소스코드가 기계어로 바로 번역되어 실행파일이 됨 |
2 | Byte Code language | 소스코드가 가상 머신이 읽는 바이트코드 파일로 번역되고, 그 바이트코드가 인터프리터처럼 한줄씩 기계어로 번역되 실행됨 |
3 | Interpreter language | 소스코드가 한줄씩 기계어로 번역되어 실행됨 |
컴파일 언어는 소스코드가 기계어 실행파일로 바로 빌드된다. 컴파일 언어의 빌드 과정은 보통 Preprocessing->Parser->Translation->Assembler->Linker 의 과정을 거친다. C, C++ 등의 언어가 이곳에 속한다.
장점
단점
.exec
,윈도우는 .exe
확장자명의 실행파일)순서 | 과정 | description |
---|---|---|
1 | Preprocessor (전처리기) | #define 같은 매크로나 지시자를 소스코드로 변경하고, c파일이 i파일이 된다 |
2 | Parser (문법검사) | Syntax(코드 문법)을 검사하고, 문법에 따라 코드를 쪼갠다 |
3 | Translation (번역) | 문법 파싱이 끝난 소스코드를 어셈블리어로 번역하고, i파일이 s파일이 된다 |
4 | Assembler (번역) | 어셈블리어를 기계어만큼 낮은 수준의 언어로 번역하고, s파일이 o(object,바이너리,기계어) 파일이 된다 |
- | - | 여기까지를 보통 Compile (소스코드->기계어) 이라고 칭함 |
5 | Linker (object파일연결) | 작성된 소스코드가 사용하는 OS API(시스템 콜) 이나 표준 라이브러리를 연결시켜서, exe 파일(실행파일)로 만든다. |
작성된 소스코드가 컴파일러(Compiler)를 거치면서 가상머신이 읽을 수 있는 바이트코드(가상머신 기계어)로 번역(Compile)된다. 가상머신은 하나의 프로그램으로, 어느 OS 위에나 설치할 수 있다. 가상머신은 자신이 읽을 수 있는 기계어로 번역된 바이트코드를 다시 Native OS 가 읽을 수 있는 바이트코드(기계어)로 번역한다. JVM (java virtual machine) 을 사용하는 언어들 (Java, Kotlin, Scala 등)이 이곳에 속한다.
가상머신을 Runtime Environment 라고 부를 수 있다.
장점
단점
순서 | 과정 | description |
---|---|---|
1 | Compile (컴파일) | 가상머신일 읽을 수 있는 바이트코드로 번역되고, .java 파일이 .class 파일로 변한다 |
2 | Virtual Machine | 가상머신에서 바이트코드가 기계어로 번역되어진다 |
소스코드를 한 줄씩 번역해서 실행한다. 이 한 줄씩 번역하는 프로그램을 Interpreter 라고 한다. 한 줄씩 번역되므로 실행시 메모리 소비가 적다. Python 등의 언어가 이렇다.
장점
단점