https://stackoverflow.com/questions/846103/runtime-vs-compile-time
compil-time 과 Run-time의 차이가 무엇인지에 대한 아티클입니다.
Whats the difference between Run-time and compile-time
컴파일 타임과 런타임의 차이점은 이론가들이 단계 구별(phase distinction
) 이라고 부르는 것의 예입니다. 특히 프로그래밍 언어에 대한 지식이 부족한 사람들에게 가장 어려운 개념중 하나 입니다.
이 문제에 접근하기 위해 다음과 같은 질문을 하는 것이 도움이 됩니다.
- 프로그램은 어떤 불변 조건을 만족합니까?
- 이 단계에서 무엇이 잘못 될 수 있습니까?
- 이 단계가 성공하면 사후 조건은 무엇인가요?(우리는 무엇을 아나요?)
- 입력 및 출력은 무엇 입니까?
Compile time
- 프로그램은 불변조건을 만족시킬 필요는 없습니다. 사실 그것은 잘 구성된 프로그램일 필요가 없습니다. 이 HTML을 컴파일러에 공급하여 barf로 볼수 있습니다.(?)
- 컴파일 타임에 무엇이 잘못될수 있습니까?
- Syntax errors(구문오류)
- Typechecking errors(유형 검사오류)
- (Rarely) compiler crashes 드물게 컴파일러가 충돌
- 컴파일러가 성공한다면 우리는 무엇을 알고 있습니까?
- 프로그램은 잘 형성되었습니다. 어떤 언어로도 의미 있는 프로그램입니다
- 프로그램을 실행할 수 있습니다.(프로그램이 즉시 실패 할 수도 있지만 적어도 시도 할 수 있습니다.)
- 입력과 출력은 무엇입니까?
- 입력(input)은 프로그램이 컴파일되는 프로그램, 컴파일할떄 필요한 헤더파일, 인터페잇, 라이브러리 또는 다른 추가적인것들(needed to import in order to get compiled)을 더한것입니다.
- 출력(out put)은 어셈블리 코드 또는 메모리에 재배치 가능한 객체 또는 실행 가능한 프로그램 일 것입니다. 또는 문제가 발생하면 오류메세지를 출력할수 있습니다.
Run time
- 우리는 프로그램의 불변(invariants) 변수들에 관해 아무것도 모릅니다. 프로그래머가 누구든지 상관없습니다. 런타임 불변은 컴파일러만으로는 거의 강제적으로 적용되지 않습니다. 프로그래머의 도움이 필요합니다.
- 무엇이 런타임 오류를 발생시킵니까?
0
으로 나누기- null 포인터를 참조
- 메모리 부족
- 또한 프로그램 자체에서 감지되는 오류가 있을수 있습니다.
- 존재하지 않는 파일을 열려고 시도
- 잘 형성되지 않은 URL 찾기 시도 혹은 형성되지 못한 것을 발견
- 런타임이 성공하면 프로그램은 충돌없이 완료됩니다.
- 입력(input), 출력(output)은 전적으로 프로그래머에게 달려 있습니다. 파일, 스크린 화면, 네트워크 패킷, printer로 전송된 작업 등의 이름을 지정합니다. 프로그램을 실행하면 그것이 결과이고, 단지 런타임에 발생합니다.
Reference
https://stackoverflow.com/questions/846103/runtime-vs-compile-time
https://www.youtube.com/watch?v=pWUi1HKr0MI