컴파일러 성능, Destination Driven 방식으로 개선!

by DD
5개월 전
조회수 7

Destination Driven Compilation은 컴파일러가 생성하는 코드의 최적화를 목표로 하는 기술임

기존의 Context-sensitive emission 방식과 비교하여 불필요한 IIFE와 임시 변수를 줄여 성능을 향상시킴

개발자들은 컴파일러 설계 방식의 변화가 코드 생성 효율성을 높일 수 있다는 점에 주목함

Context-sensitive Emission vs. Destination-driven Compilation

Context-sensitive emission 방식은 각 노드에 expression/statement 플래그를 부여하여 코드 생성을 제어한다. 구체적으로, 표현식 위치에서 값을 생성하고, 문장 위치에서는 부작용을 발생시킨다. 따라서, 불필요한 IIFE와 임시 변수가 생성될 수 있다. 반면, Destination-driven compilation은 각 노드가 value/effect/tail의 목적지를 가지며, 불필요한 래퍼를 제거하여 코드 최적화를 달성한다.

Destination-driven Compilation의 장점

Destination-driven compilation은 코드 생성 과정에서 불필요한 단계를 줄여 성능을 향상시킨다. 구체적으로, 임시 변수의 사용을 최소화하고, 불필요한 코드 정리 단계를 줄인다. 따라서, 컴파일된 코드의 실행 속도가 향상되고, 메모리 사용량이 감소한다. 결과적으로, 개발자는 더 효율적인 코드를 얻을 수 있다.

실제 적용 및 고려 사항

Destination-driven compilation은 컴파일러 설계에 근본적인 변화를 요구한다. 따라서, 기존 컴파일러를 리팩토링하거나 새로운 컴파일러를 설계할 때 적용할 수 있다. 구체적으로, IR(Intermediate Representation)을 변경하고, 코드 생성기를 Destination 기반으로 구현해야 한다. 따라서, Kent Dybvig의 연구를 참고하여 실제 프로젝트에 적용하는 것을 권장한다.

Destination Driven Compilation