Checked integer type API design poll
tsbockman via Digitalmars-d
digitalmars-d at puremagic.com
Wed Sep 16 18:48:13 PDT 2015
I have written some poll questions concerning the design
trade-offs involved in making a good `SafeInt`/`CheckedInt` type.
They are about the actual semantics of the API, not the
internals, nor bike-shedding about names.
(`SafeInt` and `CheckedInt` are integer data types which use
`core.checkedint` to guard against overflow, divide-by-zero, etc.
Links to current work-in-progress versions by
1) Robert Schadek (burner):
https://github.com/D-Programming-Language/phobos/pull/3389
2) Myself (tsbockman):
https://github.com/tsbockman/CheckedInt)
For the purposes of this poll please assume the following (based
on my own extensive testing):
1) Code using checked operations will take about **1.5x longer to
run** than unchecked code. (If you compile with GDC, anyway; DMD
and LDC are another story...)
2) The main design decision with a significant runtime
performance cost, is whether to throw exceptions or not. With
some optimization, the hit is modest, but noticeable.
3) Even if the API uses exceptions some places, it can still be
used in `nothrow @nogc` code, at the cost of some extra typing.
Two further points I would ask the reader to consider:
* A checked integer type is fundamentally semantically different
from an unchecked type. The difference is of similar magnitude to
that of floating-point vs fixed-point.
* It might be wise to read the entire poll before answering it -
the questions are all related in some way.
The poll results are here, if you wish to preview the questions:
http://polljunkie.com/poll/kzrije/checked-integer-type-behaviour/view
When you are ready, please take the poll yourself:
http://polljunkie.com/poll/cytdbq/checked-integer-type-behaviour
Thanks for your time.
More information about the Digitalmars-d
mailing list