[ruby-list:405] Re: about exception

From: keiju@... (Keiju ISHITSUKA)
Date: 1996-08-12 09:50:57 UTC
List: ruby-list #405
けいじゅ@SHLジャパンです. 

In [ruby-list :00400 ] the message: "[ruby-list:400] Re: about
exception ", on Aug/12 16:34(JST) matz@caelum.co.jp (Yukihiro
Matsumoto) writes:

>いや,つまり石塚さんが問題にしていることはもちろん理解できる
>のですが,私が問題にしたいことは
>
>  * それはどのくらい問題なのか
>  * どうすればその問題を解決できるか
>  * その解決策で別の問題は起きないか
>
>ということなんです.

段階を追っていけばそういうことになりますよね. 現在は,

  * それはどのくらい問題なのか

という段階だと思っています. まず, どのような問題がどのような時に問題に
なるのかを理解する必要があると思います. そうすれば, (何もしないも含め
て)どうすれば良いかが分かってくるのではないかと思います.

>私の考えは「現状のrubyの例外処理は簡易で問題が起きる時もある
>が,文字列の比較で(すくなくとも大抵の場合は)対処可能であり,
>変更の必要はないのではないか」と言うものです.

>一方,石塚さんは「rubyの例外処理は簡易すぎる.文字列での比較
>はプラットフォームやバージョン間の移植性を保証してくれない気
>がする」というものです.つまり「問題は存在する,それを見過ご
>しに出来ない」というものです.

まだ, どの程度問題なのかが分かっているわけではありません. たぶん, 今ま
で問題としていたのは:

例外の機能と 現在あるライブラリ群の例外の発生の仕方のバランス なのかな?
という気がしています. 

例を挙げれば, File.open() などは, 例外で対処すべきものではないのかも知
れません. indexとかと同じで nil を帰すようにするわけですね. 

このような, バランスの調整でもっとしっくりするようになるのかも知れませ
ん.

>どちらも定量的な評価は出来ない以上,平行線ですが,私としては
>石塚さんから問題を解決するような提案が出て来れば検討する用意
>はあるが,こちらから新しい案を出すつもりは無いです.

というわけですから, 最初のフェーズをもうちょっと考えてみましょう.

>メッセージはなるべく,変更しないようにするつもりです.「おれ
>のプログラムが動かなくなった,変えるな」というメイルをくださ
>るのも有効かと思います.

現在, 問題となっているのは, 現在の ruby のエラーメッセージについてだけ
ですよね.

将来的に, 色々な人がクラス/モジュールを提供する様になった場合を考えて
みて下さい. その場合, 各々独自にメッセージを作るようになると収集がつか
なくなる様な気がしませんか? 当然, 唯一性の保証もなくなりますし...

In [ruby-list :00402 ] the message: "[ruby-list:402] Re: about
exception ", on Aug/12 17:02(JST) matz@caelum.co.jp (Yukihiro
Matsumoto) writes:

>rubyの例外を何らかの形で拡張するなら,今までのものとの互換性
>なども考慮してPythonっぽいのなら実装可能だとは思いますが,こ
>んどは例外を発生させる方はプログラミングが面倒になるでしょう
>ね.メッセージ以外に例外種別も考えないといけなくなりますから
>ね.私はそれはあまり嬉しくないなあ.

と言っていますが, 例外を発生させる側は, そのぐらいの苦労はやって頂かな
いと と思います. 

とここまで書いて気になったのですが, 例外を発生させるのはライブラリ側が
主であると考えているのですが, 違いますか? ライブラリとなることを目的と
して作られたもの以外の通常のプログラム(関数など)も例外を出すことは考え
ていませんよね?

# だれでも自由に例外を発行したいとなると... 困るなあ

特に, 将来のことを考えると, このぐらいの仕組みはちゃんと決めておかない
と大変なことになるのではと心配します.

ここでいう種別とは何ですかね? 私がいっているID/SYMBOLと同種のものだと
思いますが...

ただ, 種別を(今後増えると予想される)ライブラリ全体で一元管理するのは難
しいと思います. 例外を発生させる元となったもの(クラス/モジュール)とそ
れ毎の種別の組みが一番現実的かと思います.

例えば, File であれば, ファイルがないとか パーミッションがないとかです
ね. 

あと, File であれば IO 関連のメソッドで例外が起こることもありますので,
IO + XXX で来た例外が File + XXXで 識別できるようにする必要もあります
が...

例えば, 例外種別は クラスExceptionのインスタンスとなっており, 

class Foo:Super
  ...

  fail id, message
  # または, fail message, id
  #         fail Exception.new(id, message)
  ...
end

などで例外を発生させ,

受ける側では

...
rescue
  if (Exception.match(Foo, id, $!)) 
    ...

で受けるとかですね. matchは上位クラスの例外も拾ってくれるようになって
いるわけですね.

あと, 例外に関する辞書をクラスに持たせる方法もあるかと思います. そうす
ると, fail の時に id でも, 場合によっては message だけでも送れるように
なります. ただ, これは ruby 向きではないかも... optionとして用意するの
はありだと思います.

今までの互換性に関しては, 例外を受けとる側に関しては, Exception の文字
列表現を message にしておけばそれほど問題ないと思います. 例外を出す側
は, 種別情報をつけなくてはいけないので互換性はあまりないことになります
ね.

>「〜ist」は「〜する人」という意味がありますから(例,タイピス
>ト),ロビイストとルビイストの間には音が似ているという以上の
>関係は無いでしょう.

なるほど. では, rubyist ということで. 
# でも, rubyのエキスパートのことではないよなあ.

__
..........................................石塚 圭樹@SHLジャパン(株)...
------------->アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----

In This Thread

Prev Next