> On Jul 13, 2016, at 9:18 , Karl via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> nuances about the clock (basically, whether or not it pauses during system 
> sleep) are edge-cases which can be handled for the majority of users with a 
> sensible default value

I’m going to stay out of the naming part of the conversation for the moment and 
just address this point…

I disagree strenuously: it’s a super important distinction that is frequently 
the cause of subtle but bad bugs!

Lets start with the fact that you (presumably not the novice user you describe 
below) actually got the difference between the two clocks wrong.  Here’s the 
current behavior (on Darwin, not sure what Linux currently implements):

  - DispatchTime is a clock that only advances forward and tracks the amount of 
time the computer is awake.

  - DispatchWillTime is a clock that tracks as a UTC clock would, generally 
moving ahead during sleep, but is *not* monotonic.  It can move forward, 
backward, upside down, whatever it wants.  And frequently it will.

And this stuff is hard: if you are writing a tea timer app and you pick either 
of these, you have a bug.  DispatchTime, the bug is that if the user locks 
their device and it falls asleep the alarm won’t fire upon wake.  
DispatchWallTime, if the device realizes its clock is ahead or behind the 
“real” time the elapsed duration won’t be what you expect.  (Should we have a 
third that works for the tea timer? Absolutely…)

So, what’s the sensible default you had in mind that won’t fail for a large 
portion of use cases?  Safety is an important design point in an API surface 
and making these distinctions clear to developers is absolutely critical to 
achieving that goal.

(Of course, Foundation.Timer gets all of the above horribly wrong, IMHO.  We 
should fix that too…)

>  (the monotonic and walltime clocks are actually split at the type level)

DispatchTime is not a monotonic clock.  At least, not in the POSIX sense.  So 
let’s not call it that.  (Linux’s failure to implement POSIX correctly 
notwithstanding.)

> Novice users are not going to understand what’s going on here - I expect most 
> of them to default to the more generic-sounding “DispatchTime” without any 
> idea of the implications of this.

If that’s the case, that’s a good argument for forcing users to make the choice 
in an even more obvious and explicit way.  Not making it easier to use one or 
the other when they’ll likely get it wrong.

~ Anthony
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to