From: Akinori MUSHA Date: 2009-04-03T17:35:17+09:00 Subject: [ruby-dev:38269] Re: rinda/eval.rb At Fri, 3 Apr 2009 14:53:13 +0900, Tanaka Akira wrote: > というわけで、私は fork がない環境で NotImplementedError に > なるのは良いことである、と思っています。 > > 実行せずに fork が動くか調べたいという要求を実現するのにあたっ > て、その良さを失う必要があるかといえば、私のパッチで実現でき > るように、べつに失う必要はありません。 > > というわけで私は、私の提案が実現する挙動を過渡的なものだとは > 思っていません。むしろ、この挙動が良いのだ、と思っています。  なるほど。NotImplementedError の意義については理解しました。  ただ、 respond_to? における typo のリスクを仰るならなおさら、 respond_to? での判定を助長するような変更はよくないと思います。 (1.8/1.9.1との互換性を考えての提案だとは思うのですが)  端的に言えば Process.respond_to?(:fork) とシンボルで渡すから typo が見過ごされうるのであって、もし Process.forkable? とか Process.implement?(Process::FEATURE_FORK) のような手段が用意 されるのであればそうした問題はないわけです。  NotImplementedError の捕捉でカバーできないケースとしては、 たとえば fork する前に副作用のある前処理が必要なので、 fork する段になって NotImplementedError を出されても代替手段に切り 替えられない、といった状況が挙げられます。  よって何らかの判定手段は必要だが、 respond_to? はふさわしく ないのではないか、というのがここでの私の考えです。  さらなる悩みとしては、もし仮に Process.forkable? のような メソッドを用意し、上述のメソッドが冒頭で Process.forkable? or raise NotImplementedError としたとしても、なおそのメソッド自体に NotImplementedError が 出ないかを事前判定する手段が必要になりそうだということです。 -- Akinori MUSHA / http://akinori.org/