Where Are We With Scala's Capabilities?
summary
Scala 3 uses using clauses and context functions to pass capabilities implicitly, and a capture type system that tracks which capabilities lambdas and objects close over; the nightly standard library is already capture-checked standard library and flags invalid compositions (the type checker rejects swapping future/result order that would break control flow). The team ships an effects API with okay/await that works inside higher‑order arguments, and is developing Project Kabiara for separation/linearity using a consume annotation to prevent aliasing bugs.
AI-written summary · about
chapters (25)
- 0:00Introduction
- 0:45Scala needs capability systems
- 1:50Effects in functional languages
- 3:38Staged effects limitations
- 5:47Monadic effect systems problems
- 6:28Capability-based architecture
- 8:37What capabilities are
- 10:03Challenges with capabilities
- 11:49Scala 3 enables capabilities
- 12:31Modeling reactive effects
- 17:25Errors and async with capabilities
- 18:30Capabilities and algebraic effects
- 20:39Monads vs capabilities
- 21:23Effect polymorphism solution
- 24:16Pure and impure function types
- 25:18Try-with-resources pattern
- 27:05Capture types mechanics
- 28:51Practical capture checking
- 31:42Capture annotations in library
- 32:04Capability systems state
- 32:48Sharing restrictions enforcement
- 35:18Separation and linearity
- 36:44Capabilities for security
- 37:26Resources and papers
- 38:08Q&A
related talks
01h 03mWhere Are We With Scala's Capabilities?
01h 03mInside the Scala Capture Checker
01h 23mCapture Tracking in Scala
38mCapture Checking - A New Approach to Effect Safety in Scala
01h 02mSimply Scala
49mThe first steps towards practical capture checking
31mReal-Life Scala Capture Checking
32mAdvanced Features of Scala 3
