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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.