역량 분류 (확장 버전)
요약
Scala 3의 캡처 검사 시스템을 개선하기 위해 역량 분류기(capability classifiers)를 도입하는 연구를 소개합니다. 계층적 태그 구조를 통해 제어 흐름이나 스레드 로컬 리소스와 같은 특정 역량을 정교하게 필터링하고 추론할 수 있습니다.
핵심 포인트
- Scala 3 캡처 검사의 한계인 역량 추론 문제를 해결
- 트리 구조의 사용자 확장 가능한 태그 계층 도입
- 포함(only) 및 제외(except)를 통한 정교한 캡처 세트 필터링 지원
- Lean 4를 통한 타입 및 효과 안전성 기계화 증명 완료
Scala 3의 캡처 검사 (Capture checking)는 타입에 역량 (capabilities)을 기록함으로써 가볍고 실용적인 효과 (effect) 및 리소스 추적을 가능하게 합니다. 그러나 이 시스템은 역량의 종류에 대해 추론할 수 있는 방법을 제공하지 않습니다. "이 클로저의 제어 흐름 역량 (control-flow capabilities)만 유지"하거나 "이 인자에서 모든 스레드 로컬 역량 (thread-local capabilities)을 제외"하는 것과 같은 자연스러운 제약 조건들을 표현할 수 없게 됩니다. 이 두 가지 사례는 모두 Scala 3 표준 라이브러리에서 발생합니다. "Try"는 포착된 예외를 다시 던지므로(re-throws) 본문의 제어 흐름 역량만을 유지하며, "Future"는 스레드 로컬 리소스를 캡처해서는 안 됩니다. 이러한 제약 조건을 명시할 수 없었기 때문에 라이브러리의 일부가 캡처 검사 대상에서 제외되어 왔습니다. 우리는 역량을 그들의 의미론적 역할에 따라 분류하는 트리 구조의 사용자 확장 가능한 태그 계층인 역량 분류기 (capability classifiers)를 도입합니다. 프로젝션 (Projections)은 분류기에 따라 캡처 세트를 필터링하며, 포함 ("c.only[C]") 및 제외 ("c.except[C]")를 모두 지원합니다. 트리 구조는 결정 가능한 배타성 추론 (decidable disjointness reasoning)을 가능하게 합니다. 즉, 계층 구조의 다른 곳에 알려지지 않은 확장이 있더라도 서로 다른 브랜치에 있는 분류기들은 배타적임이 보장됩니다. 우리는 캡처 검사를 위한 핵심 계산법인 System Capless의 확장으로서 분류기를 정식화하며, 분류기 서브트리의 교집합 (intersection), 합집합 (union), 차집합 (subtraction)에 기반한 분류기 kind 대수 (kind algebra)를 도입합니다. 우리는 예외 가로채기 (exception interception)를 모델링하기 위해 운영 의미론 (operational semantics)을 확장하고, Lean 4로 완전히 기계화된 big-step 증명을 통해 타입 안전성 (type safety), 효과 안전성 (effect safety), 핸들러 커버리지 (handler coverage)를 확립합니다. 분류기들은 Scala 3 캡처 검사기에 구현되었으며, 표준 라이브러리 타입과 실제 세계의 효과 제외 패턴에서의 사용 사례를 입증합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 arXiv cs.PL (Programming Languages)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기