Skip to main content
QUICK REVIEW

[논문 리뷰] Haskell's overlooked object system

Oleg Kiselyov, Ralf Lämmel|ArXiv.org|2005. 09. 10.
Logic, programming, and type systems참고 문헌 49인용 수 33
한 줄 요약

이 논문은 다중 매개변수 형식 클래스와 기능적 종속성과 같은 일반적인 기능으로 확장된 하스켈 98이 OOHaskell 라이브러리를 통해 캡슐화, 상속, 다형성, 변형 상태를 포함한 전면적인 객체 지향 프로그래밍을 네이티브로 지원할 수 있음을 보여준다. 주요 기여는 고급 객체 지향 패턴이 최소한의 문법적 번거로움과 강력한 형식 안전성을 유지하면서도 하스켈에 직접적으로 번역될 수 있음을 입증한 것이다. 이는 하스켈의 강력한 형식 추론 기능을 그대로 유지한다.

ABSTRACT

Haskell provides type-class-bounded and parametric polymorphism as opposed to subtype polymorphism of object-oriented languages such as Java and OCaml. It is a contentious question whether Haskell 98 without extensions, or with common extensions, or with new extensions can fully support conventional object-oriented programming with encapsulation, mutable state, inheritance, overriding, statically checked implicit and explicit subtyping, and so on. We systematically substantiate that Haskell 98, with some common extensions, supports all the conventional OO features plus more advanced ones, including first-class lexically scoped classes, implicitly polymorphic classes, flexible multiple inheritance, safe downcasts and safe co-variant arguments. Haskell indeed can support width and depth, structural and nominal subtyping. We address the particular challenge to preserve Haskell's type inference even for objects and object-operating functions. The OO features are introduced in Haskell as the OOHaskell library. OOHaskell lends itself as a sandbox for typed OO language design.

연구 동기 및 목표

  • 하스켈 98에 일반적인 확장을 적용했을 때, 새로운 언어 확장 없이도 전면적인 객체 지향 프로그래밍을 표현할 수 있는지 조사하기.
  • 전통적인 객체 지향 기능—예를 들어 상속, 다형성, 캡슐화, 가변 상태—가 하스켈에 충실하게 인코딩될 수 있음을 보여주기.
  • 하스켈의 형식 체계가 형식 추론을 유지하면서도 너비, 깊이, 공변 매개변수 다형성과 같은 고급 다형성 기능을 안전하게 지원할 수 있는지 보여주기.
  • 컴파일러 변경 없이도 타입화된 객체 지향 언어 설계를 실험할 수 있는 실용적인 사전 환경으로 OOHaskell를 확립하기.
  • 하스켈의 형식 클래스와 객체 지향 프로그래밍에서의 하위형 다형성 간의 오랫동안 이어진 논쟁을 해결하기.

제안 방법

  • HList 라이브러리를 사용하여 확장 가능하고 일급적인 레코드로 객체를 인코딩함으로써, 다형성과 하위형을 지원하는 이질적이고 점검 가능한 레코드를 제공한다.
  • 다중 매개변수 형식 클래스와 기능적 종속성을 사용하여 객체 클래스, 인터페이스, 상속 계층을 모델링한다.
  • 생성자 메서드와 암시적 다형성 및 개방 재귀를 지원하는 객체 생성기를 통해 객체 생성을 구현한다.
  • 재귀적 레코드 형식과 타입 수준 프로그래밍을 활용하여 자기 참조 객체를 안전하게 모델링하고 초기화되지 않은 상태에 조기 액세스를 방지한다.
  • 동적 형식 검사와 명시적 형식 제약 조건을 통해 안전한 다운 캐스트와 업 캐스트를 지원하며, 가능한 한 컴파일 타임에 실패를 탐지한다.
  • 레코드 필드와 메서드 형식의 타입 수준 조작을 통해 다중 상속과 명시적/구조적 하위형을 영리하게 지원한다.

실험 결과

연구 질문

  • RQ1하스켈 98에 표준 확장을 적용했을 때, 상속, 캡슐화, 하위형과 같은 전통적인 객체 지향 기능을 완전히 표현할 수 있는가?
  • RQ2가상 메서드와 가변 상태와 같은 복잡한 객체 지향 패턴을 인코딩할 때 하스켈의 형식 체계가 추론 능력과 안전성을 어느 정도 유지할 수 있는가?
  • RQ3구조적 및 명시적 하위형, 특히 너비 하위형과 깊이 하위형을 하스켈에서 안전하고 표현적으로 어떻게 인코딩할 수 있는가?
  • RQ4언어 확장 없이도 일급 레벨 스코프의 클래스와 암시적 다형성 클래스를 하스켈에서 어떻게 구현할 수 있으며, 객체 지향 추상화와 어떻게 상호작용하는가?
  • RQ5정적 형식이 적용된 기능적 환경인 하스켈에서 안전한 다운 캐스트와 공변 매개변수 메서드를 지원할 수 있는가?

주요 결과

  • 다중 매개변수 형식 클래스와 기능적 종속성을 포함한 하스켈 98는 새로운 언어 확장 없이도 전면적인 객체 시스템을 실제로 지원한다.
  • OOHaskell 라이브러리는 교재에 실린 객체 지향 코드를 문장 단위로 직접 번역할 수 있게 하며, 전역 프로그램 변환 없이 직관적이고 구조적인 유지 보수를 보장한다.
  • 형식 체계에 의해 안전한 다운 캐스트가 강제되며, 불가능한 캐스트는 컴파일 타임에 형식 오류로 표시된다.
  • 시스템은 너비 하위형(필드 추가), 깊이 하위형(상속), 공변 매개변수 메서드 인자와 같은 고급 하위형 기능을 지원한다.
  • 타입 수준 프로그래밍과 HList 기반 레코드를 통해 일급 레벨 스코프의 클래스와 암시적 다형성 클래스가 네이티브로 지원된다.
  • 형식 체계는 이질적인 객체 컬렉션에 대해 가장 일반적이지 않은 인터페이스를 자동으로 추론하며, 반의어적 업 캐스트를 통해 동종 처리를 가능하게 한다.

더 나은 연구,지금 바로 시작하세요

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.