[squeak-dev] clockPolicy (Re: The Inbox: Chronology-Tests-ul.15.mcz)
David T. Lewis
lewis at mail.msen.com
Thu Jan 17 00:26:24 UTC 2019
I have no strong preferences, other than to say that fewer options is
better if possible.
I do need to correct myself - I said in the email below that the current
default clock policy is #monotonicForceNanosecondIncrement, but I meant
to say that #monotonicAllowDuplicates is the default. That is not what
you would want for the use case of forcing unique keys.
Dave
On Wed, Jan 16, 2019 at 05:44:14PM -0600, Chris Muller wrote:
> I agree with #acceptPlatformTime as the default, but can't we keep the
> others around? #monotonic *definitely* has a use-case (e.g,
> unique-key), and they all sound useful depending on the circumstance
> -- or, at least informative about the properties of #now...
>
>
> On Mon, Jan 14, 2019 at 7:48 PM David T. Lewis <lewis at mail.msen.com> wrote:
> >
> > Thanks Levente for the test update.
> >
> > All:
> >
> > For background on Time class>>clockPolicy, below is the explanation from
> > my original commit notice in the UTCDateAndTime repository.
> >
> > My personal preference would be to adopt #acceptPlatformTime (currently it
> > is set to #monotonicForceNanosecondIncrement), and to remove the clock
> > policy options entirely. I expect that others may have different opinions.
> >
> > Dave
> >
> >
> > Name: Chronology-Core-dtl.14
> > Author: dtl
> > Time: 20 March 2016, 9:42:49.417923 pm
> > UUID: 813fbf89-d8e0-4242-a5e5-9e665c9b8618
> > Ancestors: Chronology-Core-ul.13
> >
> > Implement a variety of policies for incrementing the clock on repeated
> > calls to DateAndTime class>>now. It is not clear which policy may be best,
> > so provide four variants for experimentation and review. Presumably three
> > of the four options can be removed at a later date.
> >
> > See Time class>>clockPolicy to select a policy. The current clock policy
> > is set to #monotonicForceNanosecondIncrement.
> >
> > The four policies are:
> >
> > #acceptPlatformTime - Accept the time value provided by the system
> > platform, even in this allows time to appear to move backwards when
> > the clock is adjusted. Simple, fast, and no hidden side effects.
> >
> > #monotonicAllowDuplicates - Accept the time value provided by the
> > system platform unless it is less that the last clock tick. This
> > protects for system clock adjustments. Side effects unlikely. Does not
> > ensure unique values on repeated calls.
> >
> > #monotonicForceMicrosecondIncrement - If the time value is less than or
> > equal to the value from the last call, force increment by one microsecond.
> > This ensures integral values of UTC time, but increments the time value
> > by a full microsecond.
> >
> > #monotonicForceNanosecondIncrement - If the time value is less than or
> > equal to the value from the last call, force increment by one nanosecond.
> > This it functionally compatible with previous Squeak practice, but is
> > computationally expensive and results in time values represented as
> > fractions, which might be a problem for some database applications.
> >
> >
> > On Mon, Jan 14, 2019 at 12:18:42PM +0000, commits at source.squeak.org wrote:
> > > Levente Uzonyi uploaded a new version of Chronology-Tests to project The Inbox:
> > > http://source.squeak.org/inbox/Chronology-Tests-ul.15.mcz
> > >
> > > ==================== Summary ====================
> > >
> > > Name: Chronology-Tests-ul.15
> > > Author: ul
> > > Time: 14 January 2019, 1:18:04.380862 pm
> > > UUID: 31a3ca9d-4c54-4034-9d36-9967644e2d87
> > > Ancestors: Chronology-Tests-dtl.14
> > >
> > > - updated DateAndTimeTest >> #testPrecision to be aware of Time's ClockPolicy
> > >
> > > =============== Diff against Chronology-Tests-dtl.14 ===============
> > >
> > > Item was changed:
> > > ----- Method: DateAndTimeTest>>testPrecision (in category 'Tests') -----
> > > testPrecision
> > > "Verify that the clock is returning a value with accuracy of better than 1 second. For now it seems sufficient to get two values and verify they are not the same."
> > >
> > > + | originalClockPolicy |
> > > + originalClockPolicy := Time clockPolicy.
> > > + [
> > > + #(
> > > + "#acceptPlatformTime is not listed here, because it doesn't guarantee monotoncity."
> > > + monotonicAllowDuplicates <=
> > > + monotonicForceMicrosecondIncrement <
> > > + monotonicForceNanosecondIncrement <
> > > + ) pairsDo: [ :clockPolicy :comparator |
> > > + | first second |
> > > + Time clockPolicy: clockPolicy.
> > > + first := DateAndTime now.
> > > + second := DateAndTime now.
> > > + self
> > > + assert: (first perform: comparator with: second)
> > > + description: ('Clock policy {1} didn''t compare with {2}' format: { clockPolicy. comparator }) ] ]
> > > + ensure: [ Time clockPolicy: originalClockPolicy ]
> > > - self
> > > - assert: (DateAndTime now ~= DateAndTime now)
> > > !
> > >
> > >
> >
>
More information about the Squeak-dev
mailing list
|