Paradigm | imperative (procedural), reversible |
---|---|
Designed by | Christopher Lutz, Howard Derby, Tetsuo Yokoyama, and Robert Glück |
First appeared | 1982, 2007 |
Website | tetsuo |
Major implementations | |
Janus Playground |
Janus is a time-reversible programming language written at Caltech in 1982.[1] The operational semantics of the language were formally specified, together with a program inverter and an invertible self-interpreter, in 2007 by Tetsuo Yokoyama and Robert Glück.[2][3] A Janus inverter and interpreter is made freely available by the TOPPS research group at DIKU.[4] Another Janus interpreter was implemented in Prolog in 2009.[5] An optimizing compiler has been developed in the RC3 research group.[6][7] The below summarises the language presented in the 2007 paper.[2]
Janus is a structured imperative programming language that operates on a global store without heap allocation and does not support dynamic data structures. As a reversible programming language, Janus performs deterministic computations in both forward and backward directions. An extension of Janus features procedure parameters and local variable declarations (local-delocal).[3] Additionally, other variants of Janus support dynamic data structures such as lists.[8][9]