user defined no bounds check
monarch_dodra
monarchdodra at gmail.com
Mon Aug 20 03:44:40 PDT 2012
On Monday, 20 August 2012 at 09:58:54 UTC, Jonathan M Davis wrote:
>
> I'm not sure that it was ever even considered that the
> programmer might want
> to do something special with them. assert is affected by
> -release, and -
> noboundscheck was added later for extra control. They had
> nothing to do with
> the programmer doing anything in their code. I have no idea how
> Walter would
> feel about adding noboundscheck and/or release versions which
> correspond to
> the flags.
>
> But since it's generally bad practice to make code differ
> between non-release
> mode and release mode, and assert already gives you the ability
> to have checks
> that which are around in non-release but not in release, I
> don't know that it
> really buys you much to add such version identifiers.
>
> - Jonathan M Davis
C++ uses "ifdef debug" a lot, so I guess it is confusing at
first, but "assert" can indeed get the same done (worst case
scenario, it can call a function with side effects that always
returns true). There is no equivalent for "ifndef debug", but I
agree that is bad.
Regarding "noboundscheck" I was thinking in particular about
Container.Array, or any other range in general. If the user
compiles using noboundscheck, then one can only assume the user
does not want for Container.Array.Range to check its own bounds
either.
Andrei says something in his book along the lines of "If a built
in can do it, so should a user defined type" (don't have the
quote here though, sorry). So basically, if a built in array can
conditionally control bounds checking, why can't a user defined
range do it?
More information about the Digitalmars-d-learn
mailing list