On 3/2/18 1:21 PM, Jonathan M Davis wrote:
On Friday, March 02, 2018 11:25:00 Steven Schveighoffer via Digitalmars-d
Yes, I think assertions should be kept in @safe code. It's weird to have
array bounds checks kept, but not assertions (which is how you would do
equivalent bounds checks in a custom type).
Then just don't compile with -release. I'd be a _lot_ less likely to use
assertions if I knew that the compiler was going to leave them in in release
mode. Assertions help find bugs, but they aren't doing anything to make the
code any more @safe unless some aspect of the compiler assuming that the
assertion is true when it's compiled out allows for the compiler to then
function in a manner that isn't @safe, which I doubt, but if it does, then
that needs to be fixed, not leaving in a bunch of extra checks intended for
catching bugs in development.
As ag says, @safe code is supposed to be free of undefined behavior. If
-release means it has undefined behavior, that is a problem. I'd much
rather have assertions in release mode than undefined behavior in
The other option is to make sure the compiler cannot make any
assumptions about the asserts when they are compiled out in @safe code.