Back to Blog
DEVELOPMENT ·

Compilation Process of Compiled Languages, Interpreted Languages, and JIT

Compiled Languages

장점

단점

Compilation Process

우리가 C 프로그램을 컴파일하고 실행하는 방법

지정된 이름을 넣어 소개하는 함수를 만들었다. 이러한 c파일은 아래의 과정을 거쳐서 컴파일된다.

컴파일 프로세스에는 어떤 과정이 있을까?

  1. Pre-processing(전처리)
  2. Compile(컴파일)
  3. Assembly(어셈블리)
  4. Linking(링킹)
gcc -Wall -save-temps HelloWorld.c -o HelloWorld

Pre-Processor(HelloWorld.c -> HelloWorld.i)

아직까진 코드의 형태를 알아볼 수 있다.

알 수 있는 것들

그래서 전처리기가 하는 일은?

Compiler(HelloWorld.i -> HelloWorld.s)

아직까지도 드문드문 코드의 의미를 파악할 수 있다.

알 수 있는 것들

그래서 컴파일러가 하는 일은?

Assembler(HelloWorld.s -> HelloWorld.o)

이제는 코드가 알아볼 수 없는 형태로 바뀌었다.

알 수 있는 것들

그래서 어셈블러가 하는 일은?

Linker(HelloWorld.o -> HelloWorld)

Interpreted Languages

장점

단점

Compiled vs Interpreted

Hybrid Languages(JIT)

Adaptive Compilation

https://meetup.nhncloud.com/posts/77

동적 타입 문제

// add r2, r2, r0 : virtual register R0, R2를 더하여 R2 register에 저장
ldr    r2, [r4] // R0의 값을 r2에 저장
ldr    r7, [r4, #4] // R0의 타입 정보를 r7에 저장
ldr    r0, [r4, #16] // R2의 값을 r0에 저장
ldr    r1, [r4, #20] // R2의 타입 정보를 r1에 저장
cmn    r1, #1 // R2의 타입이 int인지 체크
bne    0x4121e2c0 // R2의 타입이 int가 아닐 경우 Slow Case
cmn    r7, #1 // R1의 타입이 int인지 체크
bne    0x4121e310 // R1의 타입이 int가 아닐 경우 Slow Case
adds   r0, r0, r2 // R0와 R2의 값을 더함
bvs    0x4121e498 // Overflow 발생 시 Slow Case
str    r0, [r4, #16] // 덧셈 결과를 R2에 저장
b      0x4121e33c // 점프

hotspot 문제

이를 해결하기 위한 Adaptive Complication

결론