Declarative Control Flow
Abstract
Getting exception handling right is a perennial problem in C++ that has eluded systematization. Not for much longer. New language and library developments make it possible to handle exceptions in a declarative manner, leading to drastic code simplification.
This talk discusses an alternative approach to handling exceptional flow that eliminates the need for small ancillary RAII classes, try/catch statements that rethrow, and other cleanup mechanisms. The popular Scope Guard idiom gets a spectacular generalization. Statements specify in a declarative manner actions to be taken if the current scope is left normally or via an exception. The resulting code is simpler, smaller, and easier to maintain.
Highlights
- Review ScopeGuard's pros and cons
- Stay abreast of proposed language improvements for better error handling
- New implementation-specific extensions to scope guards
- Use of the new SCOPE_FAILURE and SCOPE_SUCCESS abstractions that complements the existing SCOPE_EXIT
Attendee Profile
ScopeGuard is of interest to C++ programmers of all levels. Implementation details are appealing to advanced engineers.
Outline
- Motivation
- Action/Next/Cleanup/Rollback idiom overview in several languages
- Composition with said idiom
- Explicit vs. implicit control flow as a riff on declarative vs. imperative programming
- Implementation
- Underpinnings
- gcc/clang
- MSVC 8.0+
- Layering
- Icing
- Cake Candles
- Use Cases
- Tracing
- Transactional Work
- Order Still Matters
- nothrow notes
- Scope Changes
- Legacy code