Closed

Description
The most common use of Duration
for me is benchmarking, and it's always a very unpleasant experience. This is what I typically write:
let now = Instant::now();
// Do something...
let elapsed = now.elapsed();
println!("{:?}", elapsed);
Output: Duration { secs: 1, nanos: 59219906 }
Wait, how much time has elapsed? That's terribly unreadable... :(
The docs for Duration
are not very helpful either. When you first see it, Duration
is pretty confusing, mostly because of the as_secs
/subsec_nanos
split.
Then I take a look at the docs for Instant
, but the examples show how to print the seconds part only.
Anyways, all I want to do is just print how much time has elapsed without squinting to connect secs
and nanos
together. Finally, I arrive at this horrible solution:
println!("seconds: {:.3}", elapsed.as_secs() as f64 + elapsed.subsec_nanos() as f64 / 1e9);
Three ways of fixing this come to my mind:
- Add a function to
Duration
that converts it to a (lossy)f64
format. - Add examples to the docs for
Instant
andDuration
that demonstrate how to print the duration time in a human readable form (e.g. total seconds with precision to 3 decimals). - Change the
Debug
formatting forDuration
and print it like this:Duration(secs.nanos: 1.059219906)
(note the leading zero). Or maybe evenDuration { secs: 1, nanos: 059219906 }
(again, the leading zero).
What do you think?
Metadata
Metadata
Assignees
Labels
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
steveklabnik commentedon Feb 19, 2017
This seems like just as much a question for @rust-lang/libs as it does @rust-lang/docs
ranma42 commentedon Feb 19, 2017
See also #38475 (another call for solution 1).
As an alternative to 3, there were some attempts at implementing
Display
forDuration
(see #29146), but they were rejected because is seems hard to have "one true way" to displayDuration
values across a wide range of values.ghost commentedon Feb 19, 2017
How about this non-lossy function?
Printing:
ranma42 commentedon Feb 19, 2017
The
to_nanos
function was discussed here #35868.It looks like several
Duration
-related items were blocked because of the lack ofi128
(see also #32515). Maybe this is a good time to discuss them again? Some experience has probably been gathered through the https://github.com/sfackler/rust-time2 crate.sfackler commentedon Feb 19, 2017
They were not blocked on i128, they're blocked on someone writing up a proposal for what specifically to do. i128 returns are on option.
steveklabnik commentedon Mar 15, 2017
Docs team triage: adding p-medium for option 2.
12 remaining items