Proposal for C2x WG14 n2542 Title: Defer Mechanism for C Author, affiliation: Aaron Ballman, Self Alex Gilding, Perforce Jens Gustedt, Inria, France Tom Scogland, Lawrence Livermore National Laboratory Robert C. Seacord, NCC Group Martin Uecker, University Medical Center Göttingen Freek Wiedijk, Radboud Universiteit Nijmegen Date: 2020-09-08 Proposal category: Feature Target audience: Implementers Abstract: Add a defer mechanism to C language to aid in resource management Prior art: C, Go Defer Mechanism for C Reply-to: Robert C. Seacord (
[email protected]) Document No: n2542 Date: 2020-09-08 Defer Mechanism for C The defer mechanism can restore a previously known property or invariant that is altered during the processing of a code block. The defer mechanism is useful for paired operations, where one operation is performed at the start of a code block and the paired operation is performed before exiting the block. Because blocks can be exited using a variety of mechanisms, operations are frequently paired incorrectly. The defer mechanism in C is intended to help ensure the proper pairing of these operations. This pattern is common in resource management, synchronization, and outputting balanced strings (e.g., parenthesis or HTML). A separable feature of the defer mechanism is a panic/recover mechanism that allows error handling at a distance. Table of Contents Defer Mechanism for C 2 Table of Contents 2 Resource Management 4 Acquiring Resources 5 Releasing Resources 5 Synchronization Primitives 7 Security Concerns 9 Error Handling