'언젠가 읽기' 컨텐츠는 논문이나 영문 컨텐츠 등 언젠가 읽으려고 즐겨찾기 하고선
읽지 않고 계속 미룰만한 컨텐츠를 읽고 요약하거나 소개합니다.
Rust에서 `Functor`에 대한 새로운 아이디어?
Rust에서 Functor에 대한 새로운 아이디어
저자는 최근 진행 중인 컴파일러 프로젝트에서 타입 안전한 AST(추상 구문 트리) 변환을 위해 커스텀
Functor
트레이트를 정의했습니다. 초기에는 Functor의 정확한 개념을 잘 이해하지 못했지만, 기존의 방식과는 다소 다른 점이 있다고 생각했습니다.
이러한 내용을 다룬 이전 포스트 이후, Alice라는 동료가 저자에게 Haskell의
uniplate
패키지와 그 안의
transformBi
함수에 대해 언급했습니다.
transformBi
는 특정 타입의 노드를 만나면 그 노드에 대해 주어진 연산을 적용하여 전체 컨테이너 타입을 변환하는 기능을 제공합니다. 이는 저자가 시도하려던 바와 매우 유사했으나, Rust의
Biplate
트레이트는 동일한 타입 내에서의 변환을 지원하는 반면, 저자는 AST의 타입을 다르게 변환하여 특정 불변 조건을 유지하고자 했습니다.
Haskell의
fmap
함수는 컨테이너 타입 내의 동종 요소들을 다른 타입으로 변환하는 기능을 제공하며, 이는 저자가 필요로 하는 기능과 일치합니다. 이에 영감을 받아 Rust의
fmap
크레이트를 참고하여, 저자는 자체적인
Functor
트레이트를 구현하게 되었습니다. 이 트레이트는 제네릭 구현을 용이하게 하기 위해 명시적인 연관 타입 파라미터를 포함하고 있습니다.
이러한 접근 방식을 통해 AST 변환 시 타입 안전성을 보장하고, 다양한 변환 작업을 보다 유연하게 수행할 수 있게 되었습니다.
함께 읽으면 좋은 자료
-
Uniplate: A Library for Simple and Unambiguous Traversals and Transformations of Data Structures
-
fmap crate on Rust
-
Haskell Functor Typeclass Documentation