On Wednesday, 9 January 2013 at 20:36:16 UTC, Benjamin Thaut wrote:
After some refactoring I had a series of bugs that came from renaming class members so that the following situation was present.

class foo
{
  float a;

  void doSomething()
  {
    float a;
    a = a * 2.0;
  }
}

The local variable a shadows the member a after the refactoring and therefore this code will no longer work as expected. This was quite time consuming to track down. So I wanted to ask if we want to prevent that with a warning or even an error? D does not allow shadowing of local variables, so why is it allowed for members?

Kind Regards
Benjamin Thaut

There is a rationale for such checks, but I argue that the place of these checks is not in the compiler itself, but in a separate tool. I don't see a reason why we mix up the correct code (which compiles) with the non error-prone code (which doesn't do things that look buggy). These are two different concepts. D as a systems language and (more importantly) as a powerful generic-programming-enabled language will need to make compromises on both sides. A static code analyzer won't have to. I thing an analyzer for such a flexible language would need to have different levels of ... pickiness. I'm giving you java and PMD for example - the static code analyzer can be made substantially intelligent in such common places. So, if we had a solid static code analyzer for D, we wouldn't be having this discussion at all - just add it as a feature of it. Which brings me to the question - is there any attempt to build such a beast for the D programming language? I think such a community driven tool will be of much value for the language itself (I learned a lot each time about bad design decisions when using the PMD with existing java). I would argue (but this is a very weak argument) that a decent code editor will be able to visually cue you in the easiest of situations.

Reply via email to