일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C
- algorithmtraining
- 재테크
- 책을알려주는남자
- 알고리즘 공부
- 자바
- 주식
- 알고리즘트레이닝
- 성분
- 자바스크립트
- 돈
- 서평
- 화장품
- 백준알고리즘
- 경제
- 독후감
- 다독
- 프로그래밍언어
- 알고리즘공부
- 지혜를가진흑곰
- C++
- Java
- JavaScript
- 채권
- 책알남
- 독서
- algorithmTest
- 투자
- 프로그래머스 알고리즘 공부
- algorithmStudy
- Today
- Total
탁월함은 어떻게 나오는가?
[Computer Science] 런타임(runtime), 컴파일러(compiler)와 컴파일러 타임(compiler time)에 대해서 알아보자 본문
[Computer Science] 런타임(runtime), 컴파일러(compiler)와 컴파일러 타임(compiler time)에 대해서 알아보자
Snow-ball 2022. 11. 13. 12:17런타임에 대해서..
런터임(runtime > 실행시간)은 컴퓨터 과학에서 컴퓨터 프로그램이 실행되고 있는 동안의 동작을 말한다. "런타임"이라는 용어는 컴퓨터 언어 안에서 쓰인 프로그램을 관리하기 위해, 특정한 컴파일러나 가상 머신이 사용하는 기본 코드의 라이브러리나 프로그램을 통틀어 런타임 라이브러리라고도 일컫는다.
런타임 환경(runtime environment)은 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태이다. 운영 체제 자체에 속하는 경우도 있고 운영 체제에서 작동하는 소프트웨어를 뜻할 수도 있다.
- 위키 백과 -
우리가 평소에 이야기하는 런타임이란 결국 프로그래밍 언어가 구동되는 환경이다. 위의 위키백과의 기준으로는 런타임 환경을 지칭한다고 보면 될듯 하다. 그렇기 때문에 자바스크립트 기준으로는 Node.js나 클롬 등의 여러 브라우저들은 자바스크립트가 구동되는 환경이기 때문에, Node.js or browser 들이 JavaScript Runtime이 된다.
좌측 : 런타임 그림 / 우측 JavaScript Chrom Rutime
컴파일러와 컴파일 타임에 대해서..
컴파일러(compiler, 해석기 or 번역기)는 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램을 말한다. 컴파일러는 고급 프로그래밍 언어를 실행 프로그램으로 만들기 위해 저급 프로그래밍 언어(ex: 어셈블리 언어, object 코드, machine code)로 바꾸는데 사용된다. 원래의 문서를 소스 코드 혹은 원시 코드라고 부르고, 출력된 문서를 목적 코드라고 부른다. 목적 코드는 주로 다른 프로그램이나 하드웨어가 처리하기에 용이한 형태로 출력되지만 사람이 읽을 수 있는 문서 파일이나 그림 파일 등으로 옮기는 경우도 있다. 원시 코드에서 목적 코드로 옮기는 과정을 컴파일이라고 한다.
컴파일러는 소스 프로그램을 읽어서 즉시 결과를 출력하는 인터프리터와는 구분된다. 그러나 현대에 들어 많은 인터프리터가 JIT 컴파일 등의 기술로 실시간 컴파일을 수행하므로, 컴파일러와 인터프리터 사이의 기술적 구분은 사라져 가는 추세이다.
소크코드를 컴파일하는 이유는 대부분 사람에게 이해하기 쉬운 형태의 고수준 언어로부터 실행가능한 기계어 프로그램을 만들기 위해서이다. 좁은 의미의 컴파일러는 주로 고수준 언어로 쓰인 소스 코드를 저수준 언어(어셈블리어, 기계어 등)로 번역하는 프로그램을 가리킨다.
- 위키 백과 -
컴파일 타임(compile time)은 컴파일러에 의해 수행되는 동작(컴파일 타임 동작), 성공적으로 컴파일되기 위해서 소스 코드가 충족해야 하는 프로그래밍 언어 요구사항(컴파일 타임 요구사항), 또는 컴파일 동안 추론될 수 있는 프로그램의 속성을 나타낸다.
컴파일 타임에 수행되는 동작은 보통 구문 분석, 다양한 종류의 의미 분석(예를 들면 타입 검사 등) 그리고 코드 생성이다.
프로그래밍 언어 정의들은 보통 소스 코드가 충족해야 할 컴파일 타임 요구사항을 명시한다. 예를 들면, 언어는 추론될 수 있는 타입과 변수들에 의해 요구되는 저장소의 양을 규정한다.
범위 검사(예를 들면 배열 인덱스가 배열 경계를 초과하면 안된다 같이), 병행 언어에서의 데드락 자유 또는 타이밍(예를 들면 코드들이 할당되 시간의 양보다 더 많이 가져서는 안된다는 것 같이)을 포함하는 프로그램의 속성들은 컴파일 타임에 추론될 수 있다.
컴파일 타임은 링크 타임(하나 이상의 컴파일된 파일들이 같이 합쳐질 때)과 런타임(프로그램이 실행되었을 때) 전에 발생한다. 어떤 프로그래밍 언어에서는 이것은 런타임 시에 몇몇 컴파일과 링킹이 일어날 필요가 있다. 컴파일 타임과 링크타임 사이에는 트레이드 오프가 있는데, 많은 컴파일 타임 동작들은 추가적인 런타임의 초래 없이 링크 타임에 따라 달라질 수 있다.
"컴파일 타임"은 또한 컴파일 시에 요구되는 시간의 양을 나태내기도 한다.
- 위키 백과 -
정리하자면, 개발자가 작성한 소스코드를 기계가 이해하기 위해서는 아래와 같은 컴파일 과정이 필요하다. 그리고 기계가 읽을 수 있는 형태로 변환되는 과정을 컴파일 타임이라고 한다.
컴파일 과정에서 소스 코드를 전처리하고 컴파일러에 의해 기계가 이해할 수 있는 저 수준 언어로 작성된 목적 파일로 변경한 후, 목적 파일들을 링커가 하나의 실행 파일로 만들어 주게 된다. 실행파일에는 소스코드, 정적 라이브러리들이 포함된다. 실행 파일에 들어가는 메모리의 양을 줄이고, 라이브러리 데이터가 중복되지 않기 위해 동적 링크 라이브러리(Dynamic-link Library, DLL)를 사용해 실행파일과 분리시킬 수 있다. DLL 또한 컴파일러에 의해 컴파일 된다.
DLL은 다음과 같은 장단점이 있다.
- DLL을 사용하는 프로그램이 여러개 있어도, 한 번만 메모리에 적재하고 DLL을 공유한다.
- 라이브러리 내용이 수정되어도 실행 파일을 다시 컴파일 할 필요가 없다.
- 실행 파일의 크기가 줄어든다.
런타임과 컴파일의 차이점 어떤것일까??
런타임과 컴파일타임은 소프트웨어 프로그램 개발의 서로 다른 두 계층의 차이를 설명하기 위한 용어이다.
프로그램을 생성하기 위해서 개발자는 소스코드를 작성하고 컴파일이라는 과정을 통해 기계어 코드로 변환 되어 실행 가능한 프로그램이 되며, 이러한 편집 과정을 컴파일타임(Compiletime)이라고 부른다.
컴파일 과정을 마친 프로그램은 사용자가 열고 실행할 수 있다. 응용프로그램이 동작되어지는 때를 런타임(Runtime)이라고 부른다.
"런타임"과 "컴파일 타임"이라는 용어는 종종 서로 다른 두 가지 타입의 에러를 나타내기 위해 사용된다. 컴파일 타임 에러는 프로그램이 성공적으로 컴파일링되는 것을 방해하는 신텍스에러(Syntax error)나 파일 참조 오류 같은 문제로 인해 프로그램이 성공적으로 컴파일 되지 않는다. 컴파일러는 컴파일 타임 오류를 생성하고 일반적으로 문제를 일으키는 소스 코드 행을 가르켜준다.
어떤 소스코드가 이미 실행가능한 프로그램으로 컴파일 되었다 할지라도 이것은 여전히 프로그램의 실행중에 버그를 일으킬 수 있다. 예를 들자면, 예상치 못한 오류 또는 충돌로 동작하지 않을 수 있는데 이렇게 프로그램이 실행중에 발생하는 형태의 오류를 런타임 오류라고 한다.
컴파일 타임 오류 유형 : 1) 신택스 오류 2) 타입 체크 오류
런타임 오류 유형 : 1) 0 나누기 오류 2) 널(Null)참조 오류 3) 메모리 부족 오류
referance
* 컴파일/런 타임 (Compile/Run Time) - Hyeonjun Jang
* [JavaScript] 자바스크립트 런타임 - Beomy
* PC.net