Skip to main content
QUICK REVIEW

[論文レビュー] Haskell's overlooked object system

Oleg Kiselyov, Ralf Lämmel|ArXiv.org|Sep 10, 2005
Logic, programming, and type systems参考文献 49被引用数 33
ひとこと要約

この論文は、多相型クラスや機能的依存関係といった一般的な拡張機能を備えたHaskell 98が、OOHaskellライブラリを介して、カプセル化、継承、サブタイプ多態性、多態性、および可変状態を含む包括的なオブジェクト指向プログラミングをネイティブにサポートできることを示している。主な貢献は、高度なOOパターンが最小限の構文的摩擦と強い型安全性を伴ってHaskellに直接翻訳可能であり、Haskellの強力な型推論を保ち続けることである。

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.

研究の動機と目的

  • Haskell 98に一般的な拡張を加えた場合、新しい言語拡張なしに包括的オブジェクト指向プログラミングを表現できるかを調査すること。
  • 継承、多態性、カプセル化、可変状態といった従来のOO特徴が、Haskellに忠実に符号可能であることを示すこと。
  • Haskellの型システムが、幅、深さ、および共変引数サブタイプ多態性といった高度なサブタイプ特徴を保ちながら、型推論を維持できるかを示すこと。
  • OOHaskellを、コンパイラの変更なしに型付きオブジェクト指向言語設計の実験的環境として実用的であると確立すること。
  • Haskellの型クラスとOOプログラミングにおけるサブタイプ多態性の関係について長年の議論を解決すること。

提案手法

  • HListライブラリを用いて、サブタイプを備えた、拡張可能で一等級のレコードとしてオブジェクトを符号化する。このライブラリは、異種かつインスペクタブルなレコードとサブタイプを提供する。
  • 多相型クラスと機能的依存関係を用いて、オブジェクトクラス、インターフェース、継承階層をモデル化する。
  • コンストラクタメソッドと、暗黙の多態性とオープン再帰をサポートするオブジェクトジェネレータを用いて、オブジェクトの構築を実装する。
  • 再帰的レコード型と型レベルプログラミングを活用して、自己参照オブジェクトを安全にモデル化し、初期化されていない状態への過早アクセスを防ぐ。
  • 動的型チェックと明示的な型制約を用いて、安全なダウンキャストとアップキャストを実現する。可能であれば、型エラーとしてコンパイル時に失敗を検出する。
  • レコードのフィールドとメソッド型の型レベル操作を通じて、柔軟な多重継承と名前的/構造的サブタイプ多態性を実現する。

実験結果

リサーチクエスチョン

  • RQ1Haskell 98に標準的な拡張を加えた場合、継承、カプセル化、サブタイプといった従来のオブジェクト指向特徴を完全に表現できるか?
  • RQ2Haskellの型システムは、仮想メソッドや可変状態といった複雑なOOパターンを符号化する際、推論と安全性をどの程度維持できるか?
  • RQ3構造的および名前のサブタイプ多態性(幅、深さサブタイプ多態性を含む)を、Haskellで安全かつ表現的に符号化できるか?
  • RQ4言語拡張なしに一等級のクラスと多態的メソッドを実装できるか? また、それらはオブジェクト指向抽象化とどのように相互作用するか?
  • RQ5静的に型付けされた関数型環境(Haskellのようなもの)で、安全なダウンキャストと共変引数メソッドをサポートすることは可能か?

主な発見

  • 多相型クラスと機能的依存関係を備えたHaskell 98は、新しい言語拡張なしに包括的オブジェクトシステムを実装するのに十分である。
  • OOHaskellライブラリにより、教科書的なOOコードを1行ずつHaskellに翻訳可能であり、全体的なプログラム変換なしに直感的で構造的な保ちが可能である。
  • 型システムによって安全なダウンキャストが強制され、不可能なキャストはコンパイル時に型エラーとして検出される。
  • 幅サブタイプ多態性(フィールドの追加)、深さサブタイプ多態性(継承)、および共変引数メソッドといった高度なサブタイプ特徴がサポートされる。
  • 型レベルプログラミングとHListベースのレコードを用いて、一等級のスコープ内クラスと暗黙の多態的クラスがネイティブにサポートされる。
  • 型システムは、異種のオブジェクトコレクションに対して最小一般インターフェースを自動的に推論し、準暗黙のアップキャストを通じて均一な扱いを可能にする。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。