GSOC Linker project

Steven Schveighoffer schveiguy at yahoo.com
Mon May 7 05:50:53 PDT 2012


On Mon, 07 May 2012 07:41:43 -0400, Alex Rønne Petersen  
<xtzgzorex at gmail.com> wrote:

> On 07-05-2012 13:21, Steven Schveighoffer wrote:
>> On Fri, 04 May 2012 20:30:05 -0400, Alex Rønne Petersen
>> <xtzgzorex at gmail.com> wrote:
>>
>>> Purity inference won't happen either way. Purity is part of your API
>>> and also meant to help you reason about your code. If the compiler
>>> just infers purity in a function and you later change the
>>> implementation so it's no longer pure, you break your users' code.
>>> Also, purity would no longer help you reason about your code if it's
>>> not explicit.
>>
>> It can be pure for the purposes of optimization without affecting code
>> whatsoever. Inferred purity can be marked separately from explicit
>> purity, and explicitly pure functions would not be allowed to call
>> implicitly pure functions.
>>
>> -Steve
>
> But that kind of inferred purity is something a compiler back end cares  
> about, not something the language should have to care about at all. In  
> practice, most compilers *do* analyze all functions for possible  
> side-effects and use that information where applicable.

It affects how callers code will be generated.

If I have a function

int foo(int x);

and I have another function which calls foo like:

int y = foo(x) + foo(x);

Then the optimization is applied to whatever function this exists in.  If  
the source isn't available for foo, the compiler cannot make this  
optimization.

I have no idea if this is a back-end or front-end issue.  I'm not a  
compiler writer.  But I do understand that the compiler needs extra  
information in the signature to determine if it can make this optimization.

-Steve


More information about the Digitalmars-d mailing list