haskell-ja > Archives > 2011/01/20

2011/01/20 02:07:01 UTCkazu
#
Mac だと time_t は long で、「64bit バイナリになればいいでしょう? 」ってことかな?
#
Linux でも事情は同じみたい。32bit カーネルでは、time_t の大きさは 32ビットです。2038 年までに、64bit カーネルにしてね。
#
あるページを同じ URL wo
#
う、変になった。
#
話は戻りますが、あるページを content negotiation を使って言語を切り分ける場合、別の URL にリダイレクトする方がいいです。同じ URL で複数の言語ページを提供すると、検索エンジンには英語のページしか、ひっかからなくなりますので。
#
http://mew.org/ にアクセスすると、言っている意味が分かると思います。
2011/01/20 03:07:46 UTCshiro
#
POSIXdeha
#
POSIXではtime_tが整数型であることは要求されてないんじゃなかったでしたっけ。Gaucheはtime_tがdoubleである場合への対応コードも入っていますが、そういうプラットフォームがあるのかどうかは知りません。
2011/01/20 03:42:25 UTCnobsun@twitter
#
ううむ。ghc では time_t をCInt という整数に対応させているようなので、それはそれで別の問題があるということになるのかな。
2011/01/20 03:45:26 UTCikegami__@twitter
#
ghc というか、Cabal time package は、POSIX にあわせているので、CInt を選ぶのだと思います、非推奨の old-time は data ClockTime = TOD Integer Integer でした
#
Haskell についていえば、Haskell98 では ClockTime が実際に何であるかは定義していません、また Haskell 2010 では、そもそも Data.Time がないです… (定義しないほうがよいという判断かな
2011/01/20 05:00:34 UTCshelarcy@twitter
#
nobsun が言っているのは、Data.Time.Clock.CTimeval モジュールで呼んでいる gettimeofday が CInt 型決めうちで返すようになっているという問題ですね。
#
gettimeofday を使って実装されている getCTimeval が返す型は CTimeval で、この型の表現は data CTimeval = MkCTimeval CLong CLong です。
#
baseパッケージの Foreign.C.Types 型で提供されている CTime 型は使用している環境の time_t に応じたバイト表現になるはずなので、time パッケージの実装ミス(あるいは何らかの理由で変えた)といったところでしょうか?
#
c.f. http://www.haskell.org/ghc/docs/7.0.1/html/libraries/base-4.3.0.0/Foreign-C-Types.html#t:CTime
2011/01/20 05:22:37 UTCshelarcy@twitter
#
なお、ここまでの話は全て POSIX 環境の話で、Windows では(MinGW で提供されている gettimeofday を使わずに)GetSystemTimeAsFileTime を呼び出して 64 bit な値を返す実装になってますね。
#
c.f. http://hackage.haskell.org/packages/archive/time/1.2.0.3/doc/html/src/Data-Time-Clock-POSIX.html
#
http://hackage.haskell.org/packages/archive/Win32/2.2.0.2/doc/html/System-Win32-Time.html
2011/01/20 05:31:39 UTCshelarcy@twitter
#
あっ、Win32 パッケージの FILETIME 型の実装が間違っている(古い?)ので、将来的には直した方が良いかも。 http://msdn.microsoft.com/en-us/library/ms724284(v=vs.85).aspx
2011/01/20 05:39:40 UTCshelarcy@twitter
#
あっ、あと ikegami__ さんが言っていたのは、POSIX 環境の実装は POSIX に合わせているので CTime ではなく CInt を返すということですね。読み落としていました。すみません。