assert semantic change proposal

John Carter via Digitalmars-d digitalmars-d at puremagic.com
Sun Aug 3 15:51:57 PDT 2014


On Sunday, 3 August 2014 at 22:19:16 UTC, Ola Fosheim Grøstad 
wrote:

> But go ahead. This will lead to a fork.

What should fork is the two opposing intentions for assert.

They should have two different names and different consequences.

On Sunday, 3 August 2014 at 22:18:29 UTC, John Carter wrote:

> It comes down to two opposing view of what we use asserts for.


To give a more concrete example of this... in the team I work 
with we have the following issue.

When the DbC type programmers turn "asserts are fatal" on, we get 
asserts firing all over the place in non-DbC programmers code.

On closer inspection these come down to things like "stupid 
factory didn't connect cable A to device B, the installation 
instructions are clear, the cable always should be attached in 
the production model".

And the solution is one of...
  * Find a Device B and plug cable A into it.
  * There is a bug somewhere in the firmware.
  * There is a bug in the firmware of device B
  * You have a debugger in the entrails of device B, so the 
heartbeat stopped.
  * Something somewhere increased the latency so the timeout 
fired, maybe increase timeout..

Whereas for DbC programmers a pre-condition assert firing meant 
_very_ directly that the function that _directly_ invoked me is 
clearly defective in this manner. The bug is undoubtably there, 
there may be a bug elsewhere as well, but it is undoubtably a bug 
in my calling routine if it let defective values propagate as far 
as me.

Or if a postcondition assert fired, it means, _this_ function is 
defective in this manner.

The simple harsh fact is DbC type programmers mean completely 
different things to non DbC type programmers by "assert", yet 
unfortunately it is mapped on to the same thing with the same 
name.

The obvious simple correct resolution is to give them two 
different names.


More information about the Digitalmars-d mailing list