ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컴파일러와 인터프리터
    프로그래밍언어론 2023. 3. 6. 17:07

    컴파일과 실행

    고급 언어로 작성된 프로그램은 아래와 같이 실행된다.

     

     

    컴파일러는 고급 언어 소스 프로그램을 목적프로그램(.o파일)으로 번역한다.
    컴파일 후 사용자는 목적 프로그램을 운영체제에게 이를 실행하라고 요청한다.
    OS가 이해하고 다룰 수 있는 형식으로 작성된 기계어 프로그램을 목적코드라고 한다.

     

     


    고급 언어를 실행시키는 다른 방법이 있는데 바로
     해석기를 이용한 방법이다

     


    인터프리터는 컴파일러와 달리 응용프로그램이 실행시키는 주체 이다.
    컴파일러와 달리 응용프로그램이 이를 실행시키는 주체이다.
    실행 시 제어의 중심이 인터프리터 인데 보통 고급언어를 바로 해석하고 실행할 수 있는 가상 기계로 구현된다.
    고급 언어 프로그램을 한번에 하나 또는 여러개 읽어서 실시간으로 해석하고 실행시킨다.

    해석은 컴파일보다 더 큰 융통성을 가지고 있다.

    • 코드가 바로 실행되기 때문에 코드를 부분수정하여 실행시켜 디버깅 기능을 포함할 수 있다.
    • 변수의 크기나 유형등 프로그램이 실행되면서 필요에 따라 타입, 자료구조 등 무엇이든 바뀔수 있어 프로그램 작성 시 정해주지 않아도 되므로 유연하다.

    그러나 컴파일은 더 나은 성능을 제공한다.

    • 컴파일시점에 많은 것들을 결정하여 실행시간에는 이를 고려하지 않아도 된다.

    변수 x에 대해 특정 위치가 정해지면 실행 시점에는 이름의 위치나 타입을 고려 하지 않고 메모리 위치에서 값을 가져와서 실행시킨수 있다.
    이를 조기 바인딩이라고 한다.

    인터프리터는 x에 접근할 때 마다 변수의 의미 타입, 메모리 위치를 검색해야 한다.
    이를 지연 바인딩이라고 한다.

    프로그램은 보통 한번 컴파일 되면 여러 번 실행된다.
    따라서 이런 차이는 성능의 손해를 가져올 수 있다.
    완전 인터프리터 방식은 루프문에서 매번 소스 코드를 해석하고 실행해야 한다.

    물론 이를 합친 혼합 방법도 존재한다.

     

    자바가 대표적으로 혼합 모델을 사용한다.
    자바의 소스 프로그램은 컴파일 되어 중간코드(바이트코드)로 된 .class 파일을 생성한다.
    클래스 파일은 인터프리터인 VirutalMachine에 의해 실행된다.
    물론 변형방식으로 중간 코드를 기계어로 필요할때 번역하는 방식도 있다.

    JVM은 인터플리터의 역할로 바이트코드를 해석하고 실행시키는 것 이외에
    실행을 위한 메모리, 스레드 관리 기능을 제공한다.
    가상기계의 일부인 클래스 로더가 실행을 위한 클래스와 라이브러리를 찾고 이를 필요할 때 실행시킨다.
    또한 보안과 권한 제어의 역할도 담당한다.

     

    728x90

    '프로그래밍언어론' 카테고리의 다른 글

    바인딩  (0) 2023.03.11
    컴파일러 구조(~후단부)  (0) 2023.03.11
    컴파일러의 구조(~ 전단부)  (0) 2023.03.08
    라이브러리와 링크, 그리고 적시컴파일  (0) 2023.03.06
    언어론  (0) 2023.03.06

    댓글

Designed by Tistory.