계층적 그래프 재작성으로 구현하는 평가 전략

본 논문은 함수형·제약식 동시성 언어 CCFL을 계층적 그래프 재작성 언어 LMNtal로 컴파일하는 과정에서 평가 전략을 어떻게 구현할 수 있는지를 제시한다. LMNtal의 로컬 연산 공간과 규칙·프로세스의 마이그레이션 메커니즘을 활용해 call‑by‑value, call‑by‑need, 병렬 평가 등 전형적인 전략을 간결하게 인코딩한다.

계층적 그래프 재작성으로 구현하는 평가 전략

초록

본 논문은 함수형·제약식 동시성 언어 CCFL을 계층적 그래프 재작성 언어 LMNtal로 컴파일하는 과정에서 평가 전략을 어떻게 구현할 수 있는지를 제시한다. LMNtal의 로컬 연산 공간과 규칙·프로세스의 마이그레이션 메커니즘을 활용해 call‑by‑value, call‑by‑need, 병렬 평가 등 전형적인 전략을 간결하게 인코딩한다.

상세 요약

CCFL은 함수형 프로그래밍과 제약 기반 동시성을 결합한 언어로, 평가 전략에 따라 프로그램의 실행 성능과 동시성 특성이 크게 달라진다. 기존 컴파일러 설계에서는 전략별 스케줄러를 별도로 구현하거나, 런타임에 전략 선택을 위한 복잡한 메타데이터를 관리해야 하는 단점이 있었다. 논문은 이러한 문제를 LMNtal의 계층적 그래프 재작성 모델을 이용해 근본적으로 해결한다. LMNtal은 원자(노드)와 연결(엣지)으로 구성된 그래프와, 그래프 변환 규칙을 선언적으로 정의할 수 있는 언어이며, ‘셀(cell)’이라는 독립적인 연산 공간을 계층적으로 중첩시킬 수 있다. 저자는 CCFL의 함수 호출, 변수 바인딩, 제약 전파 등을 각각 하나의 셀에 매핑하고, 셀 간에 규칙과 프로세스를 이동시키는 ‘마이그레이션 연산’을 통해 평가 전략을 구현한다.

예를 들어 call‑by‑value 전략에서는 함수 인자를 평가하는 셀을 먼저 활성화하고, 결과가 확정되면 해당 셀을 호출 셀로 이동시켜 본체를 실행한다. 반면 call‑by‑need(지연 평가)에서는 인자 셀을 ‘보류’ 상태로 두고, 실제 필요 시점에만 평가 셀을 활성화한다. 이러한 전략 차이는 규칙의 전제조건과 셀 이동 규칙만 바꾸면 되므로, 동일한 CCFL 프로그램에 대해 여러 전략을 손쉽게 적용할 수 있다. 또한 LMNtal의 비동기 메시징과 병렬 규칙 적용 메커니즘을 이용해, 병렬 평가 전략을 구현할 때는 동일한 함수 호출을 여러 셀에 복제하고, 각 셀에서 독립적으로 연산을 진행하도록 설계한다.

핵심 인사이트는 ‘연산 공간의 계층화’와 ‘규칙·프로세스의 명시적 이동’이라는 두 축을 통해 평가 전략을 그래프 재작성 수준에서 선언적으로 기술한다는 점이다. 이는 전략 구현을 위한 별도 스케줄러 코드를 작성할 필요를 없애고, LMNtal 실행 엔진이 제공하는 최적화(예: 규칙 매칭 캐시, 셀 병합) 혜택을 그대로 활용하게 만든다. 결과적으로 CCFL 프로그램은 동일한 소스 코드에서 다양한 전략을 선택적으로 적용할 수 있으며, 전략 간 비교 실험도 동일한 컴파일 파이프라인 내에서 수행할 수 있다.


📜 논문 원문 (영문)

🚀 1TB 저장소에서 고화질 레이아웃을 불러오는 중입니다...