힙 기반 람다 머신: 단일 힙 메모리로 구현하는 정규 순서 평가

본 논문은 람다식의 정규 순서 감소를 수행하는 새로운 기계 구조인 “Heap Lambda Machine”을 제안한다. 메모리를 단일 힙 형태의 연속 블록 집합으로만 구성하고, 모든 연산을 비재귀적 그래프 탐색·복사·교체 알고리즘으로 구현한다. 이를 통해 복잡한 스택·환경·가비지 컬렉션 등을 배제하고, 메모리 관리와 평가 과정을 단순화한다.

저자: Anton Salikhmetov

힙 기반 람다 머신: 단일 힙 메모리로 구현하는 정규 순서 평가
본 논문은 람다식의 정규 순서 감소를 수행하는 새로운 기계 구조인 “Heap Lambda Machine”을 제안하고, 그 설계와 구현 세부 사항을 상세히 기술한다. 먼저 서론에서는 기존 람다 전용 기계들이 스택, 환경, 코드 영역 등 여러 메모리 서브시스템을 필요로 하며 복잡한 메모리 관리와 가비지 컬렉션에 의존한다는 문제점을 지적한다. 이러한 복잡성을 탈피하고자 저자는 메모리를 단일 힙 형태의 연속 블록 집합으로만 구성하고, 모든 연산을 비재귀적으로 구현하는 방식을 탐구한다. 2절에서는 시스템의 고수준 설계와 사용자 관점을 설명한다. 시스템은 메모리와 프로세서라는 두 주요 유닛으로 구성되며, 메모리 유닛은 외부에서 읽고 쓸 수 있는 힙 배열 형태이다. 메모리 관리자는 Allocator와 freehead 레지스터로 이루어지고, 사용자는 람다식을 내부 포맷으로 변환한 뒤 메모리에 로드하고 expr 레지스터에 시작 주소를 넣어 Evaluator를 호출한다. Evaluator는 평가가 끝나면 반환되며, 결과는 메모리의 expr 주소부터 읽어 해석한다. 보조 유닛으로 Walker, Cleaner, Replacer, Copier가 존재하지만 사용자에게는 투명하게 동작한다. 3절에서는 메모리 모델을 정의한다. 각 블록은 네 개의 셀(par, copy, func, arg)로 구성되며, 이들 셀을 통해 그래프의 부모‑자식 관계, 복사 연결, 함수‑인자 관계를 표현한다. 애플리케이션, 추상화, 변수 세 종류의 노드가 존재하고, 변수는 자유 변수와 바인드 변수를 모두 주소 포인터로 나타내어 α‑변환을 자동으로 처리한다. 예시로 적용(combinator) λx.λy.(x y) 의 메모리 다이어그램을 제시한다. 4절에서는 저장소 관리 방식을 설명한다. 초기화 단계에서 모든 블록을 copy 셀을 이용해 단일 연결 리스트 형태의 free list에 연결하고, freehead 레지스터가 리스트의 머리를 가리킨다. get 명령은 freehead가 가리키는 블록을 반환하고 freehead를 다음 블록으로 이동시키며, 반환된 블록은 0으로 초기화한다. freehead가 0이면 메모리 부족 예외가 발생한다. put 명령은 해제된 블록을 freehead 앞에 삽입한다. 이 두 명령만으로 메모리 할당·해제가 이루어지며, 별도의 가비지 컬렉터가 필요 없다. 5절에서는 표현식 트리 순회를 담당하는 Walker 유닛을 소개한다. Walker는 현재 노드, 부모 노드, 이동 방향(전진/후진)으로 구성된 상태(state)를 유지한다. walk 명령은 상태에 따라 func 셀(함수 부분)이나 arg 셀(인자 부분)로 이동하거나, 부모 노드로 되돌아가며, 변수 노드에 도달하면 후진 방향으로 전환한다. 이 과정은 비재귀적으로 구현되어 스택 사용을 배제한다. 논문은 Ω 조합자를 예시로 들어 순회 순서를 시각화한다. 6절에서는 서브트리 정리를 위한 Clear 유닛을 설명한다. β‑축소 후에 사용되지 않는 블록을 free list에 반환하기 위해, Walker가 후진할 때마다 현재 노드의 자식들을 해제한다. 이는 트리 구조를 역방향으로 따라가며 모든 노드를 차례로 freehead에 삽입하는 방식이다. 7절에서는 서브트리 복사를 담당하는 Copy 유닛을 상세히 다룬다. 복사 과정에서도 Walker와 Clear를 재사용한다. 복사 시 변수 노드가 가리키는 추상화가 이미 복사된 경우, 해당 변수의 arg 셀을 복사된 추상화 주소로 교체한다. 이를 위해 원본 서브트리를 순회하면서 copy 셀에 새로운 노드 주소를 기록하고, 변수 노드가 발견되면 역방향 탐색을 통해 해당 추상화의 복사본을 찾는다. 8절에서는 바인드 변수 교체를 수행하는 Replace 유닛을 소개한다. Replace는 세 개의 인자를 받아 (1) 탐색 대상 서브트리, (2) 바인드 변수의 추상화, (3) 대체할 인자 서브트리를 지정한다. 먼저 Copy를 이용해 인자 서브트리를 복제하고, 복제된 서브트리 내 변수들이 올바른 추상화에 바인딩되도록 매핑한다. 이후 원래 바인드 변수 노드를 Clear를 통해 해제한다. 9절에서는 전체 평가 알고리즘을 종합한다. Walker가 현재 노드가 애플리케이션이며 함수 부분이 추상화인지를 isreducible 명령으로 검사한다. 조건이 만족되면 Replace를 호출해 β‑축소를 수행하고, Clear로 사용된 블록을 해제한다. 이후 Walker는 현재 노드를 부모 노드로 이동시켜 가장 외부의 레드엑스를 다시 탐색한다. 이 루프는 정규 순서(normal order)를 유지하면서 전체 표현식이 정상 형태에 도달하거나 메모리 부족 예외가 발생할 때까지 반복된다. 10절 결론에서는 제안된 기계의 주요 특징을 정리한다. 그래프 기반 표현, 단일 힙 메모리 구조, 비재귀적 알고리즘, 정규 순서 평가가 결합되어 기존 설계보다 구현이 간단하고 하드웨어 구현 가능성이 높다. 또한 소스 코드가 C 라이브러리 형태로 제공되어 실험적 검증이 이루어졌다. 그러나 고정 크기 힙, 복제 비용, 무한 감소 가능성 등 한계점도 존재함을 인정하고, 향후 연구에서는 동적 메모리 확장, 공유 그래프 최적화, 평가 전략 다양화 등을 제안한다.

원본 논문

고화질 논문을 불러오는 중입니다...

댓글 및 학술 토론

Loading comments...

의견 남기기