- 1. Welcome
- 2. Charter
- 3. Meetings
❱
- 3.1. Discussion schedule
- 3.2. Triage
- 4. The vision
❱
- 4.1. ❓How to vision
❱
- 4.1.1. Owning a goal or initiative
- 4.1.2. Being a stakeholder
- 4.1.3. Writing an evaluation
- 4.1.4. Authoring "Status quo" stories
- 4.1.5. Authoring "Shiny future" stories
- 4.1.6. Commenting on stories
- 4.1.7. Awards
- 4.2. 🥰 How using async Rust ought to feel
- 4.3. 🙋♀️ Cast of characters
❱
- 4.3.1. Alan
- 4.3.2. Grace
- 4.3.3. Niklaus
- 4.3.4. Barbara
- 4.4. ⚡ Projects
❱
- 4.4.1. Template
- 4.4.2. MonsterMesh (embedded sensors)
- 4.4.3. DistriData (Generic Infrastructure)
- 4.4.4. TrafficMonitor (Custom Infrastructure)
- 4.4.5. YouBuy (Traditional Server Application)
- 4.4.6. SLOW (Protocol implementation)
- 4.5. 😱 Status quo
- 4.6. ✨ Shiny future
❱
- 4.6.1. 📚 User's manual of the future
- 4.7. 📅 Roadmap
❱
- 4.7.1. Async fn everywhere
❱
- 4.7.1.1. Boxable async fn
- 4.7.1.2. Async main and tests
- 4.7.2. Scoped spawn and reliable cancellation
❱
- 4.7.2.1. Capability
❱
- 4.7.2.1.1. Variant: Async trait
- 4.7.2.1.2. Variant: Leak trait
- 4.7.2.2. Scope API
- 4.7.3. Async iteration
❱
- 4.7.3.1. Traits
- 4.7.3.2. Generators
- 4.7.4. Portable and interoperable
❱
- 4.7.4.1. Read/write traits
- 4.7.4.2. Timers
- 4.7.4.3. Spawn
- 4.7.4.4. Runtime
- 4.7.5. Polish
❱
- 4.7.5.1. must_not_suspend lint
- 4.7.5.2. Lint blocking fns
- 4.7.5.3. Lint large copies
- 4.7.5.4. Error messages for the most confusing scenarios
- 4.7.5.5. Stacktraces
- 4.7.5.6. Precise Generator Captures
- 4.7.5.7. Sync and async behave the same
- 4.7.6. Tooling
❱
- 4.7.6.1. Crashdump
- 4.7.7. Testing
- 4.7.8. Documentation
❱
- 4.7.8.1. Async book
- 4.7.9. Threadsafe portability
- 4.7.10. Async overloading
- 4.8. ❓ Major unresolved questions or controversies
❱
- 4.8.1. Default runtime?
- 4.8.2. How to represent the AsyncFn traits?
- 4.8.3. How best to integrate voluntary cancellation?
- 4.8.4. Extend stdlib to permit portable async without generics?
- 4.8.5. To await or not to await?
- 4.9. 💝 Appendix: Submitted stories
❱
- 4.9.1. 😱 Status quo
❱
- 4.9.1.1. Template
- 4.9.1.2. Alan builds a task scheduler
- 4.9.1.3. Alan creates a hanging alarm
- 4.9.1.4. Alan finds dropping database handles is hard
- 4.9.1.5. Alan has an external event loop
- 4.9.1.6. Alan hates writing a Stream
- 4.9.1.7. Alan iteratively regresses performance
- 4.9.1.8. Alan lost the world
- 4.9.1.9. Alan misses C# async
- 4.9.1.10. Alan needs async in traits
- 4.9.1.11. Alan runs into stack trouble
- 4.9.1.12. Alan started trusting the Rust compiler, but then... async
- 4.9.1.13. Alan thinks he needs async locks
- 4.9.1.14. Alan tries using a socket Sink
- 4.9.1.15. Alan tries to debug a hang
- 4.9.1.16. Alan tries to cache requests, which doesn't always happen
- 4.9.1.17. Alan tries tries processing some files
- 4.9.1.18. Alan wants a prefetch iterator
- 4.9.1.19. Alan wants to migrate a web server to Rust
- 4.9.1.20. Alan writes a web framework
- 4.9.1.21. Alan extends an AWS service
❱
- 4.9.1.21.1. Writing a Java-based service at AWS
- 4.9.1.21.2. Getting started with Rust
- 4.9.1.21.3. Coming from Java
- 4.9.1.21.4. Exploring the ecosystem
- 4.9.1.21.5. Juggling error handling
- 4.9.1.21.6. Failure to parallelize
- 4.9.1.21.7. Borrow check errors
- 4.9.1.21.8. Solving a deadlock
- 4.9.1.21.9. Encoutering pin
- 4.9.1.21.10. Figuring out the best option
- 4.9.1.21.11. Testing his service
- 4.9.1.21.12. Using the debugger
- 4.9.1.21.13. Missed Waker leads to lost performance
- 4.9.1.21.14. Debugging performance problems
- 4.9.1.21.15. Getting ready to deply
- 4.9.1.21.16. Using JNI
- 4.9.1.22. Barbara anguishes over HTTP
- 4.9.1.23. Barbara awants single threaded optimizations
- 4.9.1.24. Barbara battles buffered streams
- 4.9.1.25. Barbara begets backpressure and benchmarks async_trait
- 4.9.1.26. Barbara bridges sync and async in perf.rust-lang.org
- 4.9.1.27. Barbara builds an async executor
- 4.9.1.28. Barbara carefully dismisses embedded Future
- 4.9.1.29. Barbara compares some C++ code
- 4.9.1.30. Barbara gets burned by select
- 4.9.1.31. Barbara makes their first foray into async
- 4.9.1.32. Barbara needs Async Helpers
- 4.9.1.33. Barbara plays with async
- 4.9.1.34. Barbara polls a Mutex
- 4.9.1.35. Barbara tries async streams
- 4.9.1.36. Barbara tries Unix socket
- 4.9.1.37. Barbara trims a stacktrace
- 4.9.1.38. Barbara wants async insights
- 4.9.1.39. Barbara wants to use GhostCell-like cell borrowing
- 4.9.1.40. Barbara wishes for an easy runtim switch
- 4.9.1.41. Barbara writes a runtime-agnostic library
- 4.9.1.42. Grace debugs a crash dump
- 4.9.1.43. Grace deploys her service and hits obstacles
- 4.9.1.44. Grace tries new libraries
- 4.9.1.45. Grace waits for gdb next
- 4.9.1.46. Grace wants a zero copy API
- 4.9.1.47. Grace wants to integrate a C-API
- 4.9.1.48. Grace writes a new Facebook service
- 4.9.1.49. Niklaus builds a hydrodynamics simulator
- 4.9.1.50. Niklaus wants to share knowledge
- 4.9.2. ✨ Shiny future
❱
- 4.9.2.1. Template
- 4.9.2.2. Alan learns async on his own
- 4.9.2.3. Alan's trust in the compiler is rewarded
- 4.9.2.4. Alan switches runtimes
- 4.9.2.5. Barbara appreciates great performance analysis tools
- 4.9.2.6. Barbara enjoys an async sandwich
- 4.9.2.7. Barbara makes a wish
- 4.9.2.8. Barbara wants async read write
- 4.9.2.9. Barbara wants async tracing
- 4.9.2.10. Grace debugs a crash dump again
- 5. Design docs
❱
- 5.1. ⚠️ Yield-safe lint
- 5.2. ☔ Stream trait
- 5.3. ⚡ Generator syntax
- 5.4. 📝 AsyncRead, AsyncWrite traits
- 5.5. 🧬 Async fn in traits
- 5.6. 🔒 Mutex (future-aware)
- 5.7. 📺 Async aware channels
- 5.8. 📦 Async closures
- 5.9. 🤝 Join combinator
- 5.10. 🤷♀️ Select combinator
- 5.11. 🚰 Sink trait
- 5.12. 🎇 Async main
- 5.13. 🗑️ Async drop
❱
- 5.13.1. ♻️ Async lifecycle
- 5.14. ⏳ Completion-based futures
- 5.15. 🥞 Async Stack Traces
- 6. Conversations
❱
- 6.1. 2021-02-12 Twitter thread
- 7. Glossary
- 8. Acknowledgments