[CS] Compiler / Interpreter 특징

Onam Kwon·2022년 9월 11일
0

CS

목록 보기
11/22

Compiler(컴파일러)

  • compile: Source code 전체를 스캔하여 한꺼번에 기계어로 번역(재구성)하는 과정.
    • 때문에 프로젝트의 규모가 클수록 초기에 build하는 과정이 오래걸리지만 컴파일 후 모든 소스가 기계어로 되어있기 때문에 실행속도는 빠르다.
  • 런타임 이전에 이미 해석을 마치고 대게 컴파일 결과물이 바로 기계어로 전환되기 때문에 OS 및 빌드환경에 영향을 많이 받는다.
    • 따라서 OS 환경에 맞게 호환되는 라이브러리와 빌드환경을 구분해 구축해야 함.
  • interprete언어보다 빠르며 컴파일 하는 과정중 전체 코드를 읽기때문에 프로그램이 동작하기 전에 에러 확인이 가능하다.
  • 컴파일러는 프로그램이 작성된 기계상에서 실행할때 효율적이다. 대부분의 하드웨어 제어 시스템 프로그래밍 언어가 C언어인 이유가 여기서 나온다.
    • 하지만 이와 동시에 기계 종류에 종속된다.
  • 대표 언어: C C++ Java(자바는 인터프리터도 사용함).

Java

  • .java파일을 작성 후 javac HelloWorld.java 명령어를 통해 자바 컴파일러로 부터 .class 파일을 얻을 수 있다.
    • 이때 .class파일은 byte code파일이다. JVM에 의해 처리되며 여기서 인터프리터가 개입해 machine language(기계어)로 번역한다.
      • 따라서 자바는 C C++보다 빠를 순 없다. 하지만 인터프리터가 사용 환경에 알맞게 기계어 번역을 해주기 때문에 다양한 환경에서 사용하기 편하다.
      • 자바의 장점중 하나인 다양한 OS에서 사용하기 편함이 여기서 나온다.

  • javac 명령어로 인해 생성된 .class파일은 java HelloWorld명령어로 실행될 수 있다.

Interpreter(인터프리터)

  • interprete: 컴파일 언어와 다르게 한번에 한줄씩 실행. 따라서 중간에 에러를 만난다면 그때 에러 확인이 가능함.
    • 런타임 이후에 줄단위로 해석하며 실행함.
  • 번역과 실행이 동시에 이루어져서 OS환경에 맞는 라이브러리와 빌드환경의 구축환경 없이 바로 실행이 가능하므로 별도의 별도의 실행 파일이 존재하지 않는다.
  • 대부분의 인터프리터 언어는 해석을 위한 VM 위에서 Interpret 을 수행하게 되는데, 이 때 해석의 기반이 되는 머신들이 OS 환경들을 지원해주며, 인터프리터는 이런 방식으로 OS 및 플랫폼 에 종속되지 않는 프로그램 구동이 가능하게 됨.
    • 이런 특징을 지닌 InterpreterJavaJVMPythonAnalyzer 가 있다.
      • 파이썬이 속도가 느린 이유.
  • 대표 언어: python ruby javascript

References

profile
권오남 / Onam Kwon

0개의 댓글