aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dialyzer/RELEASE_NOTES
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dialyzer/RELEASE_NOTES')
-rw-r--r--lib/dialyzer/RELEASE_NOTES302
1 files changed, 302 insertions, 0 deletions
diff --git a/lib/dialyzer/RELEASE_NOTES b/lib/dialyzer/RELEASE_NOTES
new file mode 100644
index 0000000000..8205acf192
--- /dev/null
+++ b/lib/dialyzer/RELEASE_NOTES
@@ -0,0 +1,302 @@
+==============================================================================
+ Major features, additions and changes between Dialyzer versions
+ (in reversed chronological order)
+==============================================================================
+
+Version 2.1.0 (in Erlang/OTP R13B03)
+------------------------------------
+ - 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.
+
+Version 2.0.0 (in Erlang/OTP R13B02)
+------------------------------------
+ - 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.
+
+Version 1.9.2 (in Erlang/OTP R13B01)
+------------------------------------
+ - 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 which was so
+ far known as bool(). The latter is still accepted as well as boolean()
+ but results in a warning from the compiler; converting the code to use
+ the new name is strongly encouraged.
+
+Version 1.9.1 (in Erlang/OTP R13B)
+----------------------------------
+ - Contains the changes described below (R13A) but also:
+ - Has better handling of opaque types.
+ - The handling of UFT segments of bitstreams has been significantly
+ strengthened and revised. In all probability, now it is correct.
+
+Version 1.9.0 (in Erlang/OTP R13A)
+----------------------------------
+ - 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 -- 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.)
+
+Version 1.8.3 (in Erlang/OTP R12B-5)
+------------------------------------
+ - Added the --no_check_plt option that makes the startup time faster
+ when working with PLTs that are known not to change.
+ - Changed the phrasing of some warnings so that they do not cause confusion
+ to some users and correspond better to reality.
+
+Version 1.8.2 (in Erlang/OTP R12B-4)
+------------------------------------
+ - 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 has changed. Please consult the manual for
+ the changes.
+
+Version 1.8.0 (in Erlang/OTP R12B-2)
+------------------------------------
+ - 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 absense 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.
+
+Version 1.7.2 (in Erlang/OTP R12B-1)
+------------------------------------
+ - The Erlang interface of Dialyzer returns warnings tagged by their type.
+
+Version 1.7.1 (in Erlang/OTP R12B-0)
+------------------------------------
+ - Use of success typings is now default, is robust and detects significantly
+ more errors than in previous versions.
+ - Dialyzer 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.
+
+Version 1.7.0 (in Erlang/OTP R11B-5)
+------------------------------------
+ - 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.
+
+Version 1.6.0 (in Erlang/OTP R11B-4)
+------------------------------------
+ - 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. If warnings
+ generated by previous versions of Dialyzer are preferable for some
+ applications, the command line option --old_style can be employed.
+ - 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.
+
+Version 1.5.1 (in Erlang/OTP R11B-3)
+------------------------------------
+ - Added the option --check_init_plt that can be used to force the re-building
+ of the initial plt for installed systems.
+ - Fixed some bugs in the handling of guards in the dataflow analysis after
+ a report from Fredrik Thulin.
+ - Cleaned up the error handling and the interface and now Dialyzer has an
+ Erlang interface.
+ - Building the PLT using success typings is considerably faster than in 1.5.0.
+ - Added option --verbose which makes Dialyzer a bit more verbose.
+
+Version 1.5.0 (in Erlang/OTP R11B-2)
+------------------------------------
+ - Dialyzer's building of PLT is based on a different type inference algorithm.
+ More specifically, Dialyzer uses inferrence 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
+ -compile({nowarn_unused_function, {F,A}}).
+ and then suppresses the warning that function F/A will never be called.
+ - Dialyzer's default initial PLT now also includes "mnesia".
+
+Version 1.4.2 (in Erlang/OTP R11B-1)
+------------------------------------
+ - Speed up changes and small bug fixes.
+
+Version 1.4.1 (in Erlang/OTP R11B-0)
+------------------------------------
+ - Dialyzer is officially part of Erlang/OTP as a library application.
+ - Instead of being a shell script, "dialyzer" is an executable (generated
+ by a C program -- thanks to Bjorn Gustavsson), and works similarly to "erlc".
+ As a side-effect of this change, Dialyzer now also works on Windows.
+
+Version 1.4.0
+-------------
+ - Changes for Dialyzer to work with Erlang/OTP R10B-10
+ - Dialyzer's analysis is significantly faster as it uses a global function
+ call-graph for obtaining type signatures for all analyzed functions
+ - ...
+ - Many more other changes; in fact too many to mention here.
+
+Version 1.3.1 (mostly internal)
+-------------
+ - Small changes for Dialyzer to work with Erlang/OTP R10B-5.
+ - Modified setup script for execution under Cygwin (patch by Vlad Dumitrescu)
+ - Added command line option --no_warn_on_inline
+ - Fixed a small buglet in the analysis; this affected one of HiPE's files
+ - Dialyzer now explicitly warns when modules with the same name
+ but from different dirs are being analyzed (contribution by Ulf Wiger)
+
+Version 1.3.0
+-------------
+ - 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.
+ - Fixed a number of false positives that Dialyzer 1.2.0 was spitting out.
+ - 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.
+
+Version 1.2.0
+-------------
+ - 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).
+
+Version 1.1.1 (internal, not released to the masses :-)
+-------------
+ - The command-line mode of Dialyzer spits discrepancies in stdout
+ by default and returns a numeric value indicating its exit status.
+ - Fixed problems using the shell script on Solaris machines.
+ - Fixed small inconsistencies in Dialyzer's documentation and help.
+ - Added "Add Recursively" button contributed by Martin Bjorklund (thanks!).
+
+Version 1.1.0
+-------------
+ - 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.
+
+Version 1.0.1
+-------------
+ - 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.
+ - Performance improvements in the analysis.
+
+Version 1.0.0
+-------------
+ 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.