2019.03.29 TIL

(TIL은 스스로 이해한 것을 바탕으로 정리한 것으로 오류가 있을 수 있습니다)

# 질문에 답하기

  1. 컴파일 언어 & 인터프리터 언어

  • 컴파일 언어와 인터프리터 언어는 컴파일 타임이 있느냐 없느냐, 즉 소스 코드를 분석하는 시점과 입력 데이터를 받는 시점이 언제냐에 따라 나뉜다.
  • 컴파일러 언어는 소스코드를 분석하는 컴파일 시간과 입력 데이터를 실행하는 런타임 시간이 따로 나누어져 있다.
  • 인터프리터 언어는 소스코드를 분석하는 컴파일 시간이 따로 없고 소스코드와 입력 데이터를 동시에 입력받아 결과물을 출력한다.

한장으로 먼저 보기

컴파일언어 인터프리터언어

컴파일 언어

컴파일 언어

출처: 컴퓨터 사이언스 부트캠프 with 파이썬 인터프리터 언어 분석

c언어를 예로 들면

  1. 소스 코드를 컴파일 하여 목적 파일 혹은 목적 코드인 기계어로 된 인스트럭션을 만들어 낸다.
  2. 링커는 필요한 라이브러리를 가져오고 여러개의 목적 파일을 묶어 실행 파일을 생성한다.
  3. 이제 프로그램을 실행하고 입력 데이터를 입력하면 결과 값을 도출한다.

인터프리터 언어

인터프리터언어

출처: 컴퓨터 사이언스 부트캠프 with 파이썬 인터프리터 언어 분석

파이썬을 예로 들면
일반적으로 컴파일러는 렉서와 파서로 구성된다.

렉서

렉서는 소스 코드(컴퓨터 입장에서는 문자)를 입력 받아 여러개의 토큰으로 변경시킨다.
토큰은 "나는 사과를 먹었다"는 문장을 <주어, "나는"> , <목적어, "사과를"> , <동사, "먹었다">와 같이 변수 또는 함수 이름, 연산자등으로 소스코드를 나눈다.

파서

파서는 토큰을 분석하여 분석 트리를 구성한다.
그리고 이 분석트리를 이용하여 추상 구문 트리를 만든다.
추상 구문 트리(Abstract Syntax Tree, AST)란 소스 코드의 구조를 나타내는 자료 구조이다. 추상 구문 트리를 바탕으로 심벌 테이블을 만들고 바이트 코드를 생성할 수 있다.

심벌 테이블은 변수나 함수의 이름과 그 속성을 기술 해 놓은 테이블이다.

추상 구문 트리와 심벌 테이블을 바탕으로 바이트 코드 인터스트럭션을 생성한다.

실행

그리고 이 바이트 코드 인터스트럭션은 파이썬 가상 머신인 PVM을 통해 실행된다. PVM은 굉장히 큰 무한 루프이다.

결론

  • 컴파일 언어는 대표적으로 C언어가 이에 해당하고, 대다수의 프로그래밍 언어가 이에 해당한다. 작성한 코드를 기계어로 번역을 해놓기 때문에
    실행 속도가 빠르고 보안성이 높다.
    하지만, 코드 수정을 조금이라도 한다면, 다시 컴파일을 해야 하기 때문에
    개발 기간이 오래 걸리지만, 개발 후 실행 속도는 가장 빠르다.

  • 인터프리터 언어는 대표적으로 python언어가 이에 해당되고, 컴파일 언어와는 달리 코드를 한 줄씩 번역, 실행하는 방식이다. 따라서 실행 속도는 컴파일 언어 보다 느리지만, 코드 수정시 바꾼 부분만 번역, 실행하여 빠르게 수정이 가능하다. 심지어 실행 중에도 수정이 가능하다.
    그리고, 컴파일 언어보다 문법이 쉬운 편이다. 단, 보안성이 떨어지는 편이다. 하지만, 작성이 빠르기 때문에, 빠른 아이디어 구현이 쉬워 빠른 프로그램 구현이 가능하다.

+ Recent posts