On Thursday, February 02, 2012 18:14:25 bearophile wrote: > xancorreu: > > But you "only" put a "in" in > > recFactorial function argument. What this mean? **Why** this is more > > efficient than mine? > > It wasn't meant to improve performance. "in" turns a function argument to > "input only" (and eventually scoped too). Generally when you program in D2 > it's a good practice to use immutability where you can and where this > doesn't cause other performance or typing problems. Immutability avoids > bugs, allows a stronger purity (and I have seen DMD is often able to > compiler a little more efficient program if you use immutability/constants > everywhere they are a good fit). So 95% of the arguments of your program > are better tagged with "in".
in is pointless on value types. All it does is make the function parameter const, which really doesn't do much for you, and in some instances, is really annoying. Personally, I see no point in using in unless the parameter is a reference type, and even then, it's often a bad idea with reference types, because in is really const scope, and the scope is problematic if you want to return anything from that variable. It's particularly problematic with arrays, since it's frequently desirable to return slices of them, and scope (and therefore in) would prevent that. It's useful in some instances (particularly with delegates), but I'd use in _very_ sparingly. It's almost always more trouble than it's worth IMHO. - Jonathan M Davis