Transformations for Uroboro Programs
Assigned to Julian Jabs.
Implement a set of program transformations between programs in (subsets or all of) the language Uroboro that has recently been proposed by the working group of programming languages and software technology.
Uroboro is a functional programming language. Like other functional languages, Uroboro supports programming with algebraic data types, but unlike them, it only supports first-order functions. Instead of higher-order functions, Uroboro uses the dual of data types, that is, codata types, in a form that can simulate the use of first-class functions. In current research, a team from the chair of programming languages and software technology has shown that this choice of language features enables complete, invertible and automatic de- and refunctionalization of fragments of Uroboro containing only codata and data types, respectively.
The goal of this thesis project is to implement the program transformations of de- and refunctionalization in the context of an existing Uroboro implementation, extend their scope to cover more liberal fragments of Uroboro, and provide further automatic transformations. Eventually, we want to automate a set of transformations that is known to be helpful for the manual transformations between high-level meta-interpreters and low-level abstract machines, like disentangling, transition compression, CPS transformations, and maybe loop fission and loop fusion.