On 9 April 2013 01:40, Iain Buclaw <[email protected]> wrote:

> On 8 April 2013 13:37, Manu <[email protected]> wrote:
>
>> Oh my god... ..... this is the most upsetting thing I've heard all day! :(
>> No really, I have been SOOOO excited for so long about this optimisation
>> potential in D!
>> There's gotta be something that can be done! >_<
>>
>> Does the front end know if the function actually DOES assign to any
>> state? The compiler could easily work that out, and in the event it doesn't
>> actually perform any such assignment, it could be marked pure for reals...
>>
>>
> Haven't looked, but it appears to have a general idea of this.  D 'weak
> pure' and 'const pure' may update an internal state (had the latter bite me
> hard once).  The only case where 'strong pure' might do this is by throwing
> an exception or an assert being thrown - this changes program state so
> can't be marked pure.
>
> So having identified this, we can safely say that functions could only be
> 'C pure' in the following case:
> - Compiled function is 'strong pure'
> - Compiled function is 'nothrow'
> - We are compiling in release mode.
>
> Only then we (the frontend) can safely say that 'this function has
> *absolutely* no side effects, so can be marked as pure'.   Pure is never
> inferred.
>

How does one specify that in their code? Is 'strong pure' a keyword?

Reply via email to