From: Urabe Shyouhei Date: 2009-03-29T21:14:58+09:00 Subject: [ruby-dev:38202] Re: big time 卜部です。 Tanaka Akira さんは書きました: > 今、私が反論するなら「time_t が本当に必要になるまでは time_t > な値を作らなくてもいいんじゃないの」ということになります。 > > たとえば、ファイルのタイムスタンプに設定するには time_t な値 > がどうしても必要ですが、以下でいうと Time.utc じゃなくて > File.utime で例外にすればいいんじゃないのか、ということです。 このパッチが具体的にどうという話ではなく、もうちょっと一般的な方針として、どう かなあという気がしています。不正な値が見つかるのは早ければ早い程よいと思うから です。 たとえば、touch(1)のクローンを作っていたとしましょう。んで、コマンドライン引数 の解釈にバグがあって、紀元前3億世紀とか、なんでもいいですけど、ともかくファイル 更新時刻として不正なTimeオブジェクトを作ってしまったとしますね。そうすると、 1) 見つけたいバグがあるところ: コマンドライン引数解釈器 2) 実際に例外が上がるところ: File.utimeとか という不一致が生じてしまうわけです。ここで、2)のほうもあなた自身が書いたコード ならまだ追いかけられるかもしれませんが、えてして2)はライブラリの中だったりとか するわけですよ。具体的にはFileUtilsとか。そうすると * スクリプト作者はどこが悪いのか追いかけられない * ライブラリ作者は自分のせいじゃないバグ報告でモチベーションが削がれる (だってユーザーが見るのは2のほうのバックトレースだし) という問題がある。これはよくないと思います。 こういう話はべつにTimeに限った話じゃなくて、最近見かけた例としては1.9でERBに与 えるテンプレートと埋め込む文字列のencodingがcompatibleでない場合などは、同様に ERBの中から例外が上がってくるんだけど、一体どのオブジェクトがいけなかったのかが さっぱり分からん。とか、まあ、いろいろありそうな話じゃないですか。一般的に。 これまではTimeは「生成できれば、とりあえずOSとのやりとりには使える」という、逆 に言えばまずい時には生成する瞬間に例外になってくれていたわけで、これはよいイン ターフェースだったと思うわけです。今回そのような特徴を排することになると、より デバッグが難しい方向に倒れてしまう気がします。どんなもんでしょう。