Call site 'ref'

Timon Gehr timon.gehr at gmx.ch
Sun Jan 15 14:37:45 PST 2012


On 01/15/2012 10:39 PM, Nick Sabalausky wrote:
> "Alex Rønne Petersen"<xtzgzorex at gmail.com>  wrote in message
> news:jeukpm$168v$1 at digitalmars.com...
>> 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?
>>
>
> Yes, this is one of the few things I always thought C# got right and D got
> wrong.
>

I think both C# and D got it right.

> That said though, I haven't personally run into this problem, and I've
> gotten used to not having "ref" or "out" on the caller's side. I wouldn't be
> opposed to the change though, even just as an optional warning.
>
>



More information about the Digitalmars-d mailing list