From 84adefa331c4159d432d22840663c38f155cd4c1 Mon Sep 17 00:00:00 2001 From: Erlang/OTP Date: Fri, 20 Nov 2009 14:54:40 +0000 Subject: The R13B03 release. --- lib/dialyzer/doc/src/notes.xml | 746 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 746 insertions(+) create mode 100755 lib/dialyzer/doc/src/notes.xml (limited to 'lib/dialyzer/doc/src/notes.xml') 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 @@ + + + + +
+ + 20062009 + Ericsson AB. All Rights Reserved. + + + 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. + + + + Dialyzer Release Notes + otp_appnotes + nil + nil + nil + notes.xml +
+

This document describes the changes made to the Dialyzer + application.

+ +
Dialyzer 2.1.0 + +
Improvements and New Features + + +

+ 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.

+

+ Own Id: OTP-8201

+
+ +

+ 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

+

+ Added support for packages (thanks to Maria Christakis).

+

+ 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:

dialyzer file1 ... + fileN

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:

dialyzer --gui %% + for the old gs-based GUI dialyzer --wx %% + for the new wx-based GUI (where available) +

+

+ 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:

+ dialyzer --build_plt --apps erts kernel stdlib + mnesia ...

+

+ 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.

+

+ Dialyzer has a new wxWidgets based GUI (thanks to Elli + Frangaki) for platforms where the wx application is + available.

+

+ Own Id: OTP-8300

+
+
+
+ +
+ +
Dialyzer 2.0.0 + +
Improvements and New Features + + +

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.

+

Fixed minor issue with dialyzer:run/1 crashing (upon + its return) when used for adding type information to an + existing PLT.

+

Fixed minor but quite annoying issues in dialyzer's + GUI.

+

+ Own Id: OTP-8187

+
+
+
+ +
+ +
Dialyzer 1.9.2 + +
Improvements and New Features + + +

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().

+

More accurate type information for some BIFs and + library files.

+

Introduced boolean() as the `official' name for the + type was so far known as bool(). The latter is still + accepted as well as boolean().

+

+ Own Id: OTP-8037

+
+
+
+ +
+ +
Dialyzer 1.9.1 + +
Improvements and New Features + + +

Has better handling of opaque types.

+

The handling of UTF segments of bitstreams has been + significantly strengthened and revised. In all + probability, now it is correct.

+

+ Own Id: OTP-7958

+
+
+
+ +
+
Dialyzer 1.9.0 + +
Improvements and New Features + + +

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.

+

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.

+

Strengthened the discrepancy identification when + testing for equality and matching between terms of + different types. This detects more bugs in code.

+

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.

+

Added a convenient shorthand for the --no_check_plt + option (-n).

+

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.)

+

+ Own Id: OTP-7864

+
+
+
+ +
+ +
Dialyzer 1.8.3 + +
Improvements and New Features + + +

Added the --no_check_plt option that makes the + startup time faster when working with stable PLTs that do + not change.

+

Changed the phrasing of some warnings so that they do + not cause confusion to some users and correspond better + to reality.

+

+ Own Id: OTP-7632

+
+
+
+ +
+ +
Dialyzer 1.8.2 + +
Improvements and New Features + + +

+ Minor updates.

+

+ Own Id: OTP-7522

+
+
+
+ +
+ +
Dialyzer 1.8.1 + +
Improvements and New Features + + +

+ There is new --raw option for Dialyzer to output + the result of the analysis in Erlang term, to facilitate + later filtering and/or formatting.

+

+ Own Id: OTP-7386

+
+ +

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.

+

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.

+

+ Own Id: OTP-7389

+
+
+
+ +
+ +
Dialyzer 1.8.0 + +
Improvements and New Features + + +

Dialyzer's analysis is from now on exclusively based + on success typings. In particular, support for options + --old_style and --dataflow has been + discontinued.

+

Better and more aggressive handling of type + information in records.

+

Dialyzer has a new warning option + -Wunmatched_returns which warns for function calls + that ignore the return value. This catches many common + programming errors (e.g. calling file:close/1 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. + io_lib:format/1 instead of io:format/1), + and even possible performance defects (e.g. unnecessarily + constructing a list using a list comprehension instead of + using lists:foreach/2). 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 spawn. 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.

+

Some warning options (-Wno_comp, + -Wno_guards, -Wno_unsafe_beam, etc.) which + could be used when analyzing bytecode produced by an old + BEAM compiler have been removed.

+

+ Own Id: OTP-7241

+
+
+
+ +
+ +
Dialyzer 1.7.2 + +
Improvements and New Features + + +

+ The warnings returned by the Erlang interface now + contains a tag describing the type of warning.

+

+ *** POTENTIAL INCOMPATIBILITY ***

+

+ Own Id: OTP-7134

+
+
+
+ +
+ +
Dialyzer 1.7.1 + +
Improvements and New Features + + +

Use of success typings is now default, is robust and + detects significantly more errors than in previous + versions.

+

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.

+

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.

+

+ Own Id: OTP-6997

+
+
+
+ +
+ + +
+ Dialyzer 1.7.0 + +
+ Improvements and New Features + + +

Minor Makefile changes.

+

Own Id: OTP-6689

+
+ +

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.

+

New command-line options:

+

--succ_typings Use the success typings analysis.

+

--dataflow (default) Use the previous analysis.

+

The new type unit() has been introduced to handle the + return type of non-terminating functions such as + servers.

+

Dialyzer's code server uses a compressed + representation and the analysis requires significantly + less memory than in previous versions.

+

Own Id: OTP-6736

+
+
+
+
+ +
+ Dialyzer 1.6.0 + +
+ Improvements and New Features + + +

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.

+

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.

+

Own Id: OTP-6546

+
+ +

Dialyzer handles term comparison operators more + precisely and is able to identify more discrepancies in + 'if' or 'case' statements with comparisons.

+

+

Dialyzer has more precise type information for many + standard OTP functions.

+

Own Id: OTP-6547

+
+
+
+
+ +
+ Dialyzer 1.5.1 + +
+ Improvements and New Features + + +

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 . + Also, the Dialyzer text files used by its GUI are now + included in the Erlang/OTP release.

+

Own Id: OTP-6361

+
+ +

New options and + .

+

Improvements in the analysis (meaning that this + version can find more discrepancies than the previous + version).

+

Own Id: OTP-6421

+
+
+
+
+ +
+ Dialyzer 1.5.0 + +
+ Improvements and New Features + + +

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.

+

Dialyzer takes into account the BEAM compiler + directive and then suppresses the warning that + function F/A will never be called.

+

Dialyzer's default initial PLT now also includes + "mnesia".

+

Own Id: OTP-6304

+
+
+
+
+ +
+ Dialyzer 1.4.2 + +
+ Improvements and New Features + + +

Improvements in PLT management.

+

Own Id: OTP-6128

+
+
+
+
+ +
+ Dialyzer 1.4.1 + +
+ Fixed Bugs and Malfunctions + + +

Some minor changes.

+
+
+
+ +
+ Improvements and New Features + + +

Some minor changes.

+
+
+
+
+ +
+ Dialyzer 1.4.0 + +
+ Fixed Bugs and Malfunctions + + +

Changes for Dialyzer to work with Erlang/OTP R10B-10.

+
+
+
+ +
+ Improvements and New Features + + +

Dialyzer's analysis is significantly faster as it uses a global function + call-graph for obtaining type signatures for all analyzed functions.

+
+
+
+
+ +
+ Dialyzer 1.3.1 + +
+ Fixed Bugs and Malfunctions + + +

Small changes for Dialyzer to work with Erlang/OTP R10B-5.

+
+ +

Fixed a small buglet in the analysis; this affected one of HiPE's files.

+
+
+
+ +
+ Improvements and New Features + + +

Modified setup script for execution under Cygwin (patch by Vlad Dumitrescu).

+
+ +

Added command line option --no_warn_on_inline.

+
+ +

Dialyzer now explicitly warns when modules with the same name + but from different dirs are being analyzed (contribution by Ulf Wiger).

+
+
+
+
+ +
+ Dialyzer 1.3.0 + +
+ Fixed Bugs and Malfunctions + + +

Fixed a number of false positives that Dialyzer 1.2.0 was spitting out.

+
+
+
+ +
+ Improvements and New Features + + +

Requires the presence of an Erlang/OTP R10B-4 system.

+
+ +

Dialyzer is significantly (approx 40%) faster since it now uses 'ets' + rather than 'dets' for its PLT.

+
+ +

Slightly improved the precision of the analysis.

+
+ +

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.

+
+ +

Some more information is displayed when calling a function or closure + with arguments of the wrong type.

+
+ +

The record guard now allows discrepancies involving tuples that are known + to be records to be displayed as #rec{} rather than {'rec',_,...,_}

+
+ +

Added -q option which makes the command-line version of Dialyzer + a bit more silent.

+
+
+
+
+ +
+ Dialyzer 1.2.0 + +
+ Improvements and New Features + + +

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).

+
+ +

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!)

+
+ +

Added -pa command line option for easier handling of -include_lib() + directives in source code.

+
+ +

Includes all changes added in v1.1.1; see below. The "Add Recursively" + functionality is also available in the command-line mode (-r option).

+
+
+
+
+ +
+ Dialyzer 1.1.1 + +
+ Fixed Bugs and Malfunctions + + +

Fixed problems using the shell script on Solaris machines.

+
+ +

Fixed small inconsistencies in Dialyzer's documentation and help.

+
+
+
+ +
+ Improvements and New Features + + +

The command-line mode of Dialyzer spits discrepancies in stdout + by default and returns a numeric value indicating its exit status.

+
+ +

Added "Add Recursively" button contributed by Martin Bjorklund (thanks!).

+
+
+
+
+ +
+ Dialyzer 1.1.0 + +
+ Improvements and New Features + + +

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.

+
+ +

Dialyzer comes with an extensive command-line interface, in addition + to an enhanced GUI.

+
+ +

Analysis can start from source code (through Core Erlang) as well as + from BEAM bytecode.

+
+ +

Dialyzer finds considerably more discrepancies in Erlang code than + previous versions.

+
+ +

Added ability to selectively turn on/off different warning categories.

+
+
+
+
+ +
+ Dialyzer 1.0.1 + +
+ Fixed Bugs and Malfunctions + + +

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.

+
+
+
+ +
+ Improvements and New Features + + +

Performance improvements in the analysis.

+
+
+
+
+ +
+ Dialyzer 1.0.0 + +
+ Improvements and New Features + + +

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.

+
+
+
+
+
+ -- cgit v1.2.3