Hi
On 04.07.26 00:16, Tim Düsterhus wrote:
Hi
On 7/3/26 22:45, Marc B. wrote:
An alternative would be to use the same sign for nanoseconds as for
seconds (while 0 seconds is neither positive or negative)
Yes, this is effectively mentioned in the “Design Considerations”
section of the RFC.
I think you missed my point and truncated my explanation example.
1.5s = 1 second + 500_000_000 nanoseconds
-1.5s = -1 seconds + -500_000_000 nanoseconds
-0.5s = 0 seconds + -500_000_000 nanoseconds
No negative flag needed to be handled separately.
"... if you are interested in absolute values, you have the magnitude
right there and can ignore the `$negative` flag."
No I can't
* adding two durations does NOT guaranties a value greater than the two
* passing a negative duration as timeout might throw
* ...
The use cases you listed there are all passing the Duration object
somewhere else, which I do not consider to be a case of “if you are
interested […]”.
The quoted sentence if referring to situations where your code is the
end user of the Duration object and extracts the contents from it for
further processing. And in those situations a sign-magnitude
representation makes processing easier, because you have a single
authoritative source of the sign, not one in each component and
because you can extract the magnitude right away, without needing to
flip the sign of each component.
If you care about positive values only - use `absolute()`
If you want to know the sign of the duration - the is still the is
negative property - but it's a getter and not a required to be stored flag.
This does not answer the meaning difference of `seconds` vs.
`nanoseconds` - it's confusing naming that `seconds` is the total amount
of seconds in this duration but `nanoseconds` is the number of fractions
of a second.
A value-object, such as Duration, is uniquely described by the sum of
its properties. And in this case, it's quite literally the sum of the
$seconds and $nanoseconds.
You missed your own $negative flag
Am I get you right that you dislike property get hooks on value objects
in general?
See https://externals.io/message/131376#131755
I'm afraid I don't see how one would get the assumption that $seconds
would redundantly be equal to ($nanoseconds / 1_000_000_000) or
something like that when the object only has $seconds and $nanoseconds
properties without also having $milliseconds, $minutes, or something
else. The confusion would also be quickly cleared up just by looking
at the object and seeing that the $nanoseconds value is always smaller
than 1 billion.
In my opinion renaming the $nanoseconds to $fractionalNanoseconds
would greatly decrease the ergonomics of the class.
I more thought about renaming `$seconds` into `$totalSeconds`.
Regards,
Marc