Compiler, Runtime

kimji1
8 min readFeb 24, 2020

--

Compiler

  • programming language로 쓰인 computer code를 다른 language로 변환해주는 컴퓨터 프로그램
  • compiler라는 이름은 기본적으로 high level programming language source code 를 실행가능한 프로그램을 만들기 위해 lower lever language(assembly language, object code, machine code 등)로 변환하는 것

Compile-time

Compile time refers to the time duration in which the programming code is converted to the machine code (i.e binary code) and usually occurs before runtime.

  • compile time에 수행되는 연산에는 systax analysis, sematic analysis(type checks, instantiation of template), code generation이 있음

Compilation strategies

Just-in-time(JIT, dynamic translation, run-time compilations)

  • 실행 시점에 바이트 코드를 원시 시스템 코드(기계어)로 컴파일하여 애플리케이션의 성능을 향상시키는 런타임 환경의 컴포넌트
  • 프로그램의 실행 속도를 빠르게 하기 위해 사용
  • 실행 시점에서 인터프리트 방식으로 기계어 코드를 생성하면서 그 코드를 캐싱하여 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는 것을 방지함
  • 중간 코드가 실행되는 동안 기본 실행을 위해 중간 코드를 기계어로 컴파일하여 응용 프로그램의 성능이 저하 될 수 있음

Ahead-of-time(AOT)

  • 목표 시스템의 기계어와 무관하게 중간 언어 형태로 배포된 후 목표 시스템에서 인터프리터나 JIT 컴파일 등 기계어 번역을 통해 실행되는 중간 언어를 미리 목표 시스템에 맞는 기계어로 번역하는 방식
  • 실행 중이 아니라 실행 전에 컴파일을 수행하여 JIT에서 실행 중에 기계어로 컴파일하는 과정이 필요하지 않음

& Dalvik, ART

  • 컴파일 방식에 차이가 있음
  • Dalvik — JIT: 실행 시점에 소스코드를 번역하기 때문에 설치는 빠르지만 실행 시점에 느림
  • ART — AOT: 설치 시점에 소스코드를 번역하기 때문에 설치가 느리고 번역을 해서 저장해놓기 때문에 용량도 크지만 실행 시점에 미리 번역한 파일을 실행하므로 실행 시점에 빠름

Runtime System(Environment)

  • stack, heap 영역을 설정하고 관리함
  • garbage collection, thread 또는 언어에서 제공하는 다른 동적 기능을 포함

Runtime(Execution time)

  • CPU가 machine code를 실행하는 시간
  • runtime error: 프로그램을 실행한 후 감지,
    반면 compile-time error는 compiler에서 프로그램을 실행하기 전에 감지.
  • compile-time 에는 type checking, register allocation, code generation, code optimization이 일반적으로 수행되지만 특정 언어 및 컴파일러에 따라 runtime에 수행되기도 함.
  • runtime error는 0으로 나누기, domain 에러, 배열 index bounds 에러, 산술 underflow, overflow 에러 등 많은 runtime error가 일반적으로 발생하거나 발생하지 않을 수 있는 software bug.

Interpreter

  • machine lagunage 로 compile 과정 없이 programming 또는 scripting 언어로 작성된 program을 바로 실행하는 것, 아래 세 가지 중 하나의 전략 사용.
    _1. source code를 parsing 하고 바로 그 작업을 수행
    _2. source code를 효율적인 중간 표현으로 변환하고 즉시 실행
    _3. interpreter system의 일부인 컴파일러에 의해 미리 컴파일된 코드를 명시적으로 실행

Virtual Machine

  • 컴퓨터 구조를 기반으로하며 실제 컴퓨터의 기능을 제공하는 에뮬레이션

System virtual machines(full virtualization VMs)

  • 실제 기계를 대체
  • 전체 OS를 실행하기 위한 기능들을 제공

Process virtual machines

  • platform-independent 환경에서 프로그램을 실행하기 위해 고안됨
  • high-level programming language의 고수준의 추상화 제공
  • interpreter는 사용하여 구현됨
  • JIT 컴파일을 사용하여 컴파일된 프로그래밍 언어와 비슷한 성능을 얻을 수 있음

Types of code

Source code

Object code

Bytecode

Machine code

Microcode

https://www.ibm.com/support/knowledgecenter/ko/SSYKE2_8.0.0/com.ibm.java.vm.80.doc/docs/jit_overview.html

--

--

kimji1
kimji1

No responses yet