If you were designing a standard library of a high level language (like Rust, C++, etc.) what would it do if while getting the current time of day (e.g. SystemTime::now()
) it encountered a failed kernel system call (e.g. to clock_gettime
) and why?
What do you think the existing implementations do?
- Return error or raise exception
- Return 0
- Return undefined values (like stack garbage)
- Panic/crash/segfault
I think you should make the overwhelmingly likely case crash in a controlled way, but provide a way to handle it for people who truly want to keep going in such strange conditions.
In rust I would panic in
now()
, but also provide a alternative call that returns a result named something liketry_now()
, similar toVec::with_capacity
andVec::try_with_capacity
.In languages that provide them, you could also throw a runtime exception that can be ignored and just bubbles up to main unless explicitly caught.
Interestingly, Rust is what brought me to this rabbit hole. It does indeed panic in
now()
[1], but the devs seem to be reluctant to provide thetry_now()
variant[2].[1] https://doc.rust-lang.org/nightly/src/std/sys/pal/unix/time.rs.html#124 [2] https://github.com/rust-lang/rust/issues/115482