ABSTRACT

Traditional programming languages contain a mix of reversible and irreversible constructs. Thus, in general, programs written in traditional languages can be reversible or irreversible, depending on the constructs they use. If a program uses even a single irreversible construct, the program as a whole can become irreversible. Irreversible programs can indeed be reversibly executed using simulation techniques to map irreversible execution to reversible platforms,

but at the cost of added runtime and memory overheads. In other words, the runtime and memory costs of reversible execution are (polynomially) larger than those of irreversible execution. It is conceivable to develop a preprocessor to detect when a program is free of irreversible statements and compile such a program differently to avoid the simulation overheads in enabling reversibility. On the other hand, new reversible programming languages that provide only reversible constructs avoid all runtime overheads for reversibility.