[erlang-questions] Lack of warning for overlapping clauses with
Torben Hoffmann
torben.lehoff@REDACTED
Thu Jul 22 13:39:35 CEST 2010
2010/7/22 Björn Gustavsson <bgustavsson@REDACTED>
> > I have gazed through the documentation and I have not found anything on
> the
> > warnings that will be emitted by the compiler and what it will not
> detect.
> > The things not detected should then be on the check list used when doing
> a
> > code review since those things is where we still have a chance to make
> money
> > as programmers.
>
> There is some information that can be found
> at the end of the documentation for compile:file/2
> (after documentation of all options):
>
> http://www.erlang.org/doc/man/compile.html#file-2
>
> It would be possible to extend that section, but
> a list of issues that will be detected could easily
> become out-of-date and I don't think it is really
> possible to list all issues it will not detect.
>
>
> The purpose of the compiler is to generate good
> code, not to inform you about mistakes in your program.
>
Not 100% aligned with you on this, but I appreciate that you have a clear
policy and that you are following it.
That clarity alone is worth something.
>
> However, we noticed that some kind of blunders
> were common, and that it would be trivial to produce
> warnings about them during optimization or code
> generation. For instance, since the compiler attempts
> to evaluate constant expressions, it makes sense
> to warn for expressions that will always fail, such
> a 1/0. There is, however, no warning for X/0 since
> the compiler does not try to evaluate that expression.
>
> We want to the compiler to be as fast as possible,
> so we don't want to add extra code to search for more
> problems and produce more warnings. If you want to
> find as many problems as possible before running
> your code, use Dialyzer. It will do a much better job
> that the compiler can ever hope to do.
>
Given your clear mission above for the compiler it makes total sense to
delegate problem finding to Dialyzer - I will direct my findings and other
things to the Dialyzer team since I have a couple of ideas that might
improve things.
>
>
> I'll end with a quote from the documentation for
> compile:file/2:
>
> Obviously, the absence of warnings does not mean that there are no
> remaining errors in the code.
>
I appreciate that, but I still think that the mixing of when-clauses and
function clauses in my example is something that hits a grey zone, but now
that we have established the mission for the compiler (good code) I will put
my faith in Dialyzer instead when it comes to making my code clean.
Cheers,
Torben
>
> --
> Björn Gustavsson, Erlang/OTP, Ericsson AB
>
--
http://www.linkedin.com/in/torbenhoffmann
More information about the erlang-questions
mailing list