더북(TheBook)

2.1.8 런타임

자, 드디어 사용자 프로그램을 실행 가능한 형태로 바꿨다. 이제 실행하는 일만 남았다. 기계어로 컴파일했다면 그냥 운영 체제에게 실행 파일을 로드하라고 얘기하면 되고, 바이트코드로 컴파일했다면 VM을 기동 후 프로그램을 로드하면 된다.

두 가지 경우 모두 가장 기반이 되는 로우레벨 언어지만, 프로그램 실행 중에 언어가 기본 제공하는 몇 가지 서비스가 필요하다. 예를 들어 메모리를 자동으로 관리하는 언어라면 미사용 메모리를 회수하는 가비지 수집기가 필요하다. instance of로 객체 타입을 테스트하는 기능이 지원되는 언어라면 실행 중에 각 객체의 타입을 추적하는 데 몇 가지 표현이 필요하다.

이런 일들은 모두 런타임에 이루어지기에 그냥 뭉뚱그려 런타임(runtime)이라고 한다. 컴파일 언어에서 런타임을 구현한 코드는 결과 실행 파일에 직접 삽입된다. 예를 들어, 고(Go) 언어로 컴파일된 애플리케이션은 각각 고의 런타임 사본을 내부에 하나씩 갖고 있다. 인터프리터나 VM 내부에서 실행되는 언어는 런타임 역시 이 내부에 상주한다. 자바, 파이썬, 자바스크립트 등의 언어 구현체가 대부분 이런 식으로 작동된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.