Joseph Rushton Wakeling:
Is there a way to put in place a conditional segment of code
that is included if the code is _not_ compiled with the
-release flag?
Contract programming? D is designed to make it hard on purpose to
do what you want to do.
The reason I'm asking is because the checks I want to perform
are of the form,
foreach(x; myVeryLargeArray) {
assert(/* ... some condition about x */);
}
... and I'm concerned that with the foreach() loop in place, it
will slow down the code even if the assert() statements are
ignored at compile time. So I'd like to be able to do
something instead like,
version(!release)
{
foreach(x; myVeryLargeArray) {
assert(/* ... some condition about x */);
}
}
... is this possible?
My suggestion is to use a pure helper predicate, possibly nothrow
too (a pure lambda too is OK):
bool isGood(MyType x) pure {
...
}
foreach(x; myVeryLargeArray) {
assert(isGood(x));
}
The purity of the predicate is almost necessary, to be sure your
program behavior doesn't change between release and non-release
mode.
Bye,
bearophile