2008年1月14日月曜日

Chapter 19 Beyond Exception Handling: Conditions and Restarts

前説

high,medium,lowの対処のところがわからない。メモしながら。


  • low失敗そしてmediumがリカバーできず、だと、ボールはhighに。highはどうする?
  • 作戦1:mediumを使わずにやるべきことをやる。
  • 作戦2:成功するようにmediumの使いかたを変える。
  • 作戦1はクリーン。だけど、コーディングが増える。
  • 作戦2はいかがなものか。それができるということは、highがmediumとlowの内部処理について知っているということであり、callerからみてcalleeはブラックボックスになっているという関数抽象化の基本とバッティングしている。



The Lisp Way

ああ、たぶん、REPLでエラったときに、SLIMEがどうしますか〜と聞いてくるメニューの仕組みなんだな。


Conditions

この、Condition classes と 通常のクラスの間の微妙な違い、嫌だなぁ。覚えることが無用に増える。


Condition Handlers

condition handlerのところメモ。

  • malformed-log-entry-errorが投げられたときに、何が起きるかは、call stack 上で、そのparse-log-entryより上にいるものによる。
  • deguggerに行くのをさけるには、その上にいるもののどれかで、a condition handlerを確立しなければならない。
  • a condition が 発信されたとき、シグナル機構はa list of active condition handlersを調べる。
  • a condition handler は、それが取扱うconditionのspecifierと、そのconditionを唯一の引数とする関数からなる。
  • 確立されたcondition handlersが複数ある場合、シグナル機構は、確立したのが直近の順に選択する。
  • handlersの関数が何もせずにリターンすれば、それは拒否をあらわし、制御はSIGNALに返る。
  • a handlerが処理を担当する場合は、nonlocal exitによって、制御をSIGNALからthe handlerに移す。
  • たいていの場合は、call stackを自分のところまで巻き戻すだけ。
  • HANDLER-CASEマクロはこの類のcondition handlerを作る。

あり? これでは普通のExecption機構とほとんど同じでは??
ああ、"JAVA-STYLE EXCEPTON HANDLING"というところにそう書いてあった。orz
このEXCEPTONは脱字。errataに出てなかったので送っといた。:)


Restarts

ここで看板通りの機構になった。
しかし、よくできてる。他の言語はなんで採用しないんだろう?


Providing Multiple Restarts
Other Uses for Conditions

特になし。

0 件のコメント: