On 7/12/16 12:01 PM, Andrei Alexandrescu wrote:
On 07/12/2016 11:07 AM, Steven Schveighoffer wrote:
A related question: are we planning on making such access pure (or even
allowing compiler to infer purity)? If so, we may have issues...
Was that the link you posted? What's a summary of the issues and what do
you think would be a proper way to address them? Thanks! -- Andrei
No, the link I posted was a poor proposal by a (much?) younger me to do
a similar thing to the affix allocator (but on the language level).
Apparently, I didn't have enough cred back then :)
The issue I'm referring to is the compiler eliding calls.
For example, let's say you have a reference counted type:
RC(T)
{
T *value
}
And T is immutable. So far so good.
Now, we do this:
RC(T)
{
alias MyAllocator = ...; // some form of affixallocator
void incRef() { MyAllocator.prefix(value)++; }
}
Seems innocuous enough. However, if the compiler interprets incRef to be
pure, and notices that "hey, all the parameters to this function are
immutable, and it returns void! I don't have to call this, win-win!"
Then we have a problem. I raised similar points when C free was made
pure (but to no avail).
It's not necessarily an unfixable problem, but we may need some language
help to guarantee these aren't elided.
-Steve