aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dialyzer/doc/src/notes.xml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dialyzer/doc/src/notes.xml')
-rwxr-xr-xlib/dialyzer/doc/src/notes.xml746
1 files changed, 746 insertions, 0 deletions
diff --git a/lib/dialyzer/doc/src/notes.xml b/lib/dialyzer/doc/src/notes.xml
new file mode 100755
index 0000000000..8e8aab60b8
--- /dev/null
+++ b/lib/dialyzer/doc/src/notes.xml
@@ -0,0 +1,746 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>2006</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>Dialyzer Release Notes</title>
+ <prepared>otp_appnotes</prepared>
+ <docno>nil</docno>
+ <date>nil</date>
+ <rev>nil</rev>
+ <file>notes.xml</file>
+ </header>
+ <p>This document describes the changes made to the Dialyzer
+ application.</p>
+
+<section><title>Dialyzer 2.1.0</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The documentation is now built with open source tools
+ (xsltproc and fop) that exists on most platforms. One
+ visible change is that the frames are removed.</p>
+ <p>
+ Own Id: OTP-8201</p>
+ </item>
+ <item>
+ <p>
+ Dialyzer can statically detect some kinds of data races
+ in Erlang programs. Use the new option -Wrace_conditions
+ to enable the race analysis. The technique is described
+ in a paper which is available at:
+ http://www.it.uu.se/research/group/hipe/dialyzer/publications/races.pdf</p>
+ <p>
+ Added support for packages (thanks to Maria Christakis).</p>
+ <p>
+ There has been a major change in the default mode of
+ Dialyzer. Previously, the default mode was the GUI, while
+ now it is the command line. As a result of this change,
+ it is now possible to analyze a set of files/dirs with
+ the command: </p><list> <item>dialyzer file1 ...
+ fileN</item> </list><p> In other words, the -c
+ (--command-line) option is no longer necessary, though it
+ will be retained for some time for backwards
+ compatibility. To start dialyzer's GUI use either of the
+ following commands: </p><list> <item>dialyzer --gui %%
+ for the old gs-based GUI</item> <item>dialyzer --wx %%
+ for the new wx-based GUI (where available)</item>
+ </list><p></p>
+ <p>
+ There is a new option --apps which allows the user to
+ easily refer to Erlang/OTP applications and include them
+ in the analysis or in the building of the PLT. For
+ example, we recommend building the PLT with: </p><list>
+ <item>dialyzer --build_plt --apps erts kernel stdlib
+ mnesia ...</item> </list><p></p>
+ <p>
+ The new option can also take absolute file names as well
+ as applications. Note that the application versions that
+ will be included in the PLT are those that correspond to
+ the Erlang/OTP system which is used.</p>
+ <p>
+ Dialyzer has a new wxWidgets based GUI (thanks to Elli
+ Frangaki) for platforms where the wx application is
+ available.</p>
+ <p>
+ Own Id: OTP-8300</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Dialyzer 2.0.0</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>There is a major addition to the capabilities of
+ dialyzer, worthy of bumping the version number. Starting
+ with this version, dialyzer not only accepts but also
+ properly processes remote types (i.e., types of the form
+ ModuleName:TypeName()). Previous dialyzer versions only
+ accepted this notation in -type and -spec declarations,
+ but effectively ignored its information by mapping remote
+ types to the type any(). In contrast, starting with this
+ version, remote types are used in the analysis and are
+ also stored in the PLTs. (This addition changes the
+ format of PLTs and requires rebuilding any PLTs created
+ by an older dialyzer version.) Note that dialyzer will
+ complain and abort the analysis of a set of modules if it
+ needs to process a remote type without a definition
+ (either because the module does not include a definition
+ of the type or the module is not included in the
+ analysis). We may relax this restriction in a future
+ version.</p>
+ <p>Fixed minor issue with dialyzer:run/1 crashing (upon
+ its return) when used for adding type information to an
+ existing PLT.</p>
+ <p>Fixed minor but quite annoying issues in dialyzer's
+ GUI.</p>
+ <p>
+ Own Id: OTP-8187</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Dialyzer 1.9.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>Fixed problem with type inference going into an
+ infinite loop when analyzing a strongly connected
+ component of functions that do not return but also
+ contain an erroneous call which makes them fail and be
+ assigned the type none() instead of the type unit().</p>
+ <p>More accurate type information for some BIFs and
+ library files.</p>
+ <p>Introduced boolean() as the `official' name for the
+ type was so far known as bool(). The latter is still
+ accepted as well as boolean().</p>
+ <p>
+ Own Id: OTP-8037</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Dialyzer 1.9.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>Has better handling of opaque types.</p>
+ <p>The handling of UTF segments of bitstreams has been
+ significantly strengthened and revised. In all
+ probability, now it is correct.</p>
+ <p>
+ Own Id: OTP-7958</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+<section><title>Dialyzer 1.9.0</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>The analysis accepts opaque type declarations and
+ detects violations of opaqueness of terms of such types.
+ Starting with R13, many Erlang/OTP standard libraries
+ (array, dict, digraph, ets, gb_sets, gb_trees, queue, and
+ sets) contain opaque type declarations of their main data
+ types. Dialyzer will spit out warnings in code that
+ explicitly depends on the structure of these terms.</p>
+ <p>Added support for handling UTF segments in bitstreams
+ and for detecting obvious type errors in these segments.
+ Warning: This code is not terribly tested though since
+ there are very few Erlang programs which use
+ Unicode-based binaries - not surprising since this is a
+ new language feature of R13.</p>
+ <p>Strengthened the discrepancy identification when
+ testing for equality and matching between terms of
+ different types. This detects more bugs in code.</p>
+ <p>Added warning for M:F(...) calls where M is not a
+ module term and F is not an atom. Previously, such calls
+ where found to fail but the reason for the failure was
+ not reported.</p>
+ <p>Added a convenient shorthand for the --no_check_plt
+ option (-n).</p>
+ <p>Added the --dump_callgraph option for dumping the
+ callgraph of all files that are analyzed into a specified
+ file. The callgraph either be dumped in raw format, in
+ .dot format, or converted to a .ps (postscript) file.
+ Note that in large callgraphs the generated postscript
+ file might not be interpretable by Ghostview. (Thanks to
+ Ilya Khlopotov for the initial version of this
+ functionality.)</p>
+ <p>
+ Own Id: OTP-7864</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Dialyzer 1.8.3</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>Added the <c>--no_check_plt</c> option that makes the
+ startup time faster when working with stable PLTs that do
+ not change.</p>
+ <p>Changed the phrasing of some warnings so that they do
+ not cause confusion to some users and correspond better
+ to reality.</p>
+ <p>
+ Own Id: OTP-7632</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Dialyzer 1.8.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Minor updates.</p>
+ <p>
+ Own Id: OTP-7522</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Dialyzer 1.8.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ There is new <c>--raw</c> option for Dialyzer to output
+ the result of the analysis in Erlang term, to facilitate
+ later filtering and/or formatting.</p>
+ <p>
+ Own Id: OTP-7386</p>
+ </item>
+ <item>
+ <p>The return type of the Erlang interface dialyzer:run/1
+ has changed to only return a list of warnings. If
+ something goes wrong dialyzer dies with an exception.</p>
+ <p>The handling of the PLT is now more flexible. There is
+ no longer any default PLT included with OTP. Please
+ consult the manual for the changes.</p>
+ <p>
+ Own Id: OTP-7389</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Dialyzer 1.8.0</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>Dialyzer's analysis is from now on exclusively based
+ on success typings. In particular, support for options
+ <c>--old_style</c> and <c>--dataflow</c> has been
+ discontinued.</p>
+ <p>Better and more aggressive handling of type
+ information in records.</p>
+ <p>Dialyzer has a new warning option
+ <c>-Wunmatched_returns</c> which warns for function calls
+ that ignore the return value. This catches many common
+ programming errors (e.g. calling <c>file:close/1</c> and
+ not checking for the absence of errors), interface
+ discrepancies (e.g. a function returning multiple values
+ when in reality the function is void and only called for
+ its side-effects), calling the wrong function (e.g.
+ <c>io_lib:format/1</c> instead of <c>io:format/1</c>),
+ and even possible performance defects (e.g. unnecessarily
+ constructing a list using a list comprehension instead of
+ using <c>lists:foreach/2</c>). Whenever a function
+ returns a single atomic value (e.g. 'ok' or pid()), the
+ warning is suppressed. This allows for "void" functions
+ (returning a single atom like 'ok') or for calls to
+ certain builtins like <c>spawn</c>. Because not all calls
+ which ignore the return value are discrepancies, the
+ option is off by default and has to be explicitly
+ requested by the user. But we recommend it
+ nevertheless.</p>
+ <p>Some warning options (<c>-Wno_comp</c>,
+ <c>-Wno_guards</c>, <c>-Wno_unsafe_beam</c>, etc.) which
+ could be used when analyzing bytecode produced by an old
+ BEAM compiler have been removed.</p>
+ <p>
+ Own Id: OTP-7241</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Dialyzer 1.7.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The warnings returned by the Erlang interface now
+ contains a tag describing the type of warning.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-7134</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Dialyzer 1.7.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>Use of success typings is now default, is robust and
+ detects significantly more errors than in previous
+ versions.</p>
+ <p>Dialyzer now accepts and takes into account type
+ information in record declarations and in contracts --
+ see related paper in Erlang'07 workshop. Various OTP
+ applications (e.g. stdlib and kernel) are partially
+ annotated with appropriate contracts specifying types
+ information for their functions.</p>
+ <p>The type previously known as unit() has been renamed
+ to no_return(). Its use in a contract as the return type
+ of a function now silences off the "function has no local
+ return" dialyzer warning without use of the corresponding
+ option.</p>
+ <p>
+ Own Id: OTP-6997</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+
+ <section>
+ <title>Dialyzer 1.7.0</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Minor Makefile changes.</p>
+ <p>Own Id: OTP-6689</p>
+ </item>
+ <item>
+ <p>Dialyzer can now use success typings to find
+ discrepancies. As a consequence significantly more
+ discrepancies are detected. The downside is that the
+ analysis takes about 2 to 2.5 times longer than in
+ previous versions, and may also result in some warnings
+ that might be harder to interpret even though they are
+ correct. This has been a major change, worth of
+ increasing the version number.</p>
+ <p>New command-line options:</p>
+ <p>--succ_typings Use the success typings analysis.</p>
+ <p>--dataflow (default) Use the previous analysis.</p>
+ <p>The new type unit() has been introduced to handle the
+ return type of non-terminating functions such as
+ servers.</p>
+ <p>Dialyzer's code server uses a compressed
+ representation and the analysis requires significantly
+ less memory than in previous versions.</p>
+ <p>Own Id: OTP-6736</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.6.0</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Dialyzer (in the modes where either source or BEAM
+ code which contains debug_info is analyzed) spits out
+ line information for all discrepancies. This has been a
+ major change, worth of increasing the version number.</p>
+ <p>We warn users that *considerably* more discrepancies
+ are identified by this version of Dialyzer compared with
+ previous ones and applications. If, for some reason,
+ warnings generated by previous versions of Dialyzer are
+ preferable, the command line option --old_style can be
+ employed.</p>
+ <p>Own Id: OTP-6546</p>
+ </item>
+ <item>
+ <p>Dialyzer handles term comparison operators more
+ precisely and is able to identify more discrepancies in
+ 'if' or 'case' statements with comparisons.</p>
+ <p></p>
+ <p>Dialyzer has more precise type information for many
+ standard OTP functions.</p>
+ <p>Own Id: OTP-6547</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.5.1</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Updated the chapter "More on the Persistent Lookup Table
+ (PLT)" in Dialyzer User's Guide and added information on
+ how to use Dialyzer from Erlang to <c><![CDATA[dialyzer(3)]]></c>.
+ Also, the Dialyzer text files used by its GUI are now
+ included in the Erlang/OTP release.</p>
+ <p>Own Id: OTP-6361</p>
+ </item>
+ <item>
+ <p>New options <c><![CDATA[--check_init_plt]]></c> and
+ <c><![CDATA[--verbose]]></c>.</p>
+ <p>Improvements in the analysis (meaning that this
+ version can find more discrepancies than the previous
+ version).</p>
+ <p>Own Id: OTP-6421</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.5.0</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Dialyzer's building of PLT is based on a different
+ type inference algorithm. More specifically, Dialyzer
+ uses inference of refined success typings to infer
+ function prototypes. As a result, Dialyzer bases its
+ analysis on a significantly more powerful basis and thus
+ is able to detect more discrepancies. The downside is
+ that building the PLT is a considerably slower process.
+ We will work on improving that.</p>
+ <p>Dialyzer takes into account the BEAM compiler
+ directive <c><![CDATA[-compile({nowarn_unused_function, {F,A}}).]]></c> and then suppresses the warning that
+ function F/A will never be called.</p>
+ <p>Dialyzer's default initial PLT now also includes
+ "mnesia".</p>
+ <p>Own Id: OTP-6304</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.4.2</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Improvements in PLT management.</p>
+ <p>Own Id: OTP-6128</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.4.1</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Some minor changes.</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Some minor changes.</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.4.0</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Changes for Dialyzer to work with Erlang/OTP R10B-10.</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Dialyzer's analysis is significantly faster as it uses a global function
+ call-graph for obtaining type signatures for all analyzed functions.</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.3.1</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Small changes for Dialyzer to work with Erlang/OTP R10B-5.</p>
+ </item>
+ <item>
+ <p>Fixed a small buglet in the analysis; this affected one of HiPE's files.</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Modified setup script for execution under Cygwin (patch by Vlad Dumitrescu).</p>
+ </item>
+ <item>
+ <p>Added command line option --no_warn_on_inline.</p>
+ </item>
+ <item>
+ <p>Dialyzer now explicitly warns when modules with the same name
+ but from different dirs are being analyzed (contribution by Ulf Wiger).</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.3.0</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Fixed a number of false positives that Dialyzer 1.2.0 was spitting out.</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Requires the presence of an Erlang/OTP R10B-4 system.</p>
+ </item>
+ <item>
+ <p>Dialyzer is significantly (approx 40%) faster since it now uses 'ets'
+ rather than 'dets' for its PLT.</p>
+ </item>
+ <item>
+ <p>Slightly improved the precision of the analysis.</p>
+ </item>
+ <item>
+ <p>In the GUI version, Dialyzer now reports the list of modules that should
+ be included in the modules to analyze in order to possibly improve
+ the accuracy of the reported results.</p>
+ </item>
+ <item>
+ <p>Some more information is displayed when calling a function or closure
+ with arguments of the wrong type.</p>
+ </item>
+ <item>
+ <p>The record guard now allows discrepancies involving tuples that are known
+ to be records to be displayed as #rec{} rather than {'rec',_,...,_}</p>
+ </item>
+ <item>
+ <p>Added -q option which makes the command-line version of Dialyzer
+ a bit more silent.</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.2.0</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Dialyzer works with the open source and commercial versions of Erlang/OTP
+ R10B-2 on all platforms (i.e., HiPE support is not a prerequisite anymore).</p>
+ </item>
+ <item>
+ <p>Whenever a .beam file contains abstract code (i.e., has been compiled
+ with the +debug_info option), the analysis starts from this code rather
+ than from BEAM bytecode -- this makes the results identical to those
+ obtained by analysis starting from source code.
+ (This is a contribution from Bjorn Gustavsson - Thanks!)</p>
+ </item>
+ <item>
+ <p>Added -pa command line option for easier handling of -include_lib()
+ directives in source code.</p>
+ </item>
+ <item>
+ <p>Includes all changes added in v1.1.1; see below. The "Add Recursively"
+ functionality is also available in the command-line mode (-r option).</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.1.1</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Fixed problems using the shell script on Solaris machines.</p>
+ </item>
+ <item>
+ <p>Fixed small inconsistencies in Dialyzer's documentation and help.</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The command-line mode of Dialyzer spits discrepancies in stdout
+ by default and returns a numeric value indicating its exit status.</p>
+ </item>
+ <item>
+ <p>Added "Add Recursively" button contributed by Martin Bjorklund (thanks!).</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.1.0</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Dialyzer works with the open source version of Erlang/OTP R10B-1 (on
+ platforms where HiPE support is available) and it does not require
+ installation of a customized Erlang/OTP system anymore.</p>
+ </item>
+ <item>
+ <p>Dialyzer comes with an extensive command-line interface, in addition
+ to an enhanced GUI.</p>
+ </item>
+ <item>
+ <p>Analysis can start from source code (through Core Erlang) as well as
+ from BEAM bytecode.</p>
+ </item>
+ <item>
+ <p>Dialyzer finds considerably more discrepancies in Erlang code than
+ previous versions.</p>
+ </item>
+ <item>
+ <p>Added ability to selectively turn on/off different warning categories.</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.0.1</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Fixed major bug of v1.0.0 which caused the analysis to stop prematurely
+ (i.e., without properly reaching fixpoint) when analyzing more than one
+ module. This did not affect correctness of the results, but lost many
+ opportunities to detect discrepancies.</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Performance improvements in the analysis.</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Dialyzer 1.0.0</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Initial Dialyzer version: Analysis starts from BEAM bytecode only and
+ only a GUI version is available. Dialyzer reports discrepancies in the
+ use of the "sequential" part of Erlang. To be used, Dialyzer requires
+ the presence of a specific snapshot of Erlang/OTP which can be obtained
+ from Dialyzer's homepage.</p>
+ </item>
+ </list>
+ </section>
+ </section>
+</chapter>
+