Changes between Version 3 and Version 4 of Guidelines/MaintenanceGuidelines
- Timestamp:
- Nov 23, 2008, 12:14:51 AM (14 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Guidelines/MaintenanceGuidelines
v3 v4 1 Please be free to improve this page directly or post on the Boost mailing list. 1 [[PageOutline]] 2 3 WARNING: The contents of this page is not the result of a consensus on the Boost community. 4 5 Please be free to improve this page directly or post on the Boost mailing list [mailto:boost-AT-lists.boost.org] and [mailto:boost-users-AT-lists.boost.org]. 2 6 3 7 = Motivation = … … 101 105 The main problem is that this warning will appear independently of whether the user code uses or not the deprecated feature. In order to palliate to this the inclusion of the deprecated feature could be accessible conditionally and only when included the warning will be reported or not. 102 106 103 For compatibility purposes deprecated features should be included by default. 104 If a user don't want to include a deprecated feature he/she can define one of the following macros: 105 106 '''BOOST_DONT_INCLUDE_DEPRECATED''': don't include any deprecated feature. 107 108 '''BOOST_DONT_INCLUDE_DEPRECATED_ON_X_Y''': don't include any deprecated feature to be removed on version X.Y. 109 110 '''BOOST_LIBX_DONT_INCLUDE_DEPRECATED''': don't include any deprecated feature for library Boost.LIBX. 111 112 '''BOOST_LIBX_DONT_INCLUDE_DEPRECATED_ON_X_Y''': don't include any deprecated feature for libarary Boost.LIBX to be removed on version X.Y. 113 114 '''BOOST_LIBX_DONT_INCLUDE_DEPRECATED_NAME''': don't include the deprecated feature name. 107 For compatibility purposes deprecated features should be included by default. So the library behaves as if the features have not been deprecated. If a user don't want to include a deprecated feature he/she can define one of the following macros: 108 109 * '''BOOST_DONT_INCLUDE_DEPRECATED''': don't include any deprecated feature. 110 111 * '''BOOST_DONT_INCLUDE_DEPRECATED_ON_X_Y''': don't include any deprecated feature to be removed on version X.Y. 112 113 * '''BOOST_LIBX_DONT_INCLUDE_DEPRECATED''': don't include any deprecated feature for library Boost.LIBX. 114 115 * '''BOOST_LIBX_DONT_INCLUDE_DEPRECATED_ON_X_Y''': don't include any deprecated feature for libarary Boost.LIBX to be removed on version X.Y. 116 117 * '''BOOST_LIBX_DONT_INCLUDE_DEPRECATED_NAME''': don't include the deprecated feature name. 115 118 116 119 Once one of this macros is defined the author can define another macro to make easier the work. 117 120 118 '''BOOST_LIBX_NAME_DONT_DECLARED''': states that the deprecated feature name has not been declared 119 120 121 Deprecated warning are not reported by default. If the user wants this deprecated warnings to appear he/she can define one of the macros: 122 123 '''BOOST_WARMS_DEPRECEATED''': warms on all deprecated features 124 '''BOOST_WARMS_DEPRECEATED_ON_X_Y''': warms on all deprecated features to be removed on version X.Y 121 * '''BOOST_LIBX_NAME_DECLARED''': states that the deprecated feature name has been declared 122 123 124 Deprecated warning are not reported by default, so the library behaves as if the features have not been deprecated. If the user wants this deprecated warnings to appear he/she can define one of the macros: 125 126 * '''BOOST_WARMS_DEPRECEATED''': warms on all deprecated features 127 128 * '''BOOST_WARMS_DEPRECEATED_ON_X_Y''': warms on all deprecated features to be removed on version X.Y 125 129 126 130 [wiki:Guidelines/MaintenanceGuidelines#delete_files See the examples below]. 127 131 132 133 134 135 136 128 137 = Cross version testing = 129 138 130 139 Running the regression tests from the _previous_ major release against the current release is a way to automatically detect and flag interface/behavioral changes. Sure, there are many potential problems with such an approach: 131 140 132 - Some library tests are likely to also exercise code at the 133 implementation/detail level. 134 - Already limited testing resources (on the other hand, interface changes 135 are likely to be detected by running such tests for a single, reasonably 136 compliant, compiler). 137 - ... 141 * Some library tests are likely to also exercise code at the implementation/detail level. 142 * Already limited testing resources (on the other hand, interface changes are likely to be detected by running such tests for a single, reasonably compliant, compiler). 143 * ... 138 144 139 145 In order to have the better we can preserve the test of the older releases and run them on the current release. … … 141 147 = Versioning individual Boost libraries = 142 148 143 This page do not contains any advice related to individual Boost libraries packaging. There is already aproject working on that. But tagging individual Boost libraries with a specific version has already some advantages.149 This page do not contains any advice related to individual Boost libraries packaging. There is already the CMake project working on that. But tagging individual Boost libraries with a specific version has already some advantages. 144 150 145 151 … … 149 155 Tagging each library release with a version, is the better way to signal to the user of possible incompatibilities. 150 156 157 For example the thread library could have: 158 159 * '''2.1.0''' Changes since boost 1.35 160 161 * '''2.0.0''' Changes since boost 1.34 162 163 * '''1.0.0''' Initial release on 1.25 164 151 165 == Create a Feature Request ticket for each deprecated/suppressed/modified/new feature [author, user] == 152 166 Each modification should be tracked with a ticket on the track system. 153 154 167 155 168 == Release note and track system traceability [author] == … … 158 171 * the list of all deprecated/suppressed/modified/new features with its associated ticket. 159 172 173 For example the thread library could have (#XXXX should be replaced by the trac tickets): 174 * '''2.1.0''' Changes since boost 1.35 175 * #XXXX: New generic lock() and try_lock() functions for locking multiple mutexes at once. 176 * #XXXX: Rvalue reference support for move semantics where the compilers supports it. 177 * A few bugs fixed and missing functions added (including the serious win32 condition variable bug). 178 * #XXXX: bug1 179 * ... 180 * #XXXX: bugn 181 * #XXXX: scoped_try_lock types are now backwards-compatible with Boost 1.34.0 and previous releases. 182 * #XXXX: Support for passing function arguments to the thread function by supplying additional arguments to the boost::thread constructor. 183 * #XXXX: Backwards-compatibility overloads added for timed_lock and timed_wait functions to allow use of xtime for timeouts. 184 185 186 160 187 == Include a diff file showing the modification respect to the previous release [author, RM] == 161 188 This file is the explicit report of all the changes in the library. It could be used by the Boost community to inspect that every change has been correctly documented (see inspections bellow). 189 190 == Trac ticket => test cases association [author] == 191 192 Each feature request or bug should have associated at least a test case. A table showing this association will help to check that each feature,bug is has the expected test coverage. 193 194 ||Ticket||Synopsis||Test Case|| 195 ||#XXXX||foo foo foo bar bar bar ||test_foo_bar|| 196 197 162 198 163 199 = Codding = … … 215 251 || defined(BOOST_LIBX_DONT_INCLUDE_DEPRECATED) || defined(BOOST_LIBX_DONT_INCLUDE_DEPRECATED_ON_1_41) \ 216 252 || defined(BOOST_LIBX_DONT_INCLUDE_DEPRECATED_NAME) 217 #define BOOST_LIBX_NAME_DONT_DECLARED218 253 #else 254 #define BOOST_LIBX_NAME_DECLARED 219 255 #if defined(BOOST_WARMS_DEPRECEATED) || defined(BOOST_WARMS_DEPRECEATED_ON_1_40) 220 256 #warning "name is deprecated, please use new_name instead" … … 231 267 }}} 232 268 233 When the declaration should not been included, the author could define a BOOST_LIBX_NAME_DONT_DECLARED, which could be used on the class/function/variable definition. E.g.269 When the declaration should been included, the author could define a BOOST_LIBX_NAME_DECLARED, which could be used on the class/function/variable definition. E.g. 234 270 235 271 {{{ … … 239 275 namespace libx { 240 276 241 #if defined(BOOST_LIBX_NAME_DONT_DECLARED) 242 #else 277 #if defined(BOOST_LIBX_NAME_DECLARED) 243 278 name::name() { 244 279 // as before … … 255 290 Instead of modifying an existing function prototype, do as you were deleted it and added the new one. As both prototypes should cohabit during some releases, check if this overloading could cause user code breaks. 256 291 257 258 292 == Remove the deprecated features on a given release [author] == 293 Once the deprecated period is expired the author should remove them. 259 294 260 295 = Test and Inspections =