Reversing an imperative concurrent programming language - Hoey, James; Ulidowski, Irek (Science of computer programming, 2022)
We introduce a method of reversing the execution of imperative concurrent programs. Given an irreversible program, we describe the process of producing two versions. The first performs forward execution and saves information necessary for reversal. The second uses this saved information to simulate reversal. We propose using identifiers to capture statement execution order, and to use this to correctly undo data races via backtracking reversibility. We prove this reversibility to be correct, showing that the initial program state is restored and that all saved information is used (garbage-clean). •Reversal of a concurrent imperative programming language that stores minimal data to undo irreversible steps•Identifiers assigned to statements as they execute that determines reverse control flow and ensures correct reversibility•Proof of correctness confirms the method of reversal restores program states and does not produce garbage•Reversibility illustrated on an implementation of a parallel sorting algorithm, with forward and reverse execution described