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".

Reply via email to