1.
👋🏽 Welcome
2.
🔮 The vision
❱
2.1.
❓How to vision
❱
2.1.1.
Projects
2.1.2.
"Status quo" stories
2.1.3.
"Shiny future" stories
2.1.4.
Commenting
2.1.5.
Awards
2.2.
🥰 How using async Rust ought to feel
2.3.
🙋♀️ Cast of characters
❱
2.3.1.
Alan
2.3.2.
Grace
2.3.3.
Niklaus
2.3.4.
Barbara
2.4.
⚡ Projects
❱
2.4.1.
Template
2.4.2.
MonsterMesh (embedded sensors)
2.4.3.
DistriData (Generic Infrastructure)
2.4.4.
TrafficMonitor (Custom Infrastructure)
2.4.5.
YouBuy (Traditional Server Application)
2.4.6.
SLOW (Protocol implementation)
2.5.
😱 Status quo
❱
2.5.1.
Problems
❱
2.5.1.1.
Too many ways to do it
2.5.1.2.
Footguns
2.5.1.3.
Missing language features
2.5.1.4.
Missing capabilities
2.5.1.5.
Poor tooling support
2.5.1.6.
Writing tests is hard
2.5.2.
Authoring the DistriData service
2.5.3.
Creating a library for the SLOW protocol
2.5.4.
Developing MonsterMesh, a system of embedded sensors
2.5.5.
Implementing a base64 decoding library
2.6.
✨ Shiny future
❱
2.6.1.
📚 User's manual of the future
2.7.
📅 Roadmap
❱
2.7.1.
Deliverable
2.7.2.
Owner
2.7.3.
Stages
2.8.
✅ Deliverables
❱
2.8.1.
Async fn everywhere
❱
2.8.1.1.
Async fn in traits
2.8.1.2.
impl Trait in traits
2.8.1.3.
Type alias impl trait
2.8.1.4.
Generic associated types
2.8.1.5.
Dyn async trait
2.8.1.6.
Dyn trait
2.8.1.7.
Inline async fn
2.8.1.8.
Async drop
2.8.1.9.
Async closures
2.8.1.10.
Async tests
2.8.1.11.
Recursive async fn
2.8.1.12.
Boxable async fn
2.8.2.
Easy acccess to borrowed data, reliable cancellation
❱
2.8.2.1.
Capability
❱
2.8.2.1.1.
Variant: Async trait
2.8.2.1.2.
Variant: Leak trait
2.8.2.2.
Scope API
2.8.3.
Flexible async iteration
❱
2.8.3.1.
Traits
2.8.3.2.
Generators
2.8.4.
Portable across runtimes, easy to switch
❱
2.8.4.1.
Async read/write
2.8.4.2.
Async iteration
2.8.4.3.
Async spawn, spawn-blocking
2.8.4.4.
Async timer
2.8.4.5.
Portable async functionality in stdlib
2.8.5.
Polish
❱
2.8.5.1.
must_not_suspend lint
2.8.5.2.
Lint blocking fns
2.8.5.3.
Lint large copies
2.8.5.4.
Error messages for the most confusing scenarios
2.8.5.5.
Stacktraces
2.8.6.
Tooling
2.8.7.
Testing
2.8.8.
Documentation
❱
2.8.8.1.
Async book
2.8.9.
Threadsafe portability
2.8.10.
Async overloading
2.9.
❓ Major unresolved questions or controversies
❱
2.9.1.
Default runtime?
2.9.2.
How to represent the AsyncFn traits?
2.9.3.
How best to integrate voluntary cancellation?
2.9.4.
Extend stdlib to permit portable async without generics?
2.9.5.
To await or not to await?
2.10.
💝 Appendix: Submitted stories
❱
2.10.1.
😱 Status quo
❱
2.10.1.1.
Template
2.10.1.2.
Alan builds a task scheduler
2.10.1.3.
Alan finds dropping database handles is hard
2.10.1.4.
Alan has an external event loop
2.10.1.5.
Alan hates writing a Stream
2.10.1.6.
Alan iteratively regresses performance
2.10.1.7.
Alan lost the world
2.10.1.8.
Alan misses C# async
2.10.1.9.
Alan needs async in traits
2.10.1.10.
Alan runs into stack trouble
2.10.1.11.
Alan started trusting the Rust compiler, but then... async
2.10.1.12.
Alan thinks he needs async locks
2.10.1.13.
Alan tries using a socket Sink
2.10.1.14.
Alan tries to debug a hang
2.10.1.15.
Alan tries to cache requests, which doesn't always happen
2.10.1.16.
Alan wants to migrate a web server to Rust
2.10.1.17.
Alan writes a web framework
2.10.1.18.
Alan extends an AWS service
❱
2.10.1.18.1.
Writing a Java-based service at AWS
2.10.1.18.2.
Getting started with Rust
2.10.1.18.3.
Coming from Java
2.10.1.18.4.
Exploring the ecosystem
2.10.1.18.5.
Juggling error handling
2.10.1.18.6.
Failure to parallelize
2.10.1.18.7.
Borrow check errors
2.10.1.18.8.
Solving a deadlock
2.10.1.18.9.
Encoutering pin
2.10.1.18.10.
Figuring out the best option
2.10.1.18.11.
Testing his service
2.10.1.18.12.
Missed Waker leads to lost performance
2.10.1.18.13.
Debugging performance problems
2.10.1.18.14.
Using JNI
2.10.1.19.
Barbara anguishes over HTTP
2.10.1.20.
Barbara awants single threaded optimizations
2.10.1.21.
Barbara battles buffered streams
2.10.1.22.
Barbara begets backpressure and benchmarks async_trait
2.10.1.23.
Barbara bridges sync and async in perf.rust-lang.org
2.10.1.24.
Barbara builds an async executor
2.10.1.25.
Barbara carefully dismisses embedded Future
2.10.1.26.
Barbara compares some C++ code
2.10.1.27.
Barbara gets burned by select
2.10.1.28.
Barbara makes their first foray into async
2.10.1.29.
Barbara needs Async Helpers
2.10.1.30.
Barbara plays with async
2.10.1.31.
Barbara polls a Mutex
2.10.1.32.
Barbara tries async streams
2.10.1.33.
Barbara tries Unix socket
2.10.1.34.
Barbara trims a stacktrace
2.10.1.35.
Barbara wants async insights
2.10.1.36.
Barbara wants to use GhostCell-like cell borrowing
2.10.1.37.
Barbara writes a runtime-agnostic library
2.10.1.38.
Grace deploys her service and hits obstacles
2.10.1.39.
Grace tries new libraries
2.10.1.40.
Grace waits for gdb next
2.10.1.41.
Grace wants to integrate a C-API
2.10.1.42.
Grace writes a new Facebook service
2.10.1.43.
Niklaus builds a hydrodynamics simulator
2.10.1.44.
Niklaus wants to share knowledge
2.10.2.
✨ Shiny future
❱
2.10.2.1.
Template
2.10.2.2.
Alan learns async on his own
2.10.2.3.
Alan's trust in the compiler is rewarded
2.10.2.4.
Alan switches runtimes
2.10.2.5.
Barbara appreciates great performance analysis tools
2.10.2.6.
Barbara enjoys an async sandwich
2.10.2.7.
Barbara makes a wish
2.10.2.8.
Barbara wants async read write
2.10.2.9.
Barbara wants async tracing
3.
🔍 Triage meetings
4.
🔬 Design docs
❱
4.1.
⚠️ Yield-safe lint
4.2.
☔ Stream trait
4.3.
⚡ Generator syntax
4.4.
📝 AsyncRead, AsyncWrite traits
4.5.
🧬 Async fn in traits
4.6.
🔒 Mutex (future-aware)
4.7.
📺 Async aware channels
4.8.
📦 Async closures
4.9.
🤝 Join combinator
4.10.
🤷♀️ Select combinator
4.11.
🚰 Sink trait
4.12.
🎇 Async main
4.13.
🗑️ Async drop
❱
4.13.1.
♻️ Async lifecycle
4.14.
⏳ Completion-based futures
5.
💬 Conversations
❱
5.1.
🐦 2021-02-12 Twitter thread
6.
❤️ Acknowledgments
Light (default)
Rust
Coal
Navy
Ayu
wg-async-foundations
Deliverable