Compile Time
Compile time은 컴퓨터 프로그램 또는 코드를 CPU가 이해할 수 있는 즉, machine-readable 코드로 변환하는 단계를 의미한다.
- 이 과정은 compiler에 의해 실행 된다.
- Compiler를 사용하는 언어: C, Java...
- compile 중에 소스 언어의 코드는 특정 타겟 언어(byte)로 변환 된다.
- Compile 단계 이후에는 Load time을 거쳐 execution time으로 가게 되는데 여기서 execution time은 runtime에 포함 된다.
- Load time에는 프로그램이 메모리에 로드 된다(loader를 이용함).
- Load 시에는 loader가 프로그램이 지시사항을 읽어 실행에 필요한 리소스들이 준비될 수 있도록 한다.
Compile 과정 중 일어나는 일
- compile 중에는 syntax(문법적)나 semantic(의미론적) 분석을 진행한다.
- 즉, 사용 언어에 문법적 오류가 없는지 그리고 문법은 정상이나 실행의 결과가 원하는 대로 나오지 않는 경우는 없는 지를 분석한다.
- 컴퓨터의 특정 물리적 메모리 위치에 프로그램 명령을 연관시키는(association) 일을 한다.
Compiler를 사용하지 않는 언어 Python
- 파이썬은 C, 자바와는 달리 인터프리터에 의해 실행되는 스크립트 언어이다.
- 인터프리터는 소스 코드를 처음부터 한 줄씩 차례대로 해석(기계어로 변환)하며 실행하는 프로그램이다.
- 따라서 컴파일러에 비해 실행 속도가 느리다는 단점이 있지만 코드가 완전히 작성되지 않아도 작성된 부분까지만 테스트 하는 것이 가능하다.
Compile Errors
- Syntax Errors
- Semantic Errors
- a + b = c;
의 경우 좌변에 두 개 이상의 변수가 할당 되는 것이 불가능하기 때문에 c = a + b;
로 수정 되어야 한다. 따라서 이 경우 semantic error가 발생한다.
Run Time
Run time은 컴퓨터 시스템에 의해 프로그램이 실행 되는 단계를 말한다.
- Execution time이라고도 불리는 run time은 유저 또는 다른 os에 의해 프로그램이 종료되기 전까지 프로그램이 메모리 내에서 실행되는 시간을 말한다.
- Run time은 프로그램이 프레임워크, 컴포넌트 또는 라이브러리와 함께 메모리에 load되는 순간부터 시작 된다.
- 이 때 os가 프로그램이 run time 동안에 필요로 하는 메모리, 프로세스, I/O 리소스를 할당한다.
Run time Errors
런타임 에러는 개발자들이 디버깅 하기 어려운 에러 중 하나로, 예상했던 대로 코드가 실행되지 않는 경우에 발생한다.
런타임 에러는 os가 찾아내는 것이 아니며 trap이라는 자기 평가(self-assessment)를 통해 소프트웨어가 스스로를 진단해 발견한다. 보통 런타임 에러가 발생하면 프로그램이 종료되거나 frozen 상태에 도달하게 된다.
가능한 원인에는 여러가지가 있는데 보통 아래와 같은 것들이 있다.
- 실행 애플리케이션에 의한 이슈
- 메모리 이슈
- 소프트웨어 이슈
- 오래된 하드웨어
- 등등,,,,
일반적으로 발생하는 런타임 에러에는 다음과 같은 것들이 있다.
- ZeroDivisionError
- NullPointError
- Segmentation fault / bus error
- 존재하지 않는 메모리 위치에 접근하는 경우
- 무한 루프에 빠지는 경우