assume, assert, enforce, @safe

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 31 10:57:31 PDT 2014


On Thursday, 31 July 2014 at 17:40:45 UTC, Daniel Gibson wrote:
> Am 31.07.2014 18:29, schrieb Andrei Alexandrescu:
>> On 7/31/14, 8:37 AM, Daniel Gibson wrote:
>>> When I tell it to write something, I want it to do that, even 
>>> if it
>>> might look like nonsense (if anything, it could create a 
>>> warning).
>>
>> I'm afraid those days are long gone by now. -- Andrei
>
> At least for C..
> It sucks not to be able to predict the behavior of sane-looking 
> code without knowing the language standard in all details by 
> heart.
>
> I'd prefer if D  only did optimizations that are safe and don't 
> change the behavior of the code and thus was less painful to 
> use than C and C++ that need deep understanding of complicated 
> standards to get right ("the last thing D needs is someone like 
> Scott Meyers"?)
>
> Examples for eliminations that I'd consider safe:
> * if something is checked twice (e.g. due to inlining) it's 
> okay to only keep the first check
> * if a variable is certainly not read before the first 
> assignment, the standard initialization could be optimized 
> away.. same for multiple assignments without reads in between, 
> *but*
>  - that would still look strange in a debugger when you'd 
> expect another value
>  - don't we have int x = void; to prevent default 
> initialization?
> * turning multiplies into shifts and additions is totally fine 
> if it does not change the behavior, even in corner cases.
> * optimizing out variables
>
> It's a major PITA to debug problems that only happen in release 
> builds.
>
> Cheers,
> Daniel

I believe gdc has the full suite of gcc optimiser flags 
available. You don't need to just slap -O3 on and then complain 
about the changes it makes, you can choose with a reasonable 
amount of precision which optimisations you do/don't want done.


More information about the Digitalmars-d mailing list