1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434
|
Revision history for Future
0.51 2024-10-21
[CHANGES]
* Permit convergent futures to not cancel some component futures,
simplifying the use of `->without_cancel`
* Give a more obvious error message when a `Test::Future::Deferred`
runs out of things to do
* Various small module style updates to documentation, unit tests,
etc
* Now requires Perl version 5.14 or later
0.50 2023-03-17
[CHANGES]
* Swap all unit tests from `Test::More` to `Test2::V0`
* Avoids test_requires on `Test::Refcount` or `Test::Fatal`
[BUGFIXES]
* Fix documentation minisynopsis on `->udata`
* Set `@CARP_NOT` so that `AWAIT_GET` rethrow appears to come from
the right location (RT145249)
0.49 2022-10-17
[CHANGES]
* Big reshuffle to move most code into Future/PP.pm in order to
support an optional Future-XS distribution too
* Attempt to load Future::XS by preference if it is available
* Additional unit tests for cornercases of XS implementation
* Remember to provide the AWAIT_WAIT API method
* Migrated Future::Queue out into its own distribution
[BUGFIXES]
* Bugfixes and unit tests for convergents on pre-cancelled futures
(RT144459)
0.48 2022-01-26
[CHANGES]
* Implement the new AWAIT_ON_CANCEL API shape for Future::AsyncAwait
[BUGFIXES]
* Make sure to set rtime for immediate futures (RT134620)
0.47 2021-01-01
[BUGFIXES]
* Don't weaken() the waiting future in Future::Mutex as that causes
it to be dropped in some situations
0.46 2020-10-19
[CHANGES]
* Provide AWAIT_CHAIN_CANCEL named method for compatibility with
upcoming Future::AsyncAwait::Awaitable method rename
[BUGFIXES]
* Ensure that Future::Mutex returns proper cloned future instances
when waiting (RT133563)
0.45 2020-04-22
[CHANGES]
* API changes to make duck-typing closer to Promises/A+ et.al:
+ Allow sequencing methods to yield non-Future results; upgrade
them to being Future-wrapped
+ Add ->resolve and ->reject as aliases of ->done and ->fail
* Recognise PERL_FUTURE_STRICT environment variable to restore
previous sequencing method behaviour
[BUGFIXES]
* ->without_cancel still needs to cancel result if caller is
cancelled
* Ensure all Future::AsyncAwait interop methods properly respect
subclassing
0.44 2020-03-25
[CHANGES]
* Added ->result; use that in unit tests and docs where appropriate
* Slight performance boost in internals by direct field access rather
than accessor methods
* Document ->await properly; make it wait until ready
* Discourage ->block_until_ready
0.43 2020-01-07
[CHANGES]
* Implement the Future::AsyncAwait::Awaitable API methods directly
0.42 2019-11-12
[CHANGES]
* Added Future::Queue
[BUGFIXES]
* Remove already-completed futures from the on_cancel chain of others
to avoid the list growing arbitrarily large in some situations; e.g
easily provoked by long loops in Future::AsyncAwait
0.41 2019-06-13
[CHANGES]
* Added Future::Exception->throw
0.40 2019-05-03
[CHANGES]
* Added Future::Exception (RT129373)
* Make ->get throw a Future::Exception and ->fail recognise one
* Better documentation of the failure category parameter
* Added a properly-documented ->block_until_ready
0.39 2018-09-20 14:03:05
[CHANGES]
* Added Test::Future::Deferred
* Use Syntax::Keyword::Try in example code
* Various docs fixes
0.38 2017-12-18 01:41:52
[CHANGES]
* Added counting ability to Future::Mutex (RT123876)
[BUGFIXES]
* Support perl 5.8.1 again (thanks ilmari)
0.37 2017/11/28 15:39:22
[CHANGES]
* Finally got around to removing the old Makefile.PL
[BUGFIXES]
* Fix for convergent futures that lose strong references during
cancellation (RT120468)
* ->without_cancel shouldn't retain the originating future after
completion (RT122920)
0.36 2017/11/27 22:04:52
[CHANGES]
* Added ->retain method (RT123711)
* Fixed some typoes in docs (RT118309)
* Added ->state method (RT120759)
[BUGFIXES]
* Ensure that ->without_cancel still strongly holds a reference to
its parent future (RT122920)
0.35 2017/06/23 20:37:57
[CHANGES]
* Link to YAPC::EU talk video in SEE ALSO
[BUGFIXES]
* Handle cancelled/completed slots when fmap is cancelled (RT120469)
(thanks tm604)
0.34 2016/10/02 18:40:06
[CHANGES]
* Added Future::Mutex
* Minor documentation wording fixes (thanks ilmari)
[BUGFIXES]
* Fallback to 'configure_requires' for older versions of
Module::Build that don't support 'test_requires' (RT110721)
0.33 2015/07/29 16:15:55
[CHANGES]
* Added ->catch and ->catch_with_f
* Add catch-handler semantics to ->then / ->then_with_f
* Also pass fmap* items via $_ (RT105558)
* Undocument ->done_cb / ->fail_cb / ->cancel_cb
* Entirely delete ->and_then / ->or_else
* New barename documentation style including "since" versions
* Further document the idea of failure categories as used by catch*
0.32 2015/03/10 19:54:22
[CHANGES]
* Documentation updates for new ->wrap_cb method
[BUGFIXES]
* Empty convergents should respect subclassing (RT97537)
* Adjust loss-report regexp for bleadperl (RT99002 again)
* Make trailing periods in warning tests optional, to account for
Carp version changes (RT100685)
0.31 2015/03/08 17:50:06
[CHANGES]
* Added debugging warning when destroying a failed Future that has
not reported its failure (RT102198)
* Have ->and_then / ->or_else die immediately to further their
deprecation
* Announce done_cb/fail_cb/cancel_cb as deprecated in favour of curry
* Provide ->wrap_cb method (experimental)
[BUGFIXES]
* Ensure that Test::Future does not retain Futures once they are
complete (RT101128)
* 'use Future' in Future::Utils (RT102167)
0.30 2014/11/26 14:29:28
[CHANGES]
* Rename 'dependent' futures to 'convergent'
* Removed examples/ scripts that now exist as independent modules
* Added ->without_cancel
* Sanity-check the $code argument to ->on_{ready,done,fail,cancel} to
ensure it is callable or a Future
[BUGFIXES]
* Ensure that 'ready_at' is always set in DEBUG mode
* Fix DEBUG 'lost_at' line number reporting tests for latest
bleadperl (RT99002)
* Ensure that if Future::Utils::repeat condition code dies, that is
passed to the result Future and not propagated to the caller
(RT100067)
* Failure by returning a non-Future from a sequencing code block
should report as a failed Future, not throw exception to caller
0.29 2014/07/17 12:18:12
[CHANGES]
* Added Test::Future
* Stronger deprecations - repeat {} on failures warns every time,
->and_then / ->or_else warn once
[BUGFIXES]
* Define the behaviour of dependent futures when components are
cancelled. (Partially fixes RT96685)
* Use Module::Build->prompt (RT96409)
* Ensure that repeat on an empty foreach list or empty generator
without 'otherwise' behaves correctly, just yield an immediate
0.28 2014/06/08 22:43:40
[CHANGES]
* Added ->label
* Added ->btime, rtime, elapsed tracing timers
* Better handling of 'breaks' version detection
0.27 2014/06/06 17:42:27
[BUGFIXES]
* Depend on Carp 1.25 for the new message format with trailing
period, so tests work
0.26 2014/06/01 12:52:53
[CHANGES]
* Added ->is_failed accessor
* Implement ->export_to_level in Future::Utils
* Print a warning about lost sequence Futures
* Allow Future->done and Future->fail as simple class constructors
to return immediates
* Added Future->unwrap
[BUGFIXES]
* Ensure that sequence futures are weaken()ed in the forward
direction.
**NOTE** This will potentially break existing code that depended on
strong references. This old code was, however, broken.
0.25 2014/02/22 03:47:08
[BUGFIXES]
* Fix warning-matching test in unit test for both older and newer
versions of Carp
0.24 2014/02/21 17:57:49
[CHANGES]
* Have repeat print a warning if it is asked to retry over a failure
* Change documentation to suggest try_repeat instead of repeat for
retries over failure
* Check at call time that sequencing callbacks really are callable,
leading to neater error messages (RT93164)
0.23 2014/01/19 15:26:55
[CHANGES]
* Link to Futures advent calendar 2013
* Fixes/additions to Phrasebook documentation, including section
about tree recursion
[BUGFIXES]
* Ensure that late addition of additional items to a fmap foreach
array works correctly even with concurrency
0.22 2014/01/12 03:12:18
[CHANGES]
* Ignore ->done or ->fail on cancelled Futures
* Added ->then_done, ->then_fail, ->else_done, ->else_fail
* Neaten up naming of fmap* family - provide both long and short
names for each function
* Added Future::Utils::call and call_with_escape
* Ensure that dependent futures on subclasses tries to use derived
futures as prototype if possible
0.21 2013/12/29 18:14:41
[CHANGES]
* Major performance improvement by folding out some layers of sub {}
wrapping in sequencing operations
* Added ->then_with_f and ->else_with_f
[BUGFIXES]
* Don't start another trial after cancelling a repeat() (RT91147)
0.20 2013/11/18 19:14:27
[CHANGES]
* Include an indication of done/failed/cancelled status of a Future
when ->done or ->failing an already-ready one
[BUGFIXES]
* Declare requires perl 5.8 because it fails on 5.6 smokers - no idea
why
* Fix a couple of typoes in docs (RT89185)
0.19 2013/09/27 13:31:16
[BUGFIXES]
* Guard against odd things happening during ->cancel at global
destruction (RT88967)
0.18 2013/09/20 19:09:57
[CHANGES]
* Added 'try_repeat' and 'try_repeat_until_success' aliases
* @CARP_NOT trust between Future and Future::Utils
[BUGFIXES]
* Fix to concurrent non-immediate + immediate fmap* return values
0.17 2013/09/07 16:53:47
[CHANGES]
* Performance improvement by using direct member access instead of
accessor methods
* Documentation updates; suggestion of documentation style for
Future-returning code
[BUGFIXES]
* Respect subclassing of immediate->followed_by and dependent futures
with mixed subclass or immediate components
0.16 CHANGES:
* Proper behaviour of ->wait_all and ->needs_all on an empty list -
just return empty immediate done
* Proper behaviour of ->wait_any and ->needs_any on an empty list -
return an immediate failure
* Performance improvement to ->done for immediate Future->new->done
* Keep a count of pending child futures to avoid quadratic behaviour
due to linear scan of children every time one completes
* Improve efficiency of Future::Utils::repeat and fmap* when trials
return immediates
* Make repeat and fmap* 'return' argument optional by cloning the
first non-immediate trial
* Rework unit tests to avoid dependency on Test::Warn
0.15 CHANGES:
* Added Future->call constructor
* Fixed reference-retaining bug in Future's on_cancel callback list
* Ensure that ->cancel returns $self even on immediates
* Documentation updates to mention ->wrap and ->call, and the fmap
family
0.14 CHANGES:
* Added Future->wrap constructor
* Added Future::Utils::fmap* family of functions
BUGFIXES:
* Fixed a precedence bug in 'and' vs &&
0.13 CHANGES:
* Added ->then and ->else methods; like ->and_then but code is passed
result directly instead of invocant future
* Added repeat { ... } foreach, otherwise argument to set final
result and also handle empty lists
* Added repeat { ... } generate
* Turn repeat { ... } code block exceptions into failed futures
* Ensure that ->on_cancel returns $self (RT85134)
* Documentation / Phrasebook updates to demonstrate newly added
features
0.12 CHANGES:
* Take a 'return' argument to Future::Utils::repeat; deprecate the
trial-cloning feature for subclasses
* Have ->followed_by/etc... print a warning in void context
* Throw an exception when ->followed_by/etc.. code does not yield a
Future (RT84188)
* Ensure that ->needs_all/->needs_any work correctly on a mix of
immediate and pending Futures (RT84187)
* Ensure that ->on_done/->on_fail always return invocant (RT84313)
* Ensure that ->on_ready($f) works on cancelled Futures (RT84312)
0.11 CHANGES:
* Added Future::Phrasebook documentation file
* Ensure that exceptions thrown from ->followed_by code block are
caught and turned into failed Futures
* Fix filename regexp matches for unit-tests so they work on Windows
0.10 BUGFIXES:
* Account for newer Carp version in unit tests, which appends
trailing period to messages
0.09 CHANGES:
* Split ->fail method into new ->die call, only append caller
file/line to the exception in the latter
* Various documentation and example improvements
0.08 CHANGES:
* Ignore attempts to cancel already-complete or already-cancelled
futures, or to attach ->on_cancel callbacks to them
* $future->get should return the first result in scalar context
* Added Future::Utils with repeat { ...} and
repeat_until_success { ... } looping constructs
* Link to LPW2012 talk slides
0.07 CHANGES:
* Leak debugging
0.06 CHANGES:
* Remembered to actually include the example scripts. No other actual
code changes.
0.05 CHANGES:
* Respect subclassing by allowing ->new on instances
* Allow subclasses to provide an ->await method which will be used
by ->get and ->failure
* Added some example scripts to demonstrate how to use Futures with
various event systems
0.04 CHANGES:
* Fix implementation of sequenced futures to work properly on
immediates
* Ensure that future->future chaining via callbacks works correctly
on immediates
* Link to "curry" in the docs about CODE-returning convenience
accessors ->done_cb, ->fail_cb and ->cancel_cb
0.03 INCOMPATIBLE CHANGES:
* Future->needs_all and Future->needs_any now return dependents'
results
CHANGES:
* Removed $future->( ... ) callable override
* Pass $f1 to ->or_else code block by symmetry with ->and_then
* Added $f->followed_by
* Added Future->wait_any dependent future constructor
* Rearranged documentation and added more examples
0.02 CHANGES:
* Rearranged non-leaf future logic
* Added {pending,ready,done,failed,cancelled}_futures accessors
* Added Future->needs_any constructor
0.01 First version, released on an unsuspecting world.
|