On Wednesday, 16 December 2015 at 07:07:09 UTC, Charles Hixson wrote:
It wouldn't need to be a breaking change if checked integer were a separate type series, as the unsigned series is. The types could be called "cint" etc. I expect that they would incur significant overhead, as I don't think there is hardware support for checked integers, and as such the current types would need to be maintained.

There is hardware support for checked integers, actually. Even the library type that Robert Schadek and I have been working on will be able to at least partially leverage that support, through the intrinsics in `core.checkedint`.

Still, there is always going to be some runtime overhead associated with checked integers: at a minimum, including a code path to explicitly handle integer math errors increases programs' instruction count significantly.

Compiler support would allow the possibility of automatically eliding redundant checks. More importantly, it would also make compilation of code using lots of checked integers much faster, as getting good performance and generic code compatibility with a library checked integer requires templated function calls everywhere, which must all be inlined.

As to it being a non-breaking change: the issue is that almost all existing usage of `int`, should really be `cint`. Even if you update your own code to use `cint`, interacting correctly with APIs which erroneously use `int` gets awkward, assuming you want to actually benefit from the improved safety of `cint`.

However, updating a public API to use `cint` is a breaking change for both performance and type safety reasons.

Any such code updates would also have to be reviewed and tested thoroughly, because while switching to `cint` would *almost* always be a good thing, people do occasionally intentionally make use of the wrapping nature of unchecked integers - and even of the wonkiness of mixed signed/unsigned math. Since there is no standard way currently of marking such cases, only a real person, familiar with the code base, could update it - no (safe) automated updates is possible.

Overall, it's probably not worth the additional work and risk of adding support directly to the compiler, unless it's going to become the default (as it should have been from the beginning). Hence, D3...

Reply via email to