On 20/11/13 01:01, Andrei Alexandrescu wrote:
There's been recent discussion herein about what parameter validation method
would be best for Phobos to adhere to.
Currently we are using a mix of approaches:
1. Some functions enforce()
2. Some functions just assert()
3. Some (fewer I think) functions assert(0)
4. Some functions don't do explicit checking, relying instead on lower-level
enforcement such as null dereference and bounds checking to ensure safety.
Each method has its place. The question is what guidelines we put forward for
Phobos code to follow; we're a bit loose about that right now.
Regarding enforce() vs. assert(), a good rule that I remember having suggested
to me was that enforce() should be used for actual runtime checking (e.g.
checking that the input to a public API function has correct properties),
assert() should be used to test logical failures (i.e. checking that cases which
should never arise, really don't arise).
I've always followed that as a rule of thumb ever since.