On 15/01/12 3:19 PM, dsimcha wrote:
On 1/15/2012 8:36 AM, Alex Rønne Petersen wrote:
Hi,
I don't know how many times I've made the mistake of passing a local
variable to a function which takes a 'ref' parameter. Suddenly, local
variables/fields are just mutating out of nowhere, because it's not at
all obvious that a function you're calling is taking a 'ref' parameter.
This is particularly true for std.utf.decode().
Yes, I realize I could look at the function declaration. Yes, I could
read the docs too. But that doesn't prevent me from forgetting that a
function takes a 'ref' parameter, and then doing the mistake again. The
damage is done, and the time is wasted.
I think D should allow 'ref' on call sites to prevent these mistakes.
For example:
string str = ...;
size_t pos;
auto chr = std.utf.decode(str, ref pos);
Now it's much more obvious that the parameter is passed by reference and
is going to be mutated.
Ideally, this would not be optional, but rather *required*, but I
realize that such a change would break a *lot* of code, so that's
probably not a good idea.
Thoughts?
This would break UFCS severely. The following would no longer work:
auto arr = [1, 2, 3, 4, 5];
arr.popFront(); // popFront takes arr by ref
Unless it was ignored for UFCS, which is reasonable, since foo.bar()
looks like it could modify foo whereas bar(foo) doesn't in general.