On 07/01/2016 12:35 PM, Nordlöw wrote:
What's the preferred way of reacting to emptyness in the members front,
back, popFront, popBack --- using assert, enforce, throw, or simply
relying on range-checking in the _store?
I think assert is the most common way of checking. Simply ignoring the
possibility is also common, as it's considered a programming error to
call front/popFront/etc on an empty range.
For the same reason, throwing an exception (via throw or via enforce) is
less common. Exceptions are more for input/environment errors, not so
much for programming errors.
And what about using
debug assert()
instead of
assert()
typically when `_store`s `opIndex` already performs range-checking?
I think this is a important issue since asserts are not optimized away
in release mode and D is very much about performance.
Huh? Asserts are ignored with -release. The only exception is
assert(false) which terminates the program immediately, even with -release.
A little example program:
----
void main()
{
import std.stdio;
int x = 1;
assert(x != 1);
writeln("hi");
}
----
When compiled without -release, the program throws an AssertError. With
-release it prints "hi".