A Unifying Abstraction for Async in C++ & Modules are Coming


Details
โช๏ธ๐๐ฟ๐ถ๐ฐ ๐ก๐ถ๐ฒ๐ฏ๐น๐ฒ๐ฟ ๐ ๐๐ฏ๐ช๐ง๐บ๐ช๐ฏ๐จ ๐๐ฃ๐ด๐ต๐ณ๐ข๐ค๐ต๐ช๐ฐ๐ฏ ๐ง๐ฐ๐ณ ๐๐ด๐บ๐ฏ๐ค ๐ช๐ฏ ๐++
Async in Standard C++ is in a sad state. The standard tools -- promises, futures, threads, locks, and std::async -- are either inefficient, broken, or both. Even worse, there is no standard way to say where work should happen. Parallel algorithms, heterogeneous computing, networking & IO, reactive streams, and more: all critically important foundational technologies that await a standard abstraction for asynchronous computation.
In this talk, Eric Niebler digs into the Standard Committee's search for the basis operations that underpin all asynchronous computation. He will discuss why futures and promises are slow, what an executor is, what callbacks and coroutines have in common, and how the "Task" abstraction -- under active R&D at Facebook -- might do for async algorithms what the Iterator abstraction did for synchronous ones.
Bio:
Eric Niebler is a senior developer in Facebook working on C++ libraries and standards. He is best known for his range-v3 library and his working bringing Range support to the C++20 Standard Library. Lately he has turned his attention to the foundations of asynchronous computation in the hopes of one day unifying his work on ranges with that of reactive streams.
In a past life, Eric was a Boost Consultant, working remotely from the cafes of the world while he drifted from city to city. Now he is a married homeowner and father of two, and he's never been happier. When he's not puzzling over C++ library design, he is puzzling over a Japanese flower arrangement (ikebana), or playing D&D with his son.
โช๏ธ๐๐ฟ๐๐ฐ๐ฒ ๐๐ฑ๐ฒ๐น๐๐๐ฒ๐ถ๐ป ๐๐ฒ๐น๐ฏ๐ฎ๐ฐ๐ต ๐๐ฐ๐ฅ๐ถ๐ญ๐ฆ๐ด ๐ข๐ณ๐ฆ ๐๐ฐ๐ฎ๐ช๐ฏ๐จ
Modules are coming to C++ in the next standard, and they will have an impact unlike any other new feature added to C++ since 1998. Modules are a first-class system for encapsulating and defining interfaces to translation units. They are a modern replacement for C++'s textual inclusion system (e.g. headers).
Other features change how you write C++ code. Modules change not only how you write your code; they will change the very structure of your C++ projects, your build system, your IDE, and your tools.
In this talk, I'll show you how modules work, how they contrast with the current header inclusion system, how you'll benefit from them, and the transition path for the C++ ecosystem.
Bio:
Bryce Adelstein Lelbach is a software engineer on the CUDA driver team at NVIDIA. Bryce is passionate about parallel programming. He maintains Thrust, the CUDA C++ core library. He is also one of the initial developers of the HPX C++ runtime system. He spent five years working on HPX while he was at Louisiana State University's Center for Computation and Technology, and three years at Lawrence Berkeley National Laboratory (a US Department of Energy research facility) developing and analyzing new parallel programming models for exascale and post-Moore architectures. He also helped start the LLVMLinux initiative, and has occasionally contributed to the Boost C++ libraries. Bryce is an organizer for the C++Now and CppCon conferences as well as the Bay Area C++ user group, and he is passionate about C++ community development. He is a member of the ISO C++ standard committee. He worked on the C++17 parallel algorithms; today, he works on standardizing better futures, executors, and multi-dimensional arrays.

A Unifying Abstraction for Async in C++ & Modules are Coming