R6RS:翻訳:R6RS:5.3 Exceptional situations

R6RS:翻訳:R6RS:5.3 Exceptional situations

5.3 例外的状況

本報告書では、構文違反、手続きの仕様違反、実装系の制約違反、環境における例外的状況、といった様々な例外的状況を区別している。例外的状況が実装系により検知されると、例外が発生する。このとき、現在の例外ハンドラと呼ばれる特別な手続きが呼び出される。プログラムもまた例外を発生させることができ、現在の例外ハンドラを上書きすることができる。 R6RS:翻訳:Standard Libraries:7.1 Exceptions 参照。

例外が発生すると、その例外的状況の性質を説明するオブジェクトが与えられる。本報告書では、 R6RS:翻訳:Standard Libraries:7.2 Conditions で説明されているコンディションシステムを使う。これは例外的状況を説明し、コンディションの型を分類するものである。

例外ハンドラが適切な対応を取ればプログラムの実行を続けられる例外的状況もある。このような例外は続行可能であるという。本報告書で述べられているほとんどの例外的状況について、その状況が検知された地点で、可搬性のあるプログラムは続行可能な例外に頼ることはできない。このような例外については、例外により起動した例外ハンドラから返らない。ただし、続行が許可される場合には、ハンドラから返ることもある。 R6RS:翻訳:Standard Libraries:7.1 Exceptions 節を参照。

実装系は何らかの実装系の制約によって正しいプログラムを正しく実行し続けることができなくなったときには例外を発生させなければならない。。例えば、無限大をサポートしていない実装系は、結果が無限大になる式を評価した場合、 &implementation-restriction コンディション型の例外を発生させなければならない。

他に可能性のある実装系の制約としては非数や無限大(R6RS:翻訳:R6RS:11.7 Arithmetic の 11.7.2 節参照)の表現がないことが本報告書では予期されてい、実装系はそのような状況に遭遇した場合、典型的には適切なコンディション型の例外を発生させなければならない。

本報告書では「例外が発生する」という表現と「例外を発生させなければならない」という表現とを同義語風に使い、例外が特定の型のコンディションオブジェクトとともに与えられることを示すのに「t コンディション型の例外が発生する」という表現を使う。「続行可能な例外が発生する」という表現は例外ハンドラから返ることが認められる例外的状況を表している。

More ...