Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / contract / doc / release_notes.qbk
1
2 [/ Copyright (C) 2008-2018 Lorenzo Caminiti]
3 [/ Distributed under the Boost Software License, Version 1.0 (see accompanying]
4 [/ file LICENSE_1_0.txt or a copy at http://www.boost.org/LICENSE_1_0.txt).]
5 [/ See: http://www.boost.org/doc/libs/release/libs/contract/doc/html/index.html]
6
7 [section Release Notes]
8
9 This section contains notes on all releases of this library (from the latest to the oldest).
10
11 [section Release 1.0.1]
12
13 September 12, 2019
14
15 Cleanups and small fixes:
16
17 # Using `std::uncaught_exceptions` on C++17 compilers onward (instead of the now obsolete `std::uncaught_exception`).
18 # Fixed a few warnings.
19 # Removed linking to Boost.System (Boost.System is now a header-only library).
20 # Added this library to Boost's Continuous Integration (CI).
21 # Fixed documentation typos.
22
23 Released files are part of [@https://www.boost.org/users/history/ Boost 1.72.0].
24
25 [endsect]
26
27 [section Release 1.0.0]
28
29 January 6, 2018 (Il Giorno della Befana)
30
31 First Boost release:
32
33 # Fixed all tests to pass as Boost regression tests (and marked those that are expected to fail on some specific compiler/platform versions).
34 # Adjusted build scripts to work within Boost libraries.
35 # Updated documentation to fit as a Boost library.
36
37 Released files are part of [@https://www.boost.org/users/history/ Boost 1.67.0].
38
39 [endsect]
40
41 [section Release 0.5.0]
42
43 September 2, 2017
44
45 Contracts without the macros:
46
47 # Using plain C++ code instead of macros to program contracts.
48     # The removed macros very hard to use because they required programmers to learn a domain-specific embedded language that replaced the usual C++ syntax for declaring functions and classes.
49     # The removed macros also made the code less readable, increased compilation time (because of extensive preprocessor meta-programming), and gave cryptic compiler errors.
50     # However, the removed macros more correctly specified contracts in code declarations instead of definitions, and they completely removed extra code when contracts were disabled (both of those can be done by the current version of this library but at the cost of manually writing some boiler-plate code which was previous automatically handled by the macros instead, see __Separate_Body_Implementation__ and __Disable_Contract_Compilation__).
51 # Simplified the library by removing some extra features that were not directly related to contract programming, specifically:
52     # Removed loop variants (because these are rarely if ever used).
53     # Removed named and deduced parameters (because these can be programmed directly using [@http://www.boost.org/doc/libs/release/libs/parameter/doc/html/index.html Boost.Parameter]).
54     # Removed concepts (because these can be programmed directly using [@http://www.boost.org/doc/libs/1_65_0/libs/concept_check/concept_check.htm Boost.ConceptCheck]).
55     # Removed emulation of virtual specifiers `override`, `final`, and `new` (because `override` can be programmed directly using C++11, while `final` and `new` are rarely if ever used).
56     # Removed `static_assert` emulation (because this can be programmed directly using C++11, or using [@http://www.boost.org/doc/libs/1_65_0/doc/html/boost_staticassert.html Boost.StaticAssert]).
57 # Ensuring that old values and return values are copied only once even when subcontracting is used with multiple inheritance.
58 # Improved template meta-programming algorithm that searches the inheritance tree for subcontracting when multiple inheritance is used.
59 # Exception specifications and function-try blocks apply also to exceptions thrown by the contracts, and not just to exceptions thrown by the body.
60 # Added contracts for exception guarantees (using `.except(...)`, etc.).
61 # Added predefined assertion levels for "audit" and "axiom".
62 # Added `call_if` and `condition_if` (assertions requirements were supported also by previous revisions of this library but they were handled by internal code generated by the contract macros).
63
64 Released [@https://github.com/boostorg/contract/releases/tag/v0.5.0 files].
65
66 [endsect]
67
68 [section Release 0.4.1]
69
70 [note
71 This revision of the library passed Boost formal review and it was accepted into the Boost libraries (see [@https://groups.google.com/forum/?fromgroups=#!topic/boost-list/jQ7OjAmos_Y]).
72 ]
73
74 August 20, 2012
75
76 Accepted into Boost:
77
78 # Using non-fix-spaced font in Full Table of Contents section.
79 # Added a couple of notes to the documentation.
80 # Changed `CONTRACT_MEMBER_BODY(class_type, function_name)` to `class_type::CONTRACT_MEMBER_BODY(function_name)` so the macro can also be used to declare derived classes avoiding using the library syntax even when the base class has contracts.
81
82 Released [@https://github.com/boostorg/contract/releases/tag/v0.4.1 files].
83
84 [endsect]
85
86 [section Release 0.4.0]
87
88 June 4, 2012
89
90 Simplified syntax, added named parameters and concepts:
91
92 # Simplified syntax by reducing extra parenthesis to the bare necessary minimum (using some of the preprocessor parsing techniques originally introduced by Boost.LocalFunction).
93 # Postcondition old values only copy the old-of expression (e.g., copy just vector size instead of entire vector).
94 This improves performance and introduces the `ConstantCopyConstructible` requirement just for the old value expression type (e.g., a vector might not be copyable while its size always is because it is an integral type).
95 Removed the `copyable` tag.
96 # Body defined outside the macros (so compiler-errors for definitions retain their usual meaning).
97 # Added `CONTRACT_CLASS` macro and removed the need to duplicate declaration elements (do not repeat function declaration, do not repeat class name in function declaration, etc).
98 # Using `_TPL` macros so to reduce compile-time (instead of internally making all templates contract functions so to use `typename` freely).
99 # Overloading no longer requires unique parameter names.
100 # Added C++11-like virtual specifiers.
101 # Added constant assertions plus constant-expressions for select assertion if-conditions and for loop variants.
102 # Added named and deduced parameters.
103 # Added concept checking.
104 # Removed the interface to use the library without the macro (programmers were required to write too much boiler-plate code for the non-macro interface to be actually usable, plus supporting both the macro and non-macro interfaces limited what the macros could do).
105
106 Released [@https://github.com/boostorg/contract/releases/tag/v0.4.0 files].
107
108 [endsect]
109
110 [section Release 0.3.490]
111
112 March 7, 2010
113
114 Support for most/all C++ constructs:
115
116 # Added support and examples for `volatile`, `auto`, `explicit`, `export`, `extern`, `friend`, `inline`, `struct`, and `throw` (for exception specifications).
117 # Documented that `union` cannot be contracted.
118
119 Released [@https://github.com/boostorg/contract/releases/tag/v0.3.490 files].
120
121 [endsect]
122
123 [section Release 0.3.469]
124
125 February 21, 2010
126
127 Support for most/all contract programming features:
128
129 # Removed use of `self`, `variable.now`, and `variable.old` in writing contracts.
130 Object `this` and variables are now accessed as usual in member functions.
131 `CONTRACT_OLDOF(variable)` is used to access old values in postconditions.
132 # Added `(precondition)`, `(postcondition)`, and `(body)` to specify contracts within the function signature sequence.
133 If no preconditions then `(precondition) ({...})` is simply omitted from the sequence (same for postconditions, body is mandatory instead).
134 For non-void functions, users can name the result argument with `(postcondition) (result-name) ({...})`.
135 # Changed contract class template to use same syntax as Boost.Function (i.e., `F` function type).
136 # Added support for free functions and static member functions.
137 # Added support for subcontracting with multiple inheritance.
138 # Added static class invariants which are always checked (also at constructors entry, destructor exit, and by static member functions).
139 # Added block invariants and Eiffel-like loop variants.
140 # Added handlers to customize action on contract failure (default to `std::terminate()`).
141 # Removed feature for automatic contract documentation using Doxygen (this is not compatible with added `(precondition)`, `(postcondition)`, and `(body)` because Doxygen preprocessor is not capable to handle Boost.Preprocessor sequences).
142 # Rewritten entire documentation (now using Boost.QuickBook instead of Doxygen).
143
144 Released [@https://github.com/boostorg/contract/releases/tag/v0.3.469 files].
145
146 [endsect]
147
148 [section Release 0.2.190]
149
150 November 21, 2009
151
152 Compiled on both GCC and MSVC:
153
154 # Compiled using both GCC (Linux and Cygwin) and MSVC (Windows XP).
155 # Required to use void to specify empty function argument list.
156 This is to comply with C++03 standard that does not allow to pass empty macro parameters so it does not support empty preprocessor sequences `()`.
157
158 Released [@https://github.com/boostorg/contract/releases/tag/v0.2.190 files].
159
160 [endsect]
161
162 [section Release 0.1.126]
163
164 June 17, 2009
165
166 Added documentation:
167
168 # Completed first documentation draft.
169
170 Released [@https://github.com/boostorg/contract/releases/tag/v0.1.126 files].
171
172 [endsect]
173
174 [section Release 0.1.55]
175
176 April 19, 2009
177
178 Cleaned-up first release:
179
180 # Reorganized files to cleanup root directory.
181 # Added installation program.
182
183 Released [@https://github.com/boostorg/contract/releases/tag/v0.1.55 files].
184
185 [endsect]
186
187 [section Release 0.1.50]
188
189 April 19, 2009
190
191 First release:
192
193 # First public release.
194
195 Released [@https://github.com/boostorg/contract/releases/tag/v0.1.50 files].
196
197 [endsect]
198
199 [endsect]
200