Call site 'ref'

Nick Sabalausky a at a.a
Sun Jan 15 13:39:54 PST 2012


"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.

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