diff options
Diffstat (limited to 'lib/dialyzer/doc/src/notes.xml')
-rwxr-xr-x | lib/dialyzer/doc/src/notes.xml | 746 |
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> + |