컴퓨터

컴파일러, 인터프리터

업무 중 2021. 1. 27. 22:55

한 언어에서 다른 언어로 번역하는 프로그램을 컴파일러라고 부른다. 컴파일러는 무조건 기계어로 번역 할 필요는 없다. 예를들어 자바 -> C언어로 번역하는 번역기도 컴파일러이다. 여기서은 고급언어에서 기계어로 번역하는 컴파일러에 대해 이야기 하겠다. 컴파일러는 우리가 작성한 프로그램을 한꺼번에 기계어로 번역한다. 컴파일러를 실행시키면 보통 번역해야 할 언어의 파일들과 번역 결과를 저장 할 파일의 이름을 받는다. 그리고 그 파일들을 모두 번역해서 하나의 바이너리(또는 어셈블리)파일로 저장한다. 그러면 이후에 사용자가 이 바이너리 파일을 실행시키면 프로그램이 실행되는 것이다. 즉, 컴파일러가 필요한 프로그래밍 언어는 1. 프로그램을 작성한다 2. 컴파일을 한다. 3. 실행을 한다. 이렇게 세가지 과정을 거쳐 실행된다.

장점은 무엇일까? 바이너리를 실행시키는 것이기 때문에 실행속도가 인터프리터에 비해 빠르다.

단점은 무엇일까? 앞서 말했듯이 컴퓨터의 칩마다 명령어 셋이 다를 수 있다. 따라서 한 컴퓨터에서 컴파일 해서 실행한 프로그램은 명령어 셋이 다른 컴퓨터에서 동작하지 않을 수 있다. 따라서 명령어 셋이 다른 컴퓨터 마다 컴파일을 해 줘야 한다. (e.g, 윈도우즈에서 x86과 x64를 구분해서 다운받는 이유이다.) 이런 언어들을 보통 프로그래밍 언어라고 부른다. C가 대표적인 예이다.

인터프리터는 번역해야 할 파일을 받아 한 줄씩 실행시킨다. 예를들어 배시 인터프리터를 실행시키면 배시 인터프리터가 해당 파일의 첫번째 줄을 읽어 기계어 명령어로 번역 한 후 CPU에 바로 돌린다. 즉 인터프리터가 필요한 명령어는 1. 프로그램을 작성한다. 2. 인터프리터에 실행시킨다. 이렇게 작성된다.

장점은 무엇일까? 인터프리터만 설치되어 있으면 같은 프로그램(스크립트)을 다른 컴퓨터에서도 실행 시킬 수 있다. 단점은 무엇일까? 인터프리터가 실행할 때마다 1. 번역한다, 2. 실행한다를 거쳐야 한다. 이렇게 두 가지 일을 해야 하니 그냥 바이너리 파일을 냅다 실행시키기만 하는 컴파일된 프로그램에 비해 속도가 느릴 수 밖에 없다.

이렇게 인터프리터가 번역해야하는 프로그래밍 언어를 '스크립팅' 언어라고 부른다. Javascript, Python(바이트코드 인터프리터), PHP(바이트코드 인터프리터)등이 이에 해당된다. 어떤 언어들은 바로 기계어로 번역되고, 어떤 언어들은 바이트코드로 한번 컴파일 된 후 해석(interpret)된다.



출처: https://imasoftwareengineer.tistory.com/43 [삐멜 소프트웨어 엔지니어]

'컴퓨터' 카테고리의 다른 글

클라우드 컴퓨팅 서비스 모델  (0) 2021.02.02
교착상태  (0) 2021.02.02
세마포어와 뮤텍스의 차이  (0) 2021.01.29
운영체제(OS)란?  (0) 2021.01.28
인터럽트 우선순위  (0) 2021.01.22