Futhark 타입 체커는 초기 단순 구조에서 고차 함수(Higher-Order Functions) 및 타입 추론(Type Inference) 도입으로 복잡성이 증가했음
인플레이스 업데이트(In-place Updates) 검증의 어려움으로 인해 기존 단일 통과 방식(Single Pass)의 한계에 직면함
이름 해석(Name Resolution), 타입 추론(Type Inference), 크기 추론(Size Inference), 별도 검증(Separate Checks)의 4단계로 재설계하여 명확성과 디버깅 용이성을 확보함
제약 기반 타입 체킹(Constraint-based Type Checking) 방식 도입으로 결정 지연 및 디버깅 편의성을 높였음
초기 Futhark 타입 체커는 스칼라, 배열, 튜플 타입만 지원하는 단순한 단일 통과(Single Pass) 방식으로 구현되었다. 이는 구현 용이성과 효율성 측면에서 장점이 있었으나, 인플레이스 업데이트(In-place Updates)와 같은 복잡한 기능 검증에는 한계가 있었다. 특히 고유성 타입(Uniqueness Types)의 복잡성을 간과하여 초기 설계의 단순성이 환상(Illusory)에 가까웠다는 평가가 있다.
버전 0.4.0부터 고차 함수(Higher-Order Functions)와 ML-스타일 타입 추론(Hindley-Milner)이 도입되면서 타입 체커는 Algorithm W 기반으로 발전했다. 하지만 레코드(Records) 및 고유성 타입(Uniqueness Types)은 기존 추론 방식과 자연스럽게 통합되지 못했다. 특히 분기문(Branches)에서 타입 결정이 지연되는 경우, 부분적인 타입 정보(Partial Type Information)에 의존해야 하는 복잡성이 발생했다.
AUTOMAP 작업의 필요성으로 인해 타입 체커는 이름 해석(Name Resolution), 타입 추론(Type Inference), 크기 추론(Size Inference), 인플레이스 업데이트 검증(In-place Update Check)의 4단계로 분리되었다. 이 계층적 설계(Layered Design)는 각 단계에서 이전 단계의 완전한 정보를 활용하여 오류 설명의 명확성을 높이고 디버깅을 용이하게 한다. 특히 별도 검증(Separate Checks) 단계를 통해 금지된 사용(Forbidden Uses)을 쉽게 식별할 수 있게 되었다.
새로운 타입 체커는 제약 기반 접근 방식(Constraint-based Approach)을 채택하여 결정 지연(Postponing Decisions)의 이점을 활용한다. 이는 Haskell GHC 및 Flix에서도 사용되는 방식으로, 타입 변수(Type Variables)에 대한 제약 조건을 생성하고 오프라인으로 해결한다. 이 방식은 AI 환각(Hallucination)과 유사한 존재적 크기(Existential Sizes) 문제를 명시적으로 처리하는 데 효과적이며, 코드 중복을 최소화하고 디버깅 편의성을 크게 향상시킨다고 평가된다.