[D-runtime] Why is clock_gettime() commented out?

Fawzi Mohamed fawzi at gmx.ch
Fri Nov 19 12:25:06 PST 2010


On 19-nov-10, at 20:10, Jonathan M Davis wrote:

> On Friday, November 19, 2010 10:40:29 Sean Kelly wrote:
>> On Nov 18, 2010, at 9:38 PM, Jonathan M Davis wrote:
>>> On Thursday 18 November 2010 21:24:16 Sean Kelly wrote:
>>>> On Nov 18, 2010, at 6:57 PM, Jonathan M Davis wrote:
>>>>> Is there a particular reason why clock_gettime() and various  
>>>>> related
>>>>> posix C time functions are all commented out in  
>>>>> core.sys.posix.time and
>>>>> core.sys.posix.signals? They're necessary to get either a realtime
>>>>> clock or a monotonic clock on Posix systems. It is true that that
>>>>> necessetates linking with -lrt, but as far as I know, all Posix
>>>>> systems should have librt, and the flag could be added to  
>>>>> dmd.conf.
>>>>>
>>>>> The stopwatch code in std.datetime is going to be potentially
>>>>> inaccurate without clock_gettime(), and the normal time code  
>>>>> won't be
>>>>> quite as precise. Ideally, clock_gettime() would be available.  
>>>>> Why are
>>>>> all of those time functions commented out? Were they causing  
>>>>> problems
>>>>> somehow?
>>>>
>>>> I don't recall.  I wrote all of the linux header blocks while the  
>>>> others
>>>> were submitted.  My best guess is that they weren't defined back  
>>>> when I
>>>> created the headers.  I see no problem with uncommenting them so  
>>>> long as
>>>> the functions exist though.  I'll verify and then make the change  
>>>> for
>>>> linux and OSX.
>>>
>>> They definitely should exist. The caveat is that you have to link  
>>> with
>>> librt for them to work (why they didn't just stick them in glibc  
>>> proper,
>>> I have no idea - especially when anything that cares about precision
>>> time at all should be using them).
>>
>> clockid_t and related functions don't exist on OSX, so if you want  
>> to use
>> them in std.datetime you'll have to fail gracefully to something less
>> accurate.
>
> That's annoying. Well, it uses gettimeofday() if clock_gettime() isn't
> available, which isn't as good, but as is close as you can get as  
> far as I know,
> but because druntime and phobos are pre-compiled as libraries, it  
> has to be
> based on the platform (you couldn't, for instance, use  
> clock_gettime() on some
> Linux machines and gettimeofday() on others), but making MacOSX work  
> differently
> from Linux works just fine. I do have to wonder though if MacOSX has  
> its own
> functions for getting a monotonic and/or realtime clock. If so, we  
> may want to
> use those on MacOSX. It's particularly undesirable to be using a non- 
> monotonic
> clock for timing code such as std.datetime.StopWatch. But assuming  
> that my
> proposed core.time and std.datetime are accepted, it will be an  
> issue in both
> core.time and std.datetime, because while the code for getting the  
> time for
> SysTime and the like is in std.datetime, because TickDuration has to  
> go in
> core.time, the code which grabs the time from the monotonic clock is  
> in
> core.time.

see
https://github.com/fawzi/blip/blob/master/blip/time/RealtimeClock.d
I think you can lift it from there.

Fawzi
>
> - Jonathan M Davis
> _______________________________________________
> D-runtime mailing list
> D-runtime at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/d-runtime



More information about the D-runtime mailing list