Home | Contact
Program Inversion and Reversible Computation

Janus: a reversible imperative programming language

Janus is likely the very first reversible programming language, designed by Christopher Lutz and Howard Derby in 1986. It was later rediscovered by Robert Glück and Tetsuo Yokoyama after which it became a central research topic in the PIRC group. Since then several versions of the language have been developed. We refer to the publications below for more details.

The original version by Lutz and Derby (called Janus86) is a "core" language with simple reversible updates, branches (if-then-else-fi) and loops. An online interpreter for Janus86 can be found below.

There exist, furthermore, a interpreters with extension for Janus86. The interpreter was first implemented by Claus Skou Nielsen and Michael Budde but is extended at maintained by Michael Kirkedal Thomsen. This is more experimental but you are welcome to play.

If there are any problems woth or extensions to either of the interpreters, you are welcome to contact Michael Kirkedal Thomsen (kirkedal@acm.org).



[1]Yokoyama, T. Reversible Computation and Reversible Programming Languages. In Electronic Notes in Theoretical Computer Science, 253 (6): 71-81, 2010.

In Proceedings


[2]Mogensen, T. A. Partial Evaluation of Janus Part 2: Assertions and Procedures. In Perspectives of Systems Informatics, pages 289-301, Springer-Verlag, LNCS 7162, 2012.


[3]Mogensen, T. A. Partial evaluation of the reversible language janus. In Proceedings of the 20th ACM SIGPLAN workshop on Partial evaluation and program manipulation, pages 23-32, ACM, PEPM '11 , 2011.
[4]Axelsen, H. B. Clean Translation of an Imperative Reversible Programming Language. In Compiler Construction. CC '11, pages 142-161, Springer-Verlag, LNCS 6601, 2011.


[5]Clementsen, P. J.; Axelsen, H. B. and Glück, R. Reversible Coroutines. In Nordic Workshop in Programming Theory '10, Proceedings, 2010.


[6]Yokoyama, T.; Axelsen, H. B. and Glück, R. Reversible Flowchart Languages and the Structured Reversible Program Theorem. In Automata, Languages and Programming. Proceedings, pages 258-270, Springer-Verlag, LNCS 5126, 2008.


[7]Yokoyama, T. and Glück, R. A reversible programming language and its invertible self-interpreter. In Partial Evaluation and Program Manipulation. PEPM '07, pages 144-153, ACM, 2007.



[8]Lutz, C. and Derby, H. Janus: A Time-reversible Language.