std.experimental.checkedint is ready for comments!

tsbockman via Digitalmars-d digitalmars-d at puremagic.com
Wed Jun 15 16:13:27 PDT 2016


On Wednesday, 15 June 2016 at 18:34:15 UTC, tsbockman wrote:
> On Wednesday, 15 June 2016 at 16:40:19 UTC, Andrei Alexandrescu 
> wrote:
>> Getting to the design: the root of the problem is a byzantine 
>> design that is closed to extension.
>
> The design was closed deliberately because of (8). Template 
> bloat is a major concern, even with the current finite design.
>
> I want `checkedint` to be usable in public APIs, and that 
> requires some standardization of error handling and base types 
> to be enforced upon the users. Otherwise, everyone will choose 
> something different and all template instantiations involving 
> integer types will become practically single-use.
>
>> Looking at the IntFlagPolicy, it offers three canned behavior: 
>> throws, asserts, and noex.
>
> The choice of policies is motivated by the natural 
> incompatibility of (2), (4), (6), and (7). I built in enough 
> variety to allow people to choose their own priorities among 
> those goals, and no more because of (8).

Re-reading what I wrote there, I makes it sound like the closed 
design was motivated solely by template bloat concerns. But, 
that's not true either.

Standardizing the error handling methods is also important for 
other interoperability-related reasons:

     * If every third-party library designs a different error 
handling method,
       people writing applications that depend on many libraries 
will have to
       study the `checkedint` error signaling of each one, and 
make sure that
       their code which interacts with each library knows how to 
detect and
       respond to its particular signaling mechanism.

       My design for `checkedint` reduces the number of 
`checkedint`-specific
       signaling methods that need to be studied down to one (the 
sticky flags
       policy). The other two policies are just using D's standard 
error-
       handling facilities, and don't require any user 
intervention anyway,
       unless you want to catch the exception for some reason.

       Even the sticky flags policy is only of concern for 
`nothrow @nogc` APIs,
       which I suspect in practice will mostly mean game libraries.

     * The relative simplicity of my policy set has allowed me to 
arrange them
       into a strict linear hierarchy, so that the results of 
mixing policies
       is predictable and safe.



More information about the Digitalmars-d mailing list