Optimizing Immutable and Purity
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Wed Dec 24 08:07:01 PST 2008
Walter Bright wrote:
> Andrei Alexandrescu wrote:
>> Walter Bright wrote:
>>> Andrei Alexandrescu wrote:
>>>> Bill Baxter wrote:
>>>>> On Tue, Dec 23, 2008 at 11:30 AM, Jerry Quinn
>>>>> <jlquinn at optonline.net> wrote:
>>>>>> This was an interesting read. It would be nice to see a
>>>>>> discussion of how const is going to fit in in terms of
>>>>>> optimization potential, since you can always cast it away.
>>>>>
>>>>> It's basically useless for optimizations I think.
>>>>> Even if the view of the data you have is const, someone else might
>>>>> have a non-const view of the same data.
>>>>> So for instance, if you call any function, your "const" data could
>>>>> have been changed via non-const global pointers to the same data.
>>>>>
>>>>> --bb
>>>>
>>>> Const is still useful because inside a function you know for sure
>>>> that another thread can't modify the data.
>>>
>>> I think you meant immutable.
>>
>> I meant const.
>
>
> In the future, of course, "shared const" means another thread can modify
> it, but "const" means it cannot. Is that what you meant?
Here's an example:
int foo(const int*);
void bar() {
int a = 5;
foo(&a);
// can assume a is unmodified?
}
There are two issues here. One is that the const guarantees that foo
does not legally change a, so it is useful for an optimization (e.g.
assume that a == 5 after the call to foo). The second issue is that
compilers often assume that a function call may change the stack of the
caller in an arbitrary way. I think it is safe to lift that assumption
for D programs and consider a functions' automatic variables as private
to the function.
Andrei
More information about the Digitalmars-d
mailing list