Programming Languages

Finished 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 already finished thesis topics

Second-class modules for the Effekt programming language

Effekt is a research programming language that features a lightweight implementation of effects and handlers. As part of this thesis, the language was extended with second-class modules and related functionalities. These new features allow programmers to define modules and abstract them with interfaces. Also, the module system aims to strengthen the interplay between effects and modules. Both concepts share common characteristics, paving the way for potential future unification. This work examines those possibilities and provides insights into the relationship of modules and effects.

Read more ...

Making Fragment Based Code Distribution Practical

Package managers for programming languages are becoming more and more prevalent with only few languages not having one. The packages that one can add to a project with these tools are stored in an online repository, where users can share their work and make it available to other developers. This has led to huge increase in productivity. Fragnix is a prototype that is built around the idea of not sharing huge packages, that can contain several module files but rather the smallest possible unit of distribution: single functions. This thesis explains what was necessary to turn the Fragnix prototype from a tool, that could extract single definitions from Haskell modules into its own files, into a package manager, that transmits these files over the internet to integrate them in a user’s project.

Read more ...

Build Systems à la Carte with Effect Handlers

Algebraic effect handlers have been gaining attention in programming language re- search. They offer a new, abstract way of control flow. In this thesis we do a case study on reproducing a Haskell framework for build systems in Effekt, a new programming language with support for algebraic effect handlers.

Read more ...

Entwicklung eines Frontends für eine Datenbank an Haskell-Code-Snippets

Diese Bachelorarbeit befasst sich mit der Entwicklung eines Frontends für eine Datenbank, die Codeausschnitte der Programmiersprache Haskell beinhaltet. Das Frontend soll hier eine Webseite sein, die ein Nutzer im ersten Schritt auf seinem System installieren kann und die in einem weiteren Schritt auch öffentlich zugänglich gemacht werden kann.

Read more ...

Algebraic Subtyping for Ouroboro

Algebraic subtyping is a new approach which unifies parametric polymorphism, subtyping and complete type inference with principal types. The presentations used in the literature illustrate the approach by considering systems with function types, record types and base types, since these form a minimal type theory which allows to illustrate contravariance (function types) and subtyping (record types).

Read more ...

Dependent Data and Codata Types

User-defined data and codata types are two dual and complementary ways to specify types and their inhabitants. Data types specify canonical producers which are built up by constructors, and non-canonical consumers which are formed by pattern matching on constructors. Codata types specify canonical consumers which are built up by destructors, and non-canonical producers which are built up by copattern matching on destructors. For example, using (indexed) codata types it is possible to replace a builtin (dependent) function type by a user defined type.

Read more ...

Fragnix-Gui Creating a declaration editor for an alternative software sharing platform for Haskell

Building upon the existing Fragnix tool [fragnix], which slices a Haskell program into its declarations and enriches them with metadata, this thesis envisions a software sharing ecosystem based on sharing single declaration slices. Such an ecosystem could offer improvements in terms of performance, dependency tracking and maintenance and help with the prevention of effort duplication. A declaration editor is chosen as the next step towards realizing the tools for this slice sharing ecosystem. Using Haskell in the back-end and Elm in the front-end, prototypes for navigating code in form of slices are developed. A layout based on code-folding and in dentation proves to be most promising and is used for implementing the back-end foundations for editing and the ability to edit the text of declarations. The implementation of the remaining editing features is left for future work.

Read more ...

A Comparison of Probabilistic Programming Languages

The goal of this bachelor thesis was to investigate the differences between probabilistic programming languages. Therefore a case study was performed. We represented a hidden markov model and implemented inference on it with two probabilistic programming languages, WebPPL and Pyro. WebPPL following a functional approach as well as Pyro that sticks to an imperative programming paradigm succeeded in representing the hidden Markov model. Concerning the inference on the hidden markov model critical spots such as dealing with state depending models were revealed. We came to the conclusion that there exists a balancing problem between a generalization and a highly individual implementation of inference algorithms for probabilistic program- ming languages. The bachelor thesis is interesting for Bachelor or Master students of computer science and related courses of studies. It is also in- teresting for anybody dealing with probabilistic models and inference on them.

Read more ...

Portierung eines Visualisierungs-Frameworks von C# nach Python

Um die kundenorientierte Reichweite eines Unternehmens zu vergrößern, welches Softwareschnittstellen anbietet, ist es notwendig, diese Schnittstellen für verschie- dene Programmiersprachen bereitzustellen. Um dabei den Aufwand gering zu halten, soll großteils nur in einer Sprache entwickelt werden und die Software soll anschließend automatisch in andere Sprachen übersetzt werden. Die Firma yWorks entwickelt dafür das Übersetzungsprogramm Blunter. Unter Verwendung des Blunters soll das von yWorks nach dem Model-View-Controller (MVC)-Pattern programmierte Visualisierungs-Framework yFiles nach Python portiert werden. Für die graphische Darstellung in Python wird ein externes Graphical User In- terface (GUI)-Framework verwendet, welches bereits beim Übersetzungsprozess automatisch in die Python-Portierung integriert wird.

Read more ...

Performance-Analyse und -Optimierung der Ausgabe eines C#-zu-Python-Quellcodeübersetzers

Im Zuge des Tübinger Software-Projekts (TSPs) 2018/19 wurde in Zusammenarbeit mit der yWorks GmbH (yWorks) die neue Version 3.0 des Quellcodeübersetzers Blunter entwickelt. Dadurch ist das Programm nun in der Lage, ein gegebenes C#-Projekt in ein Python-Projekt zu übersetzen.

Read more ...

Second-Class Values for Safer Effect Handlers

Effect handlers as generalizations of exception handlers offer interesting new ways to modularize software. Scala Effekt is an implementation of effect handlers, based on capability passing. Instead of searching for the correct handler in runtime, the handler is passed down to where the effect is used. This allows convenient implementations in languages like Scala and Java and comes with performance improvements. Scala 3 introduced the new feature of implicit function types, greatly reducing the burden of explicit capability passing. However, capabilities can leak and leave the scope of the defining handler leading to runtime errors.

Read more ...

Implementing the language server protocol for Koka

The Language Server Protocol (LSP) defines a protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. The Language Server Protocol has to be implemented once for every programming language and once for every editor, instead of once for every combination of programming language and editor, thus reducing a m x n problem to a m + n problem.

Read more ...

Implementing functional graph algorithms in a dependently typed language

In functional languages, such as Haskell, we find existing libraries for working with graphs. These libraries contain the definitions of the necessary datatypes and the functions working on them. Examples of such libraries (in Haskell) are the FGL library by Martin Erwig and the Data.Graph module in the containers package.

Read more ...

Strong Reduction in Lambda Calculus and its Use in Program Optimization

Program optimization by compilers is important - especially for functional programming languages. Yet at least parts of it remain a ”black art”, as Simon Peyton Jones describes the inlining technique in [0], full of compromises and heuristics. The problem, known as code bloat, is that optimization techniques might actually make performance worse by inlining too much, blowing up the code size.

Read more ...

Testen von Integrierten Entwicklungsumgebungen

In dieser Bachelorarbeit geht es um das automatische Testen einer eigens programmierten integrierten Entwicklungsumgebung. Die Applikation wird in Qt/C++ programmiert und mittels des Testframeworks Squish getestet. Dabei wird zuerst im Allgemeinen auf Qt und Squish eingegangen. Darauf folgen Vorgehensweise und Entwicklungswerkzeuge. Im Anschluss wird die Applikation, welche Hypertext Phoenix genannt wird, beschrieben. Das letzte und längste Kapitel widmet sich komplett dem Testen. Hier wird auf allgemeine Themen wie Tests von Hypertext Phoenix mit Beispielen eingegangen. Abschluss dieses Kapitels bildet der Nutzen von Tests.

Read more ...

Software-supported piano practice

Pianists perform a variety of exercises to improve the evenness and precision of their playing, including scales, arpeggios, and octaves. The purpose of this thesis is to develop an application that supports pianists in two ways: 1) Training the ear to identify uneven scales, arpeggios etc., and 2) Analyze the exercises of the pianist to identify flaws in the execution of the exercises.

Read more ...

Parsing Markdown with First-Class Derivatives

Markdown is a lightweight and widespread way of structuring plain text documents. The layout rules that are used to structure the text make Markdown at the same time easy to read for humans but also difficult to write a grammar or a parser.

Read more ...

Transformation von Präprozessorvarianz auf Laufzeitvarianz

Das Ziel dieser Arbeit ist, eine Softwareproduktlinie der Firma Bosch, die mit C und CPP realisiert wurde, so zu transformieren, dass die Compile-Zeit Variabilität von CPP ersetzt wird durch Laufzeitvariabilität.

Read more ...

Recording student progress in DrRacket

The purpose of this thesis is to develop a plug-in for the DrRacket development environment that will monitor and log the activity of students. The (appropriately anonymized) collected data will then be used for the scientific evaluation of how beginning programmers work. The main focus of this work is on collecting and representing the developer activity in such a way that interesting analyses can be defined on top of it.

Read more ...

Entwicklung eines Systems zur Suche von DIY-Projektbeschreibungen mit Bildern und Fotos

Das im Rahmen des “Tübinger Softwareprojekts” entwickelte System für Schritt für Schritt Anleitungen soll in dieser Bachelor-Arbeit um eine neuartige Such-Funktionalität erweitert werden. Wir gehen in Zukunft davon aus, dass Nutzer Projektbeschreibungen nicht mehr durch Texteingabe suchen, sondern eher nach Fotos oder Bildern im Internet. Ein Ansatz zur Implementierung der Funktionalität besteht darin, zuerst das Bild zu Verschlagworten und die so erhaltenen Schlagwörter dann als Eingabe einer „klassischen“ Suchmaschine zu verwenden. Hierzu gibt es bereits verschiedene Technologien. Die Aufgabe der Bachelor-Arbeit ist es nun, die vorhandenen Technologien zu identifizieren, zu analysieren und geeignete Technologien auszuwählen. Auf Basis von zu entwickelnden System- und Interaktionskonzepten soll die Implementierung bzw. Systemintegration erfolgen. Ziel ist die prototypische Darstellung einer Suche nach einer DIY-Projektbeschreibung mithilfe eines gemachten Fotos.

Read more ...

Assistenz-Funktionalität für Schritt für Schritt Anleitungen

Das im Rahmen des “Tübinger Softwareprojekts” entwickelte System für Schritt für Schritt Anleitunge soll in dieser Bachelor-Arbeit um eine Assistenz-Funktionalität erweitert werden. Im Allgemeinen sind Assistenten wie beispielsweise Apple Siri oder Microsoft Cortana hinreichend bekannt. Die Herausforderungen bei diesen Assistenten liegen in der Modellierung der Domäne und in der Bereitstellung des Domänenwissens. Zusätzlich muss der Assistent per API in das System eingebunden werden.

Read more ...

Automatic locality-friendly array interface extension of numerical functions through C++ template metaprogramming

Numerical functions often need be invoked on views of vectors or matrixes, derived by selecting some elements or by pre-transforming them. For instance, one might want to prescale matrix elements before applying an existing FFT algorithm on them. Often this must be done by copying the elements to a separate array, and then invoking the original FFT algorithm, but this procedure is not efficient because it uses additional space and therefore has higher impact on data caches.

Read more ...

CodeProse: Leveraging Editor Services for Literate Programming

Literate programming blends the borders between source code and documentation. The goal of existing tools like Docco and Scribble is to create a uniform reading experience for documentation and code.

Read more ...

Bidirectional Grammar Transformation

These are grammar transformations useful in compiler construction (Compilerbau): conversion to Chomsky normal form, left factoring, left recursion elimination. Standard textbooks describe how these transformations work on the production rules of grammars. However, a real compiler works on syntax trees. For each of these transformations between grammars, there exist forward and backward transformations between syntax trees of the grammars. To use grammar transformations in practice, we need the syntax tree transformations.

Read more ...

Transformations for Uroboro Programs

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.

Read more ...