인터프리트, 하이브리드, JIT

번역하지 않고 소스를 바로 실행하면 어떻게 될까?

순수 인터프리트

한 문장씩 읽어 바로 실행합니다

순수 인터프리트(pure interpretation)는 번역을 하지 않습니다. 인터프리터라는 프로그램이 소스를 한 문장씩 해석해 그 자리에서 실행합니다. 반복되는 문장은 돌 때마다 다시 해석합니다.

예시입니다. console.log(i)는 i의 값을 찍습니다. 세 번 도는 반복문이라 네 문장을 모두 11번 해석합니다.

장점과 단점

오류는 바로 보이고, 실행은 느립니다

실행하던 문장에서 오류를 바로 보여 주니 고치기 쉽습니다. 대신 문장을 매번 다시 해석하느라 컴파일한 프로그램보다 10배에서 100배 느리고, 메모리도 더 쓰는 경우가 많습니다.

한동안 드물었지만 JavaScript, PHP 같은 웹 스크립팅 언어에서 다시 많이 쓰입니다.

하이브리드

반쯤 번역해 두고 실행합니다

하이브리드 구현(hybrid implementation)은 소스를 해석하기 쉬운 중간 언어로 번역해 두고, 그것을 인터프리터가 실행합니다. 그래서 순수 인터프리트보다 빠릅니다.

자바의 처음 구현이 이 방식입니다. 중간 언어가 바이트 코드(byte code)이고, 실행하는 쪽이 자바 가상 머신(JVM)입니다.

JIT

부를 때 번역하고 보관합니다

JIT(just-in-time) 구현은 먼저 중간 언어로 번역해 둡니다. 함수 같은 서브프로그램이 처음 불릴 때 그것을 기계어로 번역하고, 보관해 두었다가 다음부터는 그대로 씁니다.

그림의 f와 g는 서브프로그램의 이름입니다. 자바와 .NET 언어가 이 방식을 씁니다.

견주어 보면

언제 번역하느냐가 다릅니다

컴파일은 미리 다 번역해서 빠르지만, 기계어는 기계마다 달라 옮기기 어렵습니다. 순수 인터프리트는 그 반대입니다. 하이브리드와 JIT는 속도와 이식성을 함께 노립니다.

이식성은 4편에서 본, 다른 환경으로 옮기기 쉬운 정도입니다.

프로그래밍 환경

언어만으로는 만들 수 없습니다

소프트웨어를 만들 때 쓰는 도구들의 모음을 프로그래밍 환경(programming environment)이라고 합니다. UNIX, Visual Studio .NET, NetBeans가 그 예입니다.

디버거는 오류를 찾는 도구이고, 통합 개발 환경(IDE)은 도구들을 한 화면에 모은 것입니다.

다음 강의

2강은 언어의 생김새와 뜻을 정확히 적는 법입니다

1강 끝목록으로 돌아가기