On Tuesday, 23 August 2016 at 20:40:06 UTC, Andrei Alexandrescu
wrote:
Currently checkedint
(https://github.com/dlang/phobos/pull/4613) stands at 2432
lines and implements a variety of checking behaviors. At this
point I just figured I can very easily add custom bounds, e.g.
an int limited to 0 through 100 etc. It would take just a few
lines because a lot of support is there (bounds hooks, custom
min/max) anyway.
However, I fear it might complicate definition and just be a
bit much. Here's the design I'm thinking of. Current:
struct Checkedint(T, Hook = Abort);
Under consideration:
struct Checkedint(T, Hook = Abort, T min = T.min, T max =
T.max);
It's easy to take the limits into account, but then there are a
few messes to mind:
* When assigning a Checked to another, should the limits be
matched statically or checked dynamically?
* When composing, do the limits compose meaningfully?
* How to negotiate when both the user of Checked and the Hook
need to customize the limits? (e.g. if you look at WithNaN it
needs to reserve a special value, thus limiting the
representable range).
I think all of these questions have answers, but I wanted to
gauge the interest in bounded checked integrals. Would the need
for them justify additional complications in the definition?
Andrei
It's just an abortion.
There is a C++ bounded::integer library by David Stone that looks
much better than what you have here. For a language that's
claiming to be a better C++ and with better CT features, I would
expect something more elegant and useful. Besides, this only
works with integers. You've been bashing Go for lack of
generics, so how about we see something that works with other
types too, no?
Perl 6:
subset MyInt of Int where (4 < * < 123);
or for string,
subset MyStr of Str where (0 < *.chars < 100);
Just beautiful, and what you would expect from a language that's
trying to be better than the past.