새로운 실험적 컴파일러 Prism(프리즘)이 함수형 프로그래밍의 오랜 난제 중 하나인 '효과(effect)'를 타입 시스템에 통합하는 혁신적인 접근 방식을 선보였습니다. 가변 변수(var), 예외(exception), 스트림(stream) 같은 부수 효과를 함수의 타입에 명시적으로 드러내면서도, 외부에서 관찰되지 않는 내부적인 상태 변경은 순수 함수처럼 효율적으로 처리하는 것이 핵심입니다. 이는 OCaml 5, Haskell, Koka 등 현대 함수형 언어의 아이디어를 바탕으로 3년간 개발된 개념 증명(proof-of-concept) 프로젝트입니다.
Prism의 핵심은 '대수적 효과 핸들러(algebraic effect handler)'와 '행 다형성(row polymorphism)'입니다. 효과는 인터페이스처럼 연산을 선언하고, 핸들러가 그 연산의 의미를 부여하는 방식입니다. 예를 들어, `!{Gen} Unit`과 같이 함수의 타입에 `yield` 연산(Gen 효과)을 수행한다는 사실을 표시합니다. 이 효과는 함수 호출을 거치며 구조적으로 합쳐지며, Haskell의 모나드 트랜스포머(monad transformer)처럼 수동으로 계층을 올릴 필요 없이 스택이 아닌 라벨의 집합처럼 동작합니다. 또한, 예외, 제너레이터/스트림, 렌즈(lens)를 통한 레코드 갱신, 가변 상태, 실패(fail/guard) 흐름 등 다양한 기능을 하나의 효과 시스템으로 표현하며, 중간 리스트 생성 없이 파이프라인을 단일 루프로 최적화하는 등 성능 개선에도 중점을 둡니다.
Prism은 효과를 피하는 것이 아니라, 오히려 타입 시스템에 적극적으로 통합하여 컴파일러가 최적화를 통해 그 비용을 없애도록 하는 데 목표를 둡니다. 이는 함수형 프로그래밍의 강력한 추상화와 안정성을 유지하면서도, 실제 애플리케이션 개발에 필요한 유연성과 성능을 확보하려는 시도입니다. LLVM IR, MLIR, C 런타임, Rust 인터프리터, Lean 4 모델, WASM 플레이그라운드 등 다양한 도구와 백엔드를 제공하여 개발자들이 직접 타입 추론과 최적화 결과를 확인할 수 있도록 했습니다. 이러한 접근은 함수형 언어가 실세계 문제 해결에 더욱 폭넓게 활용될 수 있는 가능성을 열어줄 것으로 기대됩니다.