From: Yukihiro Matsumoto Date: 2006-02-27T08:54:26+09:00 Subject: [ruby-dev:28398] Re: ruby-1.8 cvs head and 64bit time_t まつもと ゆきひろです In message "Re: [ruby-dev:28396] ruby-1.8 cvs head and 64bit time_t" on Sun, 26 Feb 2006 23:45:53 +0900, arton writes: |ruby-1.8のcvs headをVC++8でmakeするとtime_tが64ビットになった関係でTime |クラスを利用するテスト(たとえばyaml)の幾つかがフェイラーになります。 |原因は、VC++の場合についてはtime_tは64ビットになったものの、Win32が提供 |するstruct timevalのメンバーが32ビットのままなので、struct timevalにMSB |が立っている値が設定されると取り出し時に符号拡張されて負値になるからです。 |たとえばTime.atの引数がFixnumの場合は負値チェックに引っかかりますが、 |Rationalを引数にした場合などでこの状態になります。 |とりあえずtime_tが64ビットかつWin32の場合に符号拡張を抑制するパッチを |http://arton.no-ip.info/data/time.patch に作ってみましたが、struct |timevalを利用しないようにするといった将来的に時刻表現が64ビット化される |ことを見越したもっとうまいやり方があると思いますので、検討していただけな |いでしょうか。 うーん、よくわかんなかったです。 VC++のtime_t 64bit化対応が不十分なために一時的に対応が必要な のか、そもそも64bit time_tとstruct timevalは相性が悪いので struct timevalは排除されるべきなのか、その辺がよく分からない からです。もうちょっと事情を解説してもらえませんか?