C++ bounded::integer library
david stone via Digitalmars-d
digitalmars-d at puremagic.com
Tue Jul 15 19:15:01 PDT 2014
On Saturday, 17 May 2014 at 17:31:18 UTC, bearophile wrote:
> I am reading all the slides in this page (some are still
> missing and will be added later):
> https://github.com/boostcon/cppnow_presentations_2014
>
> Here are the slides of a nice talk, "Removing undefined
> behavior from integer operations: the bounded::integer library":
>
> https://github.com/boostcon/cppnow_presentations_2014/blob/master/files/bounded_integer.pdf?raw=true
>
> Some design decisions are not good (like not throwing at
> run-time on default, the long name, and more). Near the end of
> the slides pack it shows that a bit of language support can
> help improve both the syntax and the usage.
>
> Bye,
> bearophile
Hello bearophile. I am the presenter / author of said library, so
I feel I should comment on this.
First, the default overflow policy. This is an issue I have
struggled with a bit. The current default is to mirror built-in
integers in terms of performance. If a user types
bounded::integer<0, 10>, they get a type with no run-time checks.
I did consider making bounded::throw_policy the default (right
now, the typedef for that is bounded::checked_integer<0, 10>). My
reasoning for this that I suspect this is the behavior that most
people want. I could be convinced otherwise primarily by way of
proving that compilers can optimize away the run-time bounds
check for common cases: situations like the integer increment for
a loop index variable. I've also considered a debug assert
statement for the default.
Second, the name. If you have suggestions for something better, I
am listening. I definitely understand the importance of common
types being short. The previous version of this library had the
namespace as bounded_integer and the class type as
bounded_integer, so instead of bounded::integer<0, 10>, you had
to refer to it as bounded_integer::bounded_integer<0, 10>, which
was even worse. My ideal would probably be something like int<0,
10>, but I'm not getting that for fairly obvious reasons. I do
find myself not typing out the name of the type very often,
though, preferring to let auto deduce the types for me.
You say you have more criticisms of the library design, so I hope
they are nothing too fundamentally flawed. I would like to hear
them so that I can fix them (or perhaps I addressed the issue in
my talk? The video is not yet posted).
Thank you for the link :)
More information about the Digitalmars-d
mailing list