[ruby-list:418] Re: about exception

From:
Date: 1996-08-14 09:46:49 UTC
List: ruby-list #418
けいじゅ@SHLジャパンです. 

In [ruby-list :00413 ] the message: "[ruby-list:413] Re: about
exception ", on Aug/13 19:58(JST) matz@caelum.co.jp (Yukihiro
Matsumoto) writes:

>このメイルも長いですが,一番大切な所には

長いですね...

>石塚さんのはもっと長いという….

え!? そうだった?(^^;;;

>|1. そのメソッドは通常では正しく終了する.
>|2. 正しく動くことが, はっきりしていれば, 例外の記述はいらない.
>|3. 異常が発生した時は, 必ず例外の対処を必要とする.

>私の気持ちとしては
> 1.例外が発生した時プログラムが中断して良ければ特別な例外処
>    理は要らない(例外というのはプログラムを中断しかねない異
>    常事態である)
> 2.例外が発生しなければ期待した動作をしていると考えて良い
>    (戻り値の検査などは必要ない)
> 3.異常が発生した時に処理を継続したければ例外処理する必要が
>    ある(当り前)

私の捉えている感じ方と同じです. が, プログラムを中断しかねない異常事態
というところの捉え方が違っているかも知れません.

そういう状態とは, その例外を発行した関数がそれ異常処理を進められなくな
る状態なのでしょうかね? File.open() では, ファイルを開くことができない
という状態ですね.

>|string#index() のようなものは, (1)もはっきりしていないし, 必ずその後 
>|検索位置を調べるので例外でなくて良いということですかね?
>
>私のでいうと1で「プログラムを中断するほどの異常事態ではない」
>となるので例外で無くても良いということになります.多分,同じ
>ようなことを表現しているのではないでしょうか?

string#index() は, 検索した結果がなかったという結果をちゃんと帰してい
るわけですかね.

>もう既に
>
>  while gets
>
>というidiomが出来ているので,いまさら変更するのにはかなり抵
>抗があります.もちろん
>
>  for line in file 

>とするとすれば問題はないんですけど.今までのを全部書き換えて
>回るのもちょっと大変そうだし….

まあ, 否定しません.

# 私自身は while gets のような一見何をやっているのか分からないのは, あ
# まり好きではないので使ってないのですが... 

>|(5) 異なる種類の例外に同じメッセージが割り当てられてしまう可能性が
>|    ある.
>これって全く異なる(対処法も異なる)例外に同じメッセージが割り
>当てられるという意味ですよね.あまり起きないような気がするん
>ですけど,楽観的すぎますかね.

あまり起きないと思いますが, 保証もできないですよね. さらに, 重複がある
かどうかを調べることもできないですよね. 

>NT版ではね.UNIX版では統一されていると思って良いでしょう.
>POSIXでも決められているみたいだし.

日本語版のOSでは, 日本語を出すとかいうことはないですよね. なんか, 将来
的には perrorもマルチリンガル対応になるような気がしますが...

>|(5)の問題は, シンボル(ID)化しても解決しないのですが... クラス毎に分割
>|して管理した方がよいのでは? ということを示すための問題点でした.
>クラス/モジュールを横断した場合には全然問題が解決していない
>んじゃないですか?

そうですねえ. このままでは無理ですね. 松本氏がクラス変数を用いる方法を
示していましたが, そのような方法を用いると言語のスコープ機能がそのまま
利用できるので良いかも知れません.

# でも, クラス変数のALIASはできないんでしたっけ?

>一方,石塚さんの例外は,ある処理の実行が「これこれという原因
>で失敗した」というものです.

多分その通りなんだと思えてきました

# 最初はどうなんだろう? と思いましたが, 先までメイルを書いててやはりそ
# の通りだということに気づきました.

私が, 例外といって思うことは, 

失敗した例外を捕捉できる 
-> 捕捉するからには, そこから例外復帰できなければ, 例外の意味はないだ
   ろう.
-> そのためには, どういう失敗をしたかが分からなくてはならない.
-> だから, 例外には原因をはっきりさせる何かが必要
-> 例外は, XXの原因で失敗する.

とこんな感じになっています.

例外処理というと fopen() などの例外処理を思い出すので, その通りだと思
います.

>多分,想定している例外のモデルが違うんでしょうね.私の(現在
>のrubyの)例外のモデルは,ある処理の実行が「失敗した」という
>もので,付加的な情報として $! に格納されている文字列があるも
>のです.

なるほど... いっていることが分からないのでもないのですが... 

さらに突き詰めると, 松本氏はリカバリは, 失敗したという情報(あと, 原因
となった関数)だけで基本的にはできる. というもので, 私の場合は, 失敗し
たという情報と原因(とその関数)があってはじめて可能になるということにな
るのではないでしょうか?

例えば,

file = File.open()

で, 失敗したとして その後, 原因も分からずに対処しようがないというのが
私の立場です.

>ここでモデルの優劣を論じる必要があるのかどうか分かりませんが,
>すくなくとも,モデルの違いについては認識する必要があると思い
>ます.

10回ぐらい読み直して, 3回ぐらい書き直してから違いを認識しました(*^^;;; 

>私の認識では5のケースはあまり起きないと思っていますし,

あまり起きないとは思うのですが, 起こっているかどうかも認識できないとこ
ろに問題があるのではと思います.

>もし起きたとすれば分割管理では対応しきれないと思います.

先に述べたような方法でどうにかならんですかね?

>むしろ,メリットがあるとすれば,5のケースではなく,例外の同定が簡単に
>なることでしょうね.今だと正規表現のマッチをしないと同定できない場合
>もありますからね.

できない場合がかなり多いような気がしますが??

>前のメイルでも書いたように現在の例外メッセージは情報が埋め込
>まれていますので,ちょっと分岐は難しいですね.もともと人間に
>読んでもらうための情報ですから.石塚さんのモデルはもちろん,
>私のモデルであっても分岐が必要となることはあるはずなので,こ
>の辺はもうちょっと考えた方が良いかも知れません.

でしょ.

>結局,両方とも例外の同定が難しいということに落ち着くのかも知
>れません.私もさすがにこの問題はなんらかの手を打った方が良い
>ような気がして来ました.

でしょ. でしょ.

>だめです.モデルの違いについてもっと議論しないと.

こんどはどうです?

松本氏も 同定を簡単に行なえなくてはいけないと思ってきたところで, 同定
の方法をどうするかという問題になるのですかね? 

それとももっとあるかしら?

# このサブジェクトのメイルは書くのに1日かかる...
__
..........................................石塚 圭樹@SHLジャパン(株)...
------------->アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----

In This Thread

Prev Next