【えふぇくとしすてむ】
エフェクトシステム とは?
最終更新:
💡 返す値に加え、関数が行う操作も見えるようにする
関数が行い得る入出力・例外・状態操作などを、型とともに静的に追跡する仕組み。何を検査・保証できるかは、言語やシステムの設計によって異なる。
📌 このページのポイント
- 戻り値の型だけでなく、行い得る操作を扱う
- 関数の呼び出しで必要なエフェクトを追跡する
- エフェクトハンドラーと、静的な検査は別の仕組み
- 検査の範囲と、実行時の動作は言語ごとに確認する
関数の型だけでは、何が足りないの?
型に、どんなことを書くの?
言語によるよ。Kokaでは、画面への出力を含む関数にconsoleなどのエフェクトが付く。効果がないtotal、例外のexnなどもある。効果の名前や書き方は、言語ごとに確認しよう。
呼び出す側にも、関係がある?
あるよ。処理の中で効果のある関数を呼べば、その効果をどう扱うかが呼び出す側にも関係する。Kokaは効果を推論し、複数の効果を組み合わせる仕組みを説明している。ただし、すべての言語で同じ保証があるわけではないよ。
エフェクトハンドラーとは、同じもの?
関連するけれど別だよ。ハンドラーは要求された操作をどう処理するかを指定する仕組み。静的なエフェクトシステムは、どんな効果があり得るかを追跡する仕組み。OCamlのハンドラーは、未処理の効果がないことをコンパイラが保証するものではないんだ。
使えば、予期しない動作は全部防げる?
検査対象の効果を扱う助けにはなるけれど、すべてのバグや実行結果を保証するわけではないよ。Kokaの公式資料は研究言語で開発中とも説明している。採用する仕組みの検査範囲、ハンドラーやライブラリの動作、実行時の失敗を確認しよう。
まとめ:ざっくりこれだけ覚えればOK!
「エフェクトシステム」って出てきたら「関数が行う操作も、型と一緒に追跡する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Effect System」 = 効果システム / 副作用システム
💬 ここでの「Effect(エフェクト)」は「副作用」の意味だよ。「型システム(Type System)」の概念を拡張して、副作用を型として扱えるようにしたものだよ