Programming Languages

Open Thesis Topics

If you are interested in writing a thesis (in German or English) in the scope of one of our research topics, just come talk to us.

List of currently open thesis topics

Porting PyGame to Racket

PyGame is a popular library for game development in Python. The purpose of this thesis is to port PyGame to Racket and, more specifically, to the BSL and ISL teaching languages in Racket. However, the task is not just to port the library (with adequate performance); rather, it should be ported in such a way that it fits to the functional programming style emphasized by our Informatik 1 lectures (e.g. by adapting it to the “universe teachpack” style of interactive programming). If this thesis is successful, we plan to consider its use for the Tübingen Informatik 1 lecture.

Further Information

Read more ...

Internalizing the sequent calculus dualities

Gentzen’s sequent calculus is a foundation of modern logic and, more recently, programming language design. It is known for being more symmetric than natural deduction, a deduction calculus that is biased on proofs and truth, whereas sequent calculus does symmetrically support proofs/truth and refutations/falsity.

Read more ...

Implementing the Knuth/Plass line breaking algorithm in Haskell

Your job is to re-implement the Knuth-Plass line breaking algorithm, which is used in the TeX and LaTeX text processing systems, in Haskell. To this end, we use an existing library for DVI files, which already contains a simple line breaking algorithm. An optional goal of this thesis is to write the thesis report using the code developed in this thesis.

Further Information

Read more ...

Refactoring Macros

Macros are code transformers, but the result of these transformations is usually not intended to be seen, let alone edited, by the programmer. In this Msc thesis we want to explore the usage of macros as user-extensible refactoring tools, such as “extract function” or “convert to CPS”. Practically, we envision an IDE integration where programmers can select a block of code and then select a macro that will transform the selected block of code, which then gets replaced by the result of the macro invocation. We plan to implement refactoring macros on top of the Racket language and the DrRacket IDE.

Read more ...

Static Typing for Snap!

Snap! is an educational visual programming language in the tradition of Scratch, but extended with features for abstraction, such as higher-order functions and user-defined data types. The purpose of this thesis is to add a static type system with type inference to Snap, in the style of Hindley-Milner type systems – the backbone of static typing in functional programming. The main challenge of this thesis, beyond implementing the type system, is to design visual metaphors for static typing that fit to the pedagogy of Snap and adapt the type Hindley-Milner system to the particular features offered by Snap!.

Read more ...

An Online Repository for Haskell Code Snippets

The idea of fragment-based code distribution is to distribute code in units of individual functions instead of packages as is mostly done today. We have a prototype implementation of a fragment-based code package manager fragnix [0] for Haskell. In a talk at Haskell Implementors Workshop 2017 we gave a demo of how functions could be stored online and retrieved individually [1].

Read more ...

Web-basierte Visualisierung mittelalterlicher Musiknotation

MEI (Music Encoding Initiative) hat sich inzwischen als Format zur Musik-Codierung in der musikwissenschaftlichen Forschung etabliert. Es deckt neben der gebräuchlichen Musiknotation (Common Western Music Notation) auch Notationsformen älterer Musik (z.B. die sogenannten Neumen des Gregorianischen Chorals) ab. Das MEI Neumes Module wurde in Zusammenarbeit zwischen dem WSI und dem Musikwissenschaftlichen Institut Tübingen im Projekt Tübingen entwickelt. Eine Diplomarbeit am WSI (Gregor Schräder) entwickelte als web-basiertes Visualiertungstool den MEI Neumes Viewer. In der Arbeit soll die bisherige im MEI Neumes-Viewer verwendete “Eierkohlen”-Notation um weitere mittelalterliche Notationen (Neumennotation, Quadratnotation) erweitert werden. Als Vorbild könnte der Open-Source TeX-Dialekt Gregorio dienen.

Read more ...

Grafischer Eingabe-Editor für MEI-Neumes

MEI (Music Encoding Initiative) hat sich inzwischen als Format zur Musik-Codierung in der musikwissenschaftlichen Forschung etabliert. Es deckt neben der gebräuchlichen Musiknotation (Common Western Music Notation) auch Notationsformen älterer Musik (z.B. die sogenannten Neumen des Gregorianischen Chorals) ab. Das MEI Neumes Module wurde in Zusammenarbeit zwischen dem WSI und dem Musikwissenschaftlichen Institut Tübingen im Projekt TüBingen entwickelt.

Read more ...

Probabilistic Programming for Algorithmic Trading

Probabilistic programming is often advertized as “democratizing machine learning”, because it provides a very simple but expressive model of statistical inference. The purpose of this thesis is to validate that claim by applying it to algorithmic trading of securities. More specifically, we want to apply it for “auto-tuning” of parameters for trading strategies. In the thesis, no actual trading will take place, but we will evaluate the approach with historical ticker data.

Read more ...

Declarative Programming of Fischertechnik Robots

We are collaborating with Fischertechnik GmbH to develop novel ways to program their robots. Currently, the robots are programmed either with a high-level but rather limited graphical flow chart language, or using a low-level imperative API. The goal of this thesis is to design and implement a library for high-level modular but general functional programming for the Fischertechnik ROBO TXT controller. This library should be based either on the ``How to Design Worlds” approach by Felleisen et al or in the style of functional reactive programming.

Read more ...

Contract inference for relationally parametric polymorphic contracts

Guha et al have developed a way to specify relationally parametric polymorphism in contracts and check conformance at runtime. These ideas were realized in the Racket programming language. Currently, the utility of parametric contracts is limited due to the fact that parametric contracts must be instantiated explicitly in many circumstances; implicit instantiation only works for primitive types.

Read more ...

Embedded Probabilistic Programming with Continuous Variable Distributions

Probabilistic programming languages are programming languages which have special support to describe probabilistic models, and then perform inference in these models. They are attractive because they unify the expressive power of a general-purpose programming language with probabilistic modeling and reasoning.

Read more ...

Integrated Environment for Uroboro Refactorings

Implement an editor for Uroboro that supports some features of an integrated development environment. In particular, we want to support experimentation with various refactorings based on program transformations that we are developing as part of the Uroboro project.

Read more ...

DSLs for Machine Learning

We are collaborating with Christopher Ré from Stanford University to improve the interface to the DeepDive machine learning system. More specifically, we aim to phrase the interface to DeepDive as an embedded domain-specific language with the eventual goal to integrate machine learning so closely and seamlessly into ordinary programs that it is as simple to define a function or data structure via machine learning than to define a function via ordinary programming. The goal of this thesis is to to make the first steps towards that goal. Concretely, the first step would consist in embedding DeepDive into a statically typed programming language such as Scala.

Read more ...