halt with optional message?
Vladimir Panteleev
vladimir at thecybershadow.net
Thu Aug 11 04:27:35 PDT 2011
On Thu, 11 Aug 2011 14:20:46 +0300, bearophile <bearophileHUGS at lycos.com>
wrote:
> Contracts contain asserts,
But contracts are removed in release executables too, no?
> sometimes asserts are kept in the released binaries too (dmd has many
> asserts active) and those asserts hopefully contain an error message for
> debugging.
Consider: regular asserts are removed from release executables. assert(0)
compiles to a HLT instead of nothing merely because it has practically no
overhead (only one byte of machine code)!
I think you're confusing the purpose of asserts with something else again.
Besides, there are some who think that the special case of assert(0) is
confusing/inconsistent with regular asserts enough, why do you want to
enlarge that distinction even more?
> I don't think that removing them improves the program and its usage in
> any way.
If I'm writing a commercial, closed-source program meant for
redistribution, including any unnecessary information that helps reversers
to understand how the program works is just stupid.
> Also, here we are discussing about assert(0), it's a different kind of
> assert, that is kept in release mode too. If the program prints a
> debugging message and the user tells me the error message (this is right
> what has just happened to me), I am able to know what assert(0) has
> fired even if the user is not using a debugger. So I don't think you are
> right.
You're not supposed to use -release if you want to know what happened.
Failed asserts in release executables should never happen, unless your
program is buggy. If your program is buggy, don't use -release until
you've debugged it.
> puts() is not pure, so if you add a puts() in a function, the function
> can't be pure. So the function that calls this function can't be pure...
This is the least of my concern.
--
Best regards,
Vladimir mailto:vladimir at thecybershadow.net
More information about the Digitalmars-d
mailing list