Rant: Date and Time fall short of simplicity in D
Steven Schveighoffer
schveiguy at yahoo.com
Fri Mar 29 14:36:37 PDT 2013
On Fri, 29 Mar 2013 17:17:58 -0400, Jonathan M Davis <jmdavisProg at gmx.com>
wrote:
> But std.conv.to is the standard way to convert things, and I don't see
> how
> changing how std.conv.to determines how to do the conversion would help
> us
> any. Whether there was a to function on the type or opCast really makes
> no
> difference if you're using std.conv.to, and if you're not, then the way
> that
> the language provides to covert types - casting - works.
>
> Unless you're arguing for using something other than std.conv.to to
> convert
> types, I really don't see the problem, and arguably, because std.conv.to
> is
> really the standard way to convert stuff, it's what should be used. So,
> I could
> see a definite argument for using std.conv.to in code rather than
> opCast, but I
> don't see much point in avoiding defining opCast on types, especially if
> code
> is then generally using std.conv.to rather than casting directly.
When I say "cast(Duration)time is ugly and dangerous" you say, "use
std.conv.to instead." Why?
It seems you are using std.conv.to as part of the API of core.time types.
I can't really understand the point of this. There exists a safe and
necessary conversion (since both provide different features) from a
TickDuration to a Duration. Why would that be an obscure part of the
API? Why would the preferable interface be to use a cast? Why does
std.conv.to have to be involved to get something readable that doesn't
contain the red-flag cast operator? Both TickDuration and Duration know
about each other, there is no reason to make this a dangerous operation
(and yes, casts are dangerous and should be avoided).
It looks to me like the only reason a cast was chosen over a
property/method is *so* it will work with std.conv.to. I contend that it
would be better of std.conv.to was not able to convert these types than to
have to use cast on it to get this behavior.
If std.conv.to cannot work on type-defined conversions without opCast,
then it is poorly implemented. There needs to be a better mechanism.
-Steve
More information about the Digitalmars-d
mailing list