Prism: 효과를 타입으로 관리하는 새로운 함수형 언어

by DD
13시간 전
조회수 0

Prism은 타입 시스템에 효과(effects)를 통합하여 함수형 프로그래밍의 패러다임을 확장하는 언어임

데이터 격리 아키텍처(Data Isolation Architecture)를 통해 가변 상태를 안전하게 관리하고, 데이터 미저장 정책(Zero-Retention Policy)을 준수함

OCaml, Haskell 등 기존 함수형 언어의 복잡한 추상화(Complex Abstractions)를 단순화하고 제로 코스트 추상화(Zero-Cost Abstractions)를 목표로 함

커뮤니티에서는 실제 적용 가능성기존 언어와의 차별점에 대한 논의가 활발함

타입화된 효과(Typed Effects)와 제로 코스트 추상화

Prism은 타입 시스템에 효과(effects)를 명시적으로 통합하여, 함수가 어떤 부수 효과(side effects)를 발생시키는지 컴파일 타임에 보장한다고 설명함. 이는 OCaml 5의 알제브릭 효과(Algebraic Effects)와 유사하지만, 타입 시스템 내에서 효과를 관리함으로써 제로 코스트 추상화(Zero-Cost Abstractions)를 달성하는 것을 목표로 함. 특히, Koka의 증거 전달(Evidence Passing) 방식을 차용하여 런타임 오버헤드를 최소화한다고 언급됨.

가변 상태(Mutable State)와 데이터 격리

글에서는 Python과 유사한 가변 루프(mutable loop)를 `var` 키워드를 통해 구현하지만, 해당 상태가 함수 외부로 노출되지 않도록 데이터 격리 아키텍처(Data Isolation Architecture)를 적용한다고 설명함. 이는 `var`를 비공개 효과(private effect)로 취급하고 블록 끝에서 핸들러를 통해 처리함으로써, 함수 시그니처는 순수하게 유지하면서도 내부적으로는 가변성을 허용하는 방식임. 커뮤니티에서는 이러한 접근 방식이 안정성과 성능 사이의 균형을 어떻게 맞추는지에 대한 질문이 있었음.

알제브릭 효과 핸들러(Algebraic Effect Handlers)의 유연성

Prism의 핵심 아이디어는 알제브릭 효과 핸들러를 통해 다양한 프로그래밍 패턴(예외 처리, 제너레이터, 렌즈)을 통합하는 것임. 특히, 핸들러가 연속(continuation)을 어떻게 재개하는지에 따라 상태 관리, 제너레이터, 탐색 트리 등 다양한 동작을 구현할 수 있다고 설명함. 이는 Haskell의 모나드 트랜스포머 스택(Monad Transformer Stack)과 달리, 효과 행(Effect Row)의 구조적 통합(Structural Union)을 통해 복잡성을 줄인다고 강조함.

메모리 관리: Perceus와 프레임 제한 재사용

가비지 컬렉터(Garbage Collector) 대신 Perceus 참조 카운팅(Perceus Reference Counting)프레임 제한 재사용(Frame-Limited Reuse)을 사용하여 메모리를 관리한다고 설명함. 이는 힙 할당(Heap Allocation)을 최소화하고, 객체가 해제되는 시점을 정적으로 결정 가능하게 하여 예측 가능한 성능을 제공함. 렌즈(Lens) 업데이트가 포인터 쓰기(Pointer Write)로 컴파일되는 예시를 통해, 순수 함수형 코드와 가변 상태 관리가 동일한 메커니즘으로 처리될 수 있음을 보여줌.

Prism: An Impure Functional Language With Typed Effects

댓글 0

첫 번째 댓글을 남겨보세요!