|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [MirageOS-devel] Timestamp representation and CLOCK
Hello,
While working on ptime David Sheets suggested me that moving away from OCaml's
usual representation for POSIX timestamps, namely an OCaml float representing
seconds from the epoch, might be a good idea as it is nowadays possible to get
nanosecond precision timestamps and those cannot be represented exactly in this
representation (he also mentioned hardware not having FP support as an
argument).
I'm now quite convinced that this should be done and would like to support this
both at the API level and internally in ptime (which currently only has
millisecond precision). I propose that the canonical representation should be
the following one which is basically what a POSIX timespec definition [1] gives
us and is OCaml 32-bit clean:
type posix_t = int64 * int
Understood as a signed, second precision, time span paired with a non-negative
number of nano seconds ranging from 0 to 999'999'999. Formally a tuple `(s,
ns)` represents the time that happens at `s + 1e-9 * ns` from the epoch.
It also seems that there is consensus that the current CLOCK interface [2] is
absurd, forcing any clock source implementer to come up with calendar field
decomposition functions (gmtime). I think that the following interface would be
sufficient:
module type CLOCK = sig
val now_s : unit -> int64 * int
(** [now_s ()] is [(s, ns)] the operating system's POSIX timestamp
for the current time understood as the number of seconds [s] +
1e-9 * [ns] from the epoch 1970-01-01 00:00:00 UTC. [ns] ranges
from [0] to [999_999_999]. *)
val current_tz_offset_s : unit -> int
(** [current_tz_offset_s ()] is the operating system's current local
time zone offset to UTC in seconds. *)
end
Would people agree on such an API and change for the next major release of
mirage ? If so, I'd be willing to actually delve into the various repos to make
that happen.
Best,
Daniel
[1] http://pubs.opengroup.org/onlinepubs/009695399/basedefs/time.h.html
[2]
https://github.com/mirage/mirage/blob/04f3ed8d983f73d59ca1dd560fc9c03f99faf331/types/V1.mli#L79-L105
_______________________________________________
MirageOS-devel mailing list
MirageOS-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |