-
Notifications
You must be signed in to change notification settings - Fork 505
Comparing changes
Open a pull request
base repository: lewissbaker/cppcoro
base: master
head repository: lewissbaker/cppcoro
compare: lazy_task_tailcall
- 10 commits
- 11 files changed
- 1 contributor
Commits on Aug 2, 2017
-
Experimental implementation of tail-call lazy_task.
Use the variant of await_suspend() that returns a coroutine handle.
Configuration menu - View commit details
-
Copy full SHA for 39553bb - Browse repository at this point
Copy the full SHA 39553bbView commit details
Commits on Aug 3, 2017
-
Fixed tail-call implementation for lazy_task amd when_all.
If await_suspend() returns a std::coroutine_handle then this is unconditionally resumed. So we now return a dummy coroutine_handle whose resume() method just immediately suspends in cases where there is no continuation ready to be resumed.
Configuration menu - View commit details
-
Copy full SHA for f86130a - Browse repository at this point
Copy the full SHA f86130aView commit details -
Configuration menu - View commit details
-
Copy full SHA for 2bdce53 - Browse repository at this point
Copy the full SHA 2bdce53View commit details
Commits on Aug 4, 2017
-
Configuration menu - View commit details
-
Copy full SHA for a1da0b2 - Browse repository at this point
Copy the full SHA a1da0b2View commit details -
Configuration menu - View commit details
-
Copy full SHA for d991920 - Browse repository at this point
Copy the full SHA d991920View commit details -
Update async_generator<T> to use tail-call resumption.
This greatly simplifies the implementation as we don't need to do anything special for the case where the async operations complete synchronously. The async_generator<T> no longer needs atomic operations to synchronise consumer/produce running concurrently since one is always suspended before resuming the other.
Configuration menu - View commit details
-
Copy full SHA for d74bebe - Browse repository at this point
Copy the full SHA d74bebeView commit details
Commits on Aug 6, 2017
-
Configuration menu - View commit details
-
Copy full SHA for dfc4128 - Browse repository at this point
Copy the full SHA dfc4128View commit details -
Update recursive_generator to use tailcall suspend/resume.
- recursive_generator's final_suspend now directly resumes the parent generator using symmetric control transfer in await_suspend() rather than trampolining off a loop in the pull() method. - Recursive yield_value() now has much simpler logic for maintaining the root/parent/leaf pointers due to use of symmetric transfer meaning we don't have to explicitly handle a coroutine completing synchronously. - yield_value() now stores pointer to value in the root generator's m_value. This should make repeated iterator dereferences slightly more efficient as the derference now has one less pointer dereference (the extra dereference is now in the yield_value() method).
Configuration menu - View commit details
-
Copy full SHA for f8cf7a6 - Browse repository at this point
Copy the full SHA f8cf7a6View commit details
Commits on Aug 7, 2017
-
Modify lazy_task<T> to allow tail recursion.
Allows co_return'ing a lazy_task<T> instead of a T to perform tail recursion.
Configuration menu - View commit details
-
Copy full SHA for 69a8df4 - Browse repository at this point
Copy the full SHA 69a8df4View commit details -
Configuration menu - View commit details
-
Copy full SHA for 8594f96 - Browse repository at this point
Copy the full SHA 8594f96View commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff master...lazy_task_tailcall