Revision history for Future-AsyncAwait
0.70 2024-12-20
[CHANGES]
* Allow `async sub` declarations that put named functions into other
packages
* Update to latest copies of shared t/80*.t cross-module test files
0.69 2024-09-18
[CHANGES]
* Support asynchonous lexical subs declared with `my async sub`
0.68 2024-08-29
[BUGFIXES]
* Updated to latest hax/ support files: #ifdef around SAVEt_LONG for
perl 5.41.3 which removed it
0.67 2024-08-19
[CHANGES]
* Use `File::ShareDir` for storing .h include file, rather than
storing the contents in the `__DATA__` section of the build helper
* Updates for XS::Parse::Sublike v0.23:
+ add .ver hooks struct field
* Pod style updates
[BUGFIXES]
* Permit `async` keyword on bodyless sub or method declarations
(RT151046)
0.66 2023-09-08
[CHANGES]
* Add a unit test to check that `async method` works on core perl
class syntax
* Remember to implement `sub unimport` so that `no Future::AsyncAwait`
works
[BUGFIXES]
* Provide a permit_hintkey to keep XPS happy
0.65 2023-03-17
[CHANGES]
* More specific unit-testing of the croak location when testing
`AWAIT_GET` (related to RT145249)
* Swap all unit tests from `Test::More` to `Test2::V0`
* Avoids test_requires on `Test::Refcount` or `Test::Fatal`
[BUGFIXES]
* A more robust handling of defav during suspend/resume to try not to
upset `perl -d` (RT146246)
0.64 2023-02-14
[CHANGES]
* Define ABI version 2, which adds pre_suspend and post_resume phase
hooks
0.63 2023-02-12
[CHANGES]
* Added various bits of API to extension modules using modhookdata more
flexibly, including by pre-allocation before the first `await`
* Legacy hook API now prints warnings about its deprecation and
impending removal
[BUGFIXES]
* Bleadperl no longer supports `GIMME`, in any case should use
`GIMME_V`
* Fix memory leak around pre-allocated cancel AV
0.62 2022-12-20
[BUGFIXES]
* Save/restore the value of the @_ array; does not work on perls
before 5.24 for reasons unknown (RT130683)
* Updated hax/ files to avoid a build warning on current bleadperl
0.61 2022-11-21
[BUGFIXES]
* Fix for some C compilers which get upset about variable
declarations having goto labels
0.60 2022-11-21
[CHANGES]
* Added entirely new extension API based on structs of hook functions
registered with the module; similar to Object::Pad and XS::Parse::*
* Provide Future::AsyncAwait::ExtensionBuilder in a similar fashion
to above
* Added some more internal assert() and TRACEPRINT calls for
debugging
[BUGFIXES]
* Don't crash if an async sub's returning future is abandoned outside
of an await state
0.59 2022-09-23
[BUGFIXES]
* Fix broken Future->get method resolution on recent
Future + Future::XS experiments
* Fix hax/docatch.c.inc for "NULL OP IN RUN" messages
* Make t/31destroy.t less fragile in the case of non-HASH Future
instances
* Back-compat to perl 5.16 by passing `flags` arg to `cv_copy_flags`
(RT143742)
0.58 2022-04-29
[BUGFIXES]
* Fix memory leak with long-running futures and on_cancel (RT142222)
* Copy SVs with SvPADTMP in case of running code, or folded constants
that erroneously end up with that flag anyway (RT142468)
0.57 2022-03-16
[CHANGES]
* Updates for Devel::MAT::Dumper v0.44
* Updates to bundled hax/ files
0.56 2022-01-26
[CHANGES]
* Updated Awaitable API definition for AWAIT_ON_CANCEL
* Actually use AWAIT_ON_CANCEL properly (RT137723)
* Document the interaction of `multi async sub`
0.55 2021-12-16
[CHANGES]
* Updated for XS::Parse::Keyword 0.15
* Hoist an OP_ARGCHECK to outside the ENTERTRY block if present, so
that signature validation happens synchronously
* Support and unit-test Syntax::Keyword::MultiSub
* No longer set `-std=c89` compile flag now that core perl requires
C99 anyway
0.54 2021-10-26
[CHANGES]
* Add unit-test for await from within perl 5.35.5's multi-variable
`for_list` feature
* Add cross-module test for compatibility with Syntax::Keyword::Match
[BUGFIXES]
* Handle `state` vars correctly (RT139821)
0.53 2021-08-26
[CHANGES]
* Updated for XS::Parse::Keyword 0.13
0.52 2021-07-13
[BUGFIXES]
* Account for changed error message from XS::Parse::Keyword 0.09
(RT137589)
0.51 2021-05-31
[CHANGES]
* Updates for XS::Parse::Keyword 0.05
* Removed unused hax/* files
0.50 2021-04-30
[CHANGES]
* Rewrite of parser logic to use XS::Parse::Keyword instead of
lowlevel code on PL_keyword_parser directly
* Attempt to provide a name for the local'ized GV that cannot be
handled (thanks fgasper)
* Attempt to provide a name for SAVEt_* constants that cannot be
handled
* Added a shouty AWAIT_WAIT method to implement toplevel `await`
(RT134671)
* Docs update - remark that Rust and C++20 have async/await too
(RT135356)
[BUGFIXES]
* Invoke defer {} and finally {} blocks on cancellation (RT135351)
0.49 2021-02-24
[BUGFIXES]
* Handle the CXp_TRY and real try/catch syntax added in perl 5.33.7
(RT134414)
0.48 2021-02-02
[CHANGES]
* Explicitly document that `async sub` works on anon subs too
* Update to latest hax/ files
[BUGFIXES]
* t/80await+try.t requires Syntax::Keyword::Try version >= 0.18
(RT134250)
0.47 2020-11-29
[CHANGES]
* Allow `await` expressions at toplevel of main script, for
consistency of examples, unit tests, etc... (RT129306)
0.46 2020-11-09
[CHANGES]
* Provide future_asyncawait_on_activate() in AsyncAwait.h
* Adjusted docs around new `AWAIT_CHAIN_CANCEL` method
* Depend on Future 0.43 for Awaitable role named methods, rather than
monkey-patching older versions
0.45 2020-10-22
[CHANGES]
* Have Test::Future::AsyncAwait::Awaitable check for the suggested
new `AWAIT_CHAIN_CANCEL` method
[BUGFIXES]
* Avoid refcounting bug when cancelling a suspended SAVEt_SPTR
(RT133564)
* Turn on SvPADMY on precancel AV to keep -DDEBUGGING perl happy
(RT133517)
0.44 2020-10-09
[CHANGES]
* Added initial attempt at `CANCEL` blocks for handling Future
cancellation - experimental
* Announce upcoming API method rename of `AWAIT_ON_CANCEL` to
`AWAIT_CHAIN_CANCEL`
0.43 2020-07-06
[CHANGES]
* Added explicit use VERSION declarations to every perl file
[BUGFIXES]
* Don't segfault when awaiting in closures that capture outer 'our'
variables (RT132945)
0.42 2020-06-29
[BUGFIXES]
* Fixes for assert failures on -DDEBUGGING perls:
+ Workarounds for perl versions prior to 5.22 that get upset about
new*OP() being invoked with OP_CUSTOM
+ Remember to set SVs_PADMY flag on newly-generated pad slot SVs
during suspend
* Don't leak SVs when cleaning up SAVEt_FREESV during cancellation
0.41 2020-06-20
[CHANGES]
* Updates for XS::Parse::Sublike 0.10
[BUGFIXES]
* Fix Build.PL declaration on XS::Parse::Sublike that it needs to be
configure_requires
0.40 2020-04-15
[CHANGES]
* Support a limited form of SAVEt_SPTR when the var is within the
current pad; this supports SAVESPTR(PAD_SVl(padix)) as may be used
by Object::Pad et.al.
0.39 2020-03-27
[CHANGES]
* Updated for XS::Parse::Sublike 0.06 API
0.38 2020-03-24
[CHANGES]
* Use XS::Parse::Sublike for `async sub` parsing. This makes it
possible to coƶperate with other sub-like keyword modules
* Add cross-module test sthat module works correctly with Object::Pad,
and additionally Syntax::Keyword::Dynamically as well
0.37 2020-03-10
[CHANGES]
* Minor reƤrrangement of internal stages to closer match core's
sub parser and allow more generic hooking in future
[BUGFIXES]
* Don't allow a space between attr name and optional parenthesized
argument (RT131571)
0.36 2020-01-16
[CHANGES]
* Add an optional 'force' callback to test_awaitable()
[BUGFIXES]
* Fix more segfault cases during compile failures
(RT129987, RT131487)
0.35 2020-01-07
[CHANGES]
* Support lexical scopes declaring a different class of future
* Document the required API for awaitable objects
* Provide an API conformance test for implementors of alternative
future classes
[BUGFIXES]
* Provide scalar context to controlling expression of `await`
0.34 2019-12-01 01:45:23
[CHANGES]
* Various internal changes to neaten up the hax/ directory of C
source files, letting them be more shareable with other XS dists
[BUGFIXES]
* Fix (some of the cases of) RT129987
* Only fetch CX_CUR() after the future_done_from_stack() call
(RT131118)
0.33 2019-09-08 05:16:05
[BUGFIXES]
* Remember to SPAGAIN after future_done_from_stack() in case the
stack array was moved (RT130464)
0.32 2019-09-03 17:00:35
[CHANGES]
* Define a super-experimental C-level API for other modules to hook
parts of the suspend/resume lifecycle to provide extension
behaviour.
[BUGFIXES]
* Actually use perl's own `wrap_keyword_plugin()`
* Avoid compiler warning about int/IV mismatch in printf (RT130285)
* Use warn_sv() to avoid compiler wraning about formatless warn() on
a plain PV (RT130285)
* Don't segfault on parse errors from parse_block() (RT130417)
0.31 2019-07-25 15:09:04
[CHANGES]
* Use `parse_subsignature()` on bleadperl and backport it to
perl 5.26, allowing parsing of subroutine signatures (RT123465)
0.30 2019-07-05 16:09:02
[CHANGES]
* Parse attribute lists on `async sub`s (RT129985)
0.29 2019-06-26 20:23:12
[CHANGES]
* Further annotations in Devel::MAT::Dumper helper about loop state
[BUGFIXES]
* Fix various memory leaks of abandoned `async sub`s (RT129836)
0.28 2019-06-17 17:06:18
[BUGFIXES]
* Fix localisation of hints hash at compiletime so nested `async sub`
works correctly (RT129836)
0.27 2019-06-04 20:48:42
[CHANGES]
* Detect certain forbidden constructs at compile-time; await inside:
+ non-lexical foreach
+ map and grep (RT129748)
+ string-eval (RT126036)
[BUGFIXES]
* Preserve regexp context across await boundary (RT129321)
0.26 2019-04-27 12:41:11
[BUGFIXES]
* Further fixes for foreach(LIST) handling (RT129319)
* Handle SAVEt_FREEPV (RT129320)
* Cleanup itervar and SAVEt_PADSV_AND_MORTALIZE of abandoned futures
(RT129320)
* Ensure body of async sub starts with OP_NEXSTATE so as not to upset
Devel::Cover (thanks ilmari) (RT128309)
0.25 2019-04-24 15:46:15
[BUGFIXES]
* Print a warning but don't panic on resume with lost returning
future (RT129303)
0.24 2019-04-18 23:47:56
[CHANGES]
* Stop `async sub`s on ->cancel (RT129202)
* Propagate ->cancel requests back to awaiting future, though at
present only on perl 5.24+ (RT129202)
* Added more internal consistency checks and `panic()` assertions
[BUGFIXES]
* Further fixes for broken behaviour of `foreach(LIST)` (RT129215)
* Fix Devel::MAT::Dumper helper for expired but unreclaimed magic
0.23 2019-04-16 01:08:34
[BUGFIXES]
* Many improvements to mortals handling, including workarounds for
lack of cx->old_tmpsfloor on perls before 5.24 (RT128619)
0.22 2019-04-02 00:12:47
[CHANGES]
* More detailed annotations in Devel::MAT::Dumper helper
[BUGFIXES]
* Partial attempt at freeing things when dropping a pending await
future (RT128620)
* Fix for labeled loop controls (RT128205)
0.21 2019-02-02 17:19:35
[BUGFIXES]
* Fix more memory leaks - simple test case now executes cleanly
(RT128222)
0.20 2019-01-16 22:34:20
[BUGFIXES]
* Ensure mortal SVs aren't reclaimed prematurely during
suspend/resume
* Fix several memory leaks. Some still remain but overall the
situation is much improved (RT128222)
0.19 2019-01-08 23:49:03
[BUGFIXES]
* Replace stolen array or hash pad lexicals with newAV() / newHV() to
maintain the expected SvTYPE() invariants (RT128176)
0.18 2019-01-05 20:08:38
[CHANGES]
* Declare threaded perls before version 5.22 as unsupported. The bug
remains open but for now I'm disinclined to look into it. (RT124351)
[BUGFIXES]
* Don't panic about blk_eval.old_eval_root or .cur_text fields, as it
seems we can safely ignore those (RT126036)
0.17 2019-01-04 18:45:22
[BUGFIXES]
* Perl 5.26 and above still needs SvREFCNT_inc() on the state array
in CXt_LOOP_ARR (RT124353)
* Better fix for scopestack name tracking under -DDEBUGGING
(RT128164)
* Set -DNO_XSLOCKS in order to get working JMPENV on MSWin32
(RT128163)
0.16 2019-01-03 22:09:28
[CHANGES]
* Use ENTER_with_name/LEAVE_with_name variants for easier debug (thanks
ilmari)
* Don't clone the CVf_CVGV_RC flag
* Unit-test that async/await also behaves fine through nested named
method calls
* Unit-test die after single await()
[BUGFIXES]
* Avoid call to non-public unshare_hek() function (RT125613)
* Remember to wrap pp_await in docatch() if CATCH_GET is true. Fixes
many failing test cases (double-nested await, RT126037, RT123062)
0.15 2018-01-24 04:12:04
[CHANGES]
* Support older perls back to 5.16 (continues work on RT122252). Just
5.14 remains unsupported now
* Neater implementation which avoids hacky workarounds from abusing
`cv_clone()`
[BUGFIXES]
* Avoid using anonymous union in struct SuspendedFrame (thanks ilmari)
(RT124171)
0.14 2018-01-22 04:42:02
[CHANGES]
* Document and test that 'await' works from inside 'do {}'
* Test that two nested 'async sub's can await nicely
[BUGFIXES]
* Fix for 'await' twice inside the same 'foreach' loop (RT124144)
* Fix handling of ITERVAR save/restore on perl 5.24+
* Use correct printf format for IVs when debug printing
* Ensure that captured lexicals from now-dead scopes remain working
0.13 2018-01-18 15:52:03
[CHANGES]
* Support older perls back to 5.18 (continues work on RT122252)
[BUGFIXES]
* Ensure that 'async sub' called in list context doesn't leak its
input arguments as well as Future result
0.12 2018-01-15 19:02:42
[CHANGES]
* Support older perls back as far as 5.20 and 5.22
(partly solves RT122252)
* Link to TPCiA talk recording on youtube
0.11 2018-01-07 16:35:25
[BUGFIXES]
* Fixes for markstack restoration calculation
* Don't save/restore PAD slots relating to outer captures or
protosubs (RT124026)
0.10 2017-08-13 23:25:33
[BUGFIXES]
* Implement enough of SAVEt_DESTRUCTOR_X to make try/finally work
* Fix the remaining integration tests with Syntax::Keyword::Try now
latest version (0.07) works correctly
0.09 2017-08-13 17:44:48
[CHANGES]
* Link to TPCiA talk slides
* Forbid the use of foreach loops on non-lexicals as that has
semantic problems due to the implied 'local'
* Unit-test that plain 'eval{}' works as expected
* Allow specifically the use of 'local $@' to support common patterns
around 'eval{}'
* Unit-test that try/catch from Syntax::Keyword::Try works
[BUGFIXES]
* Save cx->blk_gimme on CXt_LOOP_* contexts (thanks rurban)
(RT122673)
0.08 2017/08/10 16:48:52
[CHANGES]
* Handle the other CXt_LOOP_* context types, making foreach() loops
work
0.07 2017/07/11 23:26:48
[CHANGES]
* Forbid the use of 'await' outside of 'async sub'
* Handle CXt_BLOCK contexts
* Handle SAVEt_CLEARSV and SAVEt_CLEARPADRANGE savestack entries
* Further documentation rework
[BUGFIXES]
* Fix off-by-one error on reading the savestack, resulting in a
number of false-"TODO" failures being fixed
* Fix parser logic for parenthesized 'await( ... )' expressions
0.06 2017/06/29 17:43:19
[CHANGES]
* Support suspend/resume within while loops and plain loop blocks
* Import the syntax keywords by default, rather than having to
request them as an import symbol
* Added some initial documentation to explain the new syntax
[BUGFIXES]
* Declare (for now) dependency on perl 5.24 to prevent older versions
from attempting it and failing. We hope to support older versions
back to 5.14 in due course.
0.05 2017/06/27 15:20:54
[BUGFIXES]
* Fix await op so it can await multiple times within the same sub
0.04 2017/06/06 18:42:15
[CHANGES]
* Suspend and resume the PAD around an await so lexical variables are
preserved
* Ensure that anon async subs can suspend/resume - see also
https://rt.perl.org/Public/Bug/Display.html?id=131519
[BUGFIXES]
* Ensure MARK stack doesn't upset debugperl
0.03 2017/05/08 21:33:46
[CHANGES]
* Handle the value and mark stacks around suspend/await, allowing
some stack temporaries to be preserved
* Avoid naming internal functions "Perl_..."
[BUGFIXES]
* Ensure that die after await is still caught
* Avoid C++-style comments and C99-style for() loop variable declarations
(RT121569)
0.02 2017/05/08 16:55:38
[CHANGES]
* Initial tiny implementation of actual suspend/resume on 'await'