└── README.md /README.md: -------------------------------------------------------------------------------- 1 | [The C++ Coroutines TS v1, ISO/IEC TS 22277](https://wg21.link/N4736), was 2 | published on 12-05-2017. 3 | 4 | Implementations 5 | =============== 6 | 7 | Two major C++ implementations have had support for the TS for over a year: 8 | 9 | * MSVC (since version 2015 SP2 in 2016). 10 | * LLVM (since version 5 in 2017). 11 | * EDG frontend (since 2015). 12 | 13 | Libraries 14 | ========= 15 | 16 | In addition to implementation experience, the Coroutines TS v1 has seen a lot of 17 | usage experience: 18 | 19 | Coroutines TS v1 libraries: 20 | 21 | * [CppCoro](https://github.com/lewissbaker/cppcoro) 22 | * [coronet](https://github.com/ericniebler/coronet) 23 | * [ranges-coroutines](https://github.com/toby-allsopp/ranges-coroutines) 24 | * [concurrencpp](https://github.com/David-Haim/concurrencpp/blob/master/concurrencpp.h) 25 | 26 | Libraries with Coroutines TS v1 support: 27 | 28 | * [HPX](https://github.com/STEllAR-GROUP/hpx) [(details)](https://github.com/STEllAR-GROUP/hpx/blob/master/hpx/lcos/detail/future_await_traits.hpp) 29 | * [Folly](https://github.com/facebook/folly) [(details 0)](https://github.com/facebook/folly/blob/master/folly/Optional.h) [(details 1)](https://github.com/facebook/folly/blob/master/folly/Expected.h ) [(details 2)](https://github.com/facebook/folly/blob/master/folly/futures/Future.h) 30 | * [Ranges v3](https://github.com/ericniebler/range-v3) [(details)](https://github.com/ericniebler/range-v3/blob/master/include/range/v3/experimental/utility/generator.hpp ) 31 | * [RxCpp](https://github.com/ReactiveX/RxCpp/blob/master/Rx/v2/src/rxcpp/rx-coroutine.hpp) [(details)](https://github.com/ReactiveX/RxCpp/blob/master/Rx/v2/src/rxcpp/rx-coroutine.hpp) 32 | * Just::Thread Pro 33 | 34 | Coroutine TS v1 emulation layers: 35 | 36 | * [co2 (C++14)](https://github.com/jamboree/co2) 37 | * [CppAsync (C++11)](https://github.com/vmilea/CppAsync) 38 | 39 | Coroutines TS v1 examples and demos: 40 | 41 | * [mditerator (Bryce Adelstein Lelbach)](https://github.com/brycelelbach/mditerator) 42 | * [await (Kirk Shoop)](https://github.com/kirkshoop/await) 43 | * [coroutine_monad (Toby Allsopp)](https://github.com/toby-allsopp/coroutine_monad) 44 | * [coroutine_func (Toby Allsopp)](https://github.com/toby-allsopp/coroutine_func) 45 | 46 | Writing 47 | ======= 48 | 49 | A number of blog posts have been written about the Coroutines TS v1: 50 | 51 | * [Ranges, Coroutines, and React: Early Musings on the Future of Async in C++ (Eric Niebler)](http://ericniebler.com/2017/08/17/ranges-coroutines-and-react-early-musings-on-the-future-of-async-in-c/) 52 | * [My First Coroutine (Kiit Saelensminde)](https://kirit.com/How%20C++%20coroutines%20work/My%20first%20coroutine) 53 | * [Coroutine Theory (Lewis Baker)](https://lewissbaker.github.io/2017/09/25/coroutine-theory) 54 | * [C++ Coroutines: Understanding operator co_await (Lewis Baker)](https://lewissbaker.github.io/2017/11/17/understanding-operator-co-await) 55 | 56 | Talks 57 | ===== 58 | 59 | Many talks have been given at major C++ conferences about the Coroutines TS v1: 60 | 61 | * [await 2.0: Stackless Resumable Functions (Gor Nishanov, CppCon 2014)](https://www.youtube.com/watch?v=KUhSjfSbINE) 62 | * [Coroutines for App and Library Developers (Gor Nishanov, C++Now 2015)](https://www.youtube.com/watch?v=proxLbvHGEQ) 63 | * [C++ Coroutines: A Negative Overhead Abstraction (Gor Nishanov, CppCon 2015)](https://www.youtube.com/watch?v=_fu0gx-xseY) 64 | * [An Introduction to C++ Coroutines (James McNellis, Meeting C++ 2015)](https://www.youtube.com/watch?v=YYtzQ355_Co) 65 | * [Asynchrony and Coroutines (Grigory Demchenko, Meeting C++ 2015)](https://www.youtube.com/watch?v=SbaLI2ZcyY0) 66 | * [An Introduction to C++ Coroutines (James McNellis, Italian C++ Conference 2016)](https://www.youtube.com/watch?v=71SgFjQn4Aw) 67 | * [An Introduction to C++ Coroutines (James McNellis, CppCon 2016)](https://www.youtube.com/watch?v=ZTqHjjm86Bw) 68 | * [C++ Coroutines: Under the Covers (Gor Nishanov, CppCon 2016)](https://www.youtube.com/watch?v=8C8NnE1Dg4A) 69 | * [Putting Coroutines to Work With the Windows Runtime (Kenny Kerr and James McNellis, CppCon 2016)](https://www.youtube.com/watch?v=v0SjumbIips) 70 | * [Coroutines and C++ DSLs for Human Scale Concurrency (Dominic Robinson, ACCU 2017)](https://www.youtube.com/watch?v=d76cJ_RBGbY) 71 | * [Multidimensional Iterators Bryce Adelstein Lelbach, C++Now 2017)](https://www.youtube.com/watch?v=EVGenON6p9g) 72 | * [An Introduction to the Proposed Coroutine Support for C++ (Toby Allsopp, Pacific++ 2017)](https://www.youtube.com/watch?v=nWuXubffryo) 73 | * [Concurrency, Parallelism and Coroutines (Anthony Williams, CppCon 2017)](https://www.youtube.com/watch?v=JvHZ_OECOFU) 74 | * [Coroutines: What Can't They Do? (Toby Allsopp, CppCon 2017)](https://www.youtube.com/watch?v=mlP1MKP8d_Q) 75 | * [Naked Coroutines Live (Gor Nishanov, CppCon 2017)](https://www.youtube.com/watch?v=UL3TtTgt3oU) 76 | 77 | --------------------------------------------------------------------------------