assert semantic change proposal

David Bregman via Digitalmars-d digitalmars-d at puremagic.com
Tue Aug 5 14:44:55 PDT 2014


On Tuesday, 5 August 2014 at 18:35:32 UTC, Walter Bright wrote:
> (limited connectivity for me)
>
> For some perspective, recently gcc and clang have introduced 
> optimizations based on undefined behavior in C/C++. The 
> undefined behavior has been interpreted by modern optimizers as 
> "these cases will never happen". This has wound up breaking a 
> significant amount of existing code. There have been a number 
> of articles about these, with detailed explanations about how 
> they come about and the new, more correct, way to write code.
>
> The emerging consensus is that the code breakage is worth it 
> for the performance gains.
>
> That said, I do hear what people are saying about potential 
> code breakage and agree that we need to address this properly.

Well, then at least we agree there is some kind of tradeoff being 
made here if the definition of assert is changed: potential 
performance vs a bunch of negatives.

In my estimation, the upside is small and the tradeoff is not 
close to being justified. If performance is a top goal, there are 
many other things that could be done which have lesser (or zero) 
downsides. Just to give one example, addition of a forceinline 
attribute would be of great assistance to those attempting to 
micro optimize their code.

And of course, adding this as a new function instead of 
redefining an existing one would eliminate the code breakage and 
C compatibility issues. The undefined behavior issue would 
remain, but at least defining assume as @system would alleviate 
the @safe issue somewhat (there could still be leaks due to 
inlining), and make it more clear to users that it's a dangerous 
feature. It would also make it more searchable, for code auditing 
purposes.

Anyways, if I have at least made you and others aware of all the 
downsides, and all the contradictions of this proposal with D's 
stated goals, then I guess I have done my part for this issue.


More information about the Digitalmars-d mailing list