例外
コーディングを支える技術#615abb663f44250000452dbe
https://speakerdeck.com/tanden/phpdethrowsinaili-wai-handoringu
プログラミングにおける例外とはなにか
Bertrand Meyerの定義 https://www.amazon.co.jp/オブジェクト指向入門-第2版-原則・コンセプト-Architect’Archive-クラシックモダン・コンピューティング/dp/4798111112
例外の難しさ
依存性が発生
例外のない言語
Scala
副作用はいやなのでEitherを使う
Rust
回復不能なエラー(panic)
回復可能なエラー(Result<T,E>)
これはプログラミングにおける例外そのもの
Go
多値返却
呼び出し元が必ず例外処理をする
https://keens.github.io/blog/2021/01/04/future_of_proguramming_languages/
私は以下の全てを満たす例外システムがあるといいなと思っています。
例外を送出するのが簡単
例外を再開できる
例外を値に変換するのが簡単
特に、複数起きるかもしれない例外をちゃんと区別して扱える必要がある
「例外が起きるかもしれない関数呼び出しの結果」を第一級の値として扱える仕組み
再開できる例外はCommon Lispのコンディションシステムや、Schemeの raise-conituable なんかにあります。 あるいはAlgebraic Effects and Handlersや(限定)継続でもできそうです。