Description
C++20 extends the capabilities of generalised constant expressions to include transient dynamic memory allocation; which must be freed before evaluation of the surrounding constant expression.While interactivity, and other ad-hoc restrictions on constant expressions remain, the opportunity now exists to integrate existing and idiomatic stateful programs within type level calculations.
The C++ standard library is the most basic dependency of a project; and shipped with every compiler. Yet, while compile-time dynamic memory allocation is functional, algorithms and containers from the standard library are not available for use within constant expressions.
We introduce the C'est library: providing a growing subset of common functions and classes from the C++ standard library, applicable within constant expressions. The need for strongly-typed allocation arises, and we introduce emergent idioms to overcome the limitations of transient allocation.
Pervasive memory errors, including uninitialised memory access; using non-owned memory; buffer overflows; and double free errors, are all now capable of capture through compilation errors; rather than runtime errors. While template metaprogramming has been avoided, there is nevertheless a development cost, with the capabilities of the debugger stretched; and memory debuggers now indispensable in the quest even to compile larger programs.
We conclude with a case study involving compile-time verification of the Metamath proof database format, and discuss our ongoing work within the Clang constant expression evaluator.
Period | 21 Oct 2020 |
---|---|
Event title | Scottish Programming Languages Seminars (Oct 2020 meeting) |
Event type | Seminar |
Degree of Recognition | National |
Keywords
- C++
- metaprogramming
- functional programming
- types
- templates
- verification