On Saturday, June 01, 2013 05:15:22 Shriramana Sharma wrote: > On Sat, Jun 1, 2013 at 5:11 AM, Shriramana Sharma <samj...@gmail.com> wrote: > > So what is the syntax that accepts rvalues and yet does not make a > > copy of the input object? I mean, as Ali says OK profiling is > > preferable to find out where exactly passing by value is more > > efficient than passing by const ref, but I'd like to know anyway what > > is the syntax available for this so at least until I get my D legs, I > > can continue some of my practices from C++ without much detriment. > > And again, sorry if I'm being dumb, but is the proposed inout syntax > intended to fix this problem or some other problem? > http://d.puremagic.com/issues/show_bug.cgi?id=3748 is marked as > resolved fixed from back in 2011, but if so why did DConf *this year* > have a talk on this issue?!
inout is completely unrelated. It has to do with having a function which accepts mutable, const, and immutable and returns the same level mutability without having to duplicate your function. You don't want to have to have something like int[] foo(int[] bar) { ... do something return bar[i .. j]; } const(int)[] foo(const(int)[] bar) { ... do something return bar[i .. j]; } immutable(int)[] foo(immutable(int)[] bar) { ... do something return bar[i .. j]; } Without inout, you're forced to do this kind of code duplication when you want to accept multiple types of mutability and return the same mutability. You could just accept const, but then you'd have to return const rather than the original type which could also have been mutable or immutable. const(int)[] foo(const(int)[] bar) { ... do something return bar[i .. j]; } inout solves that problem: inout(int)[] foo(inout(int)[] bar) { ... do something return bar[i .. j]; } You only have to write the function once, and it works with all 3 levels of mutability. - Jonathan M Davis