On Friday, 17 August 2012 at 02:25:22 UTC, Jonathan M Davis wrote:
Yeah. It's more than C++, but it's still pretty limited without pure, and if even with pure, the optimizations can still be pretty limited.

Yeah, I'm only worried about the language here, not the implementation.



On Friday, 17 August 2012 at 02:14:22 UTC, Jonathan M Davis wrote:
What I meant is that you know that nothing was altered through the reference that the getter returned. You don't have any such guarantee in C++.


I'm not following..
It seems to contradict my second example:


struct MyStruct
{
        static int* x;
        int y;
        this() { }
        this(int* z) { x = z; }
        auto getValue() const { ++*x; return this.y; }
}
auto s = MyStruct();
s = MyStruct(&s.y);
s.getValue();  // const, but returns 1
s.getValue();  // const, but returns 2
s.getValue();  // const, but returns 3


So unless you're expecting the compiler to have the implementation for the entire class available in order for it to be able to do any kind of optimization (in which case, it would have to do a whole bunch of inference to figure out the aliasing issues, which would amount to what a C++ could try do just as well), I'm not seeing where the additional guarantees/potential optimizations are.

Reply via email to