修士論文要旨

非関数型言語におけるAlgebraic Effects and Handlersの実装

野口 龍 (2022年2月)

Algebraic Effects and Handlers(AEH)は、関数型言語においてIOや例外処理、並列処理などの計算的効果を表現するための手法の一つである。従来のモナドと比べて、モジュール化やそれらの組み合わせの容易さ、直観性に利点がある。AEHでは計算的効果をシグネチャとハンドラに分けて記述する。シグネチャは実装を伴わない仕様であり、本来の処理手順の中に記述される。ハンドラはその仕様に対応する実装であり、本来の手順を処理する際に実行される。これにより実装を本来の手順から分離し、その入れ替えや拡張が容易になり、また、例外処理といったようなモジュール化の難しい機構をモジュール化を可能にする。また、後続の処理を一部切り取った限定継続というものをハンドラが受け取る特徴があり、非決定性演算や例外処理、並行処理などの実装を統一的かつ容易に実現できる。

関数型言語においてのみならず、オブジェクト指向言語はじめとする非関数型言語においてもこれらの利点が活用できるとして、AEHの研究が行われてきた。本論文では主に非関数型言語におけるAEHの実装と利用に焦点を当て、その実装手法が言語によってさまざまであることから、言語設計者およびライブラリ作者がAEHを実装しにくいことを問題点として挙げる。これを解決するため既存の手法をまとめ、様々な尺度から比較を行い、非関数型言語と親和性の高いAEHの実装手法を提示する。それに加え、非関数型言語におけるAEHの有用性が分かるように随所に利用例や実際のコードを交え、性能比較なども行った。

これら議論の一環として、オブジェクト指向言語C#にAlgebraic Effects and Handlersを実装した。この実装は卒業研究で行った実装の改良で、AEHの機能をより多く利用できるようになっており、非関数型言語におけるAEHの実装とその有用性を考える一助となると考えている。本論文を通じて非関数型言語と親和性の高い実装手法をまとめることにより、様々な言語でAEHの実装を促し、それら言語の言語機能をAEHにより拡張できると考えている。