"Alex Rønne Petersen" <xtzgzo...@gmail.com> wrote in message news:jeukpm$168v$1...@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.