To help LDC/GDC

David Nadlinger see at klickverbot.at
Mon Apr 8 06:32:35 PDT 2013


On Monday, 8 April 2013 at 12:37:48 UTC, Manu wrote:
> On 8 April 2013 21:46, Iain Buclaw <ibuclaw at ubuntu.com> wrote:
>> Only builtins are pure in the sense of 'C'.  Even functions 
>> considered
>> PUREstrong by the frontend may update an internal state, so 
>> the rules just
>> don't apply.  Except for maybe global functions...   In any 
>> case, the only
>> benefit you can reap from 'D pure' functions are that they are 
>> more likely
>> to be const-folded / inlined.
>>
>
> 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...

Iain, are you sure about that? (No offense, but you have been 
wrong about what GCC can/can't do in the past. :P) Could you 
maybe elaborate a bit and present a counterexample? It might also 
be a question of how the »as-if« rule is really defined for pure 
function calls.

In any case, if the source is available, the LLVM optimizer is 
usually very good at figuring out »pure for reals« (inferring the 
LLVM 'readnone' attribute). Obviously, this doesn't help you when 
you are doing separate compilation, though.

David


More information about the Digitalmars-d mailing list