Funktionale Frontend-Entwicklung

Last changed on November 17, 2017

Elm Companies bietet eine Liste von Firmen, die Elm in der Frontend-Entwicklung einsetzen.

Projekte

Auf dieser Seite werden Themenvorschläge für die Veranstaltung Funktionale Frontend-Entwicklung aufgelistet. Sie haben die Möglichkeit, entweder eine kleine Anwendung zu implementieren oder sich in Form einer wissenschaftlichen Arbeit in ein fortgeschrittenes Thema einzuarbeiten.

Information-Flow Control in Elm

Information-Flow Control wird genutzt, um zu verhindern, dass nicht-öffentliche Daten in einer Anwendung in öffentliche Kanäle geraten. Zu diesem Zweck soll ein Konzept entwickelt werden, wie der Ansatz aus der Arbeit Two Can Keep a Secret, If One of Them Uses Haskell in Elm eingesetzt werden kann. Zu diesem Zweck muss zuerst eine Elm-Anwendung entwickelt werden, die dem wiederkehrende Beispiel aus Two Can Keep a Secret, If One of Them Uses Haskell entspricht.

Modellierung von Wahlen

In diesem Projekt soll eine bestehende Elm-Anwendung erweitert werden. Die Anwendung wird genutzt, um Kennwerte von Wahlsystemen zu berechnen. Ein Beispiel für ein solches Wahlsystem ist der Ministerrat der europäischen Union. Eine Wahl besteht dabei aus einer Menge von Spielern, die jeweils ein Gewicht erhalten. Außerdem gibt es eine sogenannte Quota, die beschreibt, wie viele der Stimmen zusammenkommen müssen, damit die Wahl positiv entschieden wird. Wenn sich eine Koalition von Spielern findet, deren Gewichte zusammen mindestens die Quota erreichen, wird eine Entscheidung angenommen. Das Legislative Bargaining Lab stellt einen Prototypen der Implementierung zur Verfügung. Diese Anwendung soll verbessert und erweitert werden.

Elm auf Microcontrollern

In diesem Projekt soll eine Elm-Anwendung auf einem Microcontroller ausgeführt werden. Microcontroller haben häufig eine Reihe von Sensoren und reagieren darauf, wenn einer dieser Sensoren Daten empfängt. Eine solche Anwendung passt grundsätzlich gut in das reaktive Muster einer Elm-Anwendung. Daher soll eine reaktive Architektur entwickelt werden, die sich zur Programmierung von Microcontrollern eignet. Um diesen Ansatz zu testen, soll mit Hilfe des Frameworks Espruino eine einfache Elm-Anwendung auf einem Microcontroller ausgeführt werden. Espruino ist ein JavaScript-Interpreter, der auf einigen einfachen Microcontrollern läuft. Außerdem bietet Espruino Schnittstellen zu den wichtigsten Funktionen des Microcontrollers.

Processing für Elm

In diesem Projekt soll die Idee der Programmiersparche Processing auf die Programmiersprache Elm übertragen werden. Dabei geht es nicht darum, die gleiche Funktionalität bereitzustellen oder eine Anbindung umzusetzen sondern eine Programmiersprache zur Verfügung zu stellen, die für Designer und Künstler leicht zugänglich ist. Der Ansatz soll auf den Ideen von domänenspezifischen Sprachen aufbauen, um den Fachexperten eine einfache Nutzung der Sprache zu erlauben. Das Projekt p5.js verfolgt einen ähnlichen Ansatz, in Form einer JavaScript-Bibliothek. Bei diesem Projekt ist insbesondere interessant, ob eine pure funktionale Programmiersprache wie Elm für diese Art der Anwendung gut oder schlecht geeignet ist.

Elm-Native-UI

In diesem Projekt soll die Elm-Bibliothek Elm-Native-UI, die auf der JavaScript-Bibliothek React Native aufsetzt, genutzt werden, um eine Anwendung für die Platformen iOS und Android in Elm zu entwickeln.

Elm-VR

In diesem Projekt soll die Elm-Bibliothek elm-aframe, die auf der JavaScript-Bibliothek A-Frame aufsetzt, genutzt werden, um eine Anwendung im Bereich Virtual Reality in Elm zu entwickeln. Der Artikel Easy VR with Elm and A-Frame gibt einen kurzen Einblick in die Nutzung der Bibliothek.

Spiel in Elm

In diesem Projekt soll ein einfaches Spiel in Elm implementiert werden.

Vorträge

Wenn Sie eine der wissenschaftlichen Arbeiten vorstellen, sollten Sie auch einen Bezug zur Programmiersprache Elm herstellen. Das heißt, Sie sollten vorstellen, welche Bibliotheken es in diesem Bereich für Elm gibt bzw. was die Ergebnisse der Arbeit für die Programmiersprache Elm bedeuten.

Theorems for free! (1989)

Die Arbeit Theorems for free! stellt die Idee der freien Theorem vor. Freie Theoreme sind Aussagen über funktionale Programme, die allein vom Typ einer Funktion abgeleitet werden können. Diese Aussagen hängen im Wesentlichen mit der Tatsache zusammen, dass polymorphe Funktionen keine Werte des polymorphen Typs erfinden können. Da eine Funktion außerdem keine Seiteneffekte ausführen kann, erhält man vergleichsweise starke Aussagen über polymorphe Funktionen, ohne deren Implementierung zu kennen. Die Arbeit war sehr einflussreich und freie Theoreme werden in vielen Bereichen genutzt, um Aussagen über funktionale Programme zu beweisen.

A short cut to deforestation (1993)

Die Arbeit A short cut to deforestation stellt einen Ansatz zur deforestation vor. Bei der Programmierung in einer funktionalen Sprache werden sehr viele Zwischendatenstrukturen erzeugt. Wenn wir zum Beispiel zuerst die Funktion map und im Anschluss die Funktion filter auf eine Liste anwenden, wird durch map eine Liste erzeugt, die durch filter wieder konsumiert wird. Compiler-Optimierungen, die die Erzeugung solcher Zwischendatenstrukturen verhindern, bezeichnet man als deforestation. In dieser Arbeit wird einer der ersten Ansätze für deforestation präsentiert, der auch heute noch Verwendung findet.

A system of constructor classes: overloading and implicit higher-order polymorphism (1995)

Die Arbeit A system of constructor classes: overloading and implicit higher-order polymorphism stellt eine der wichtigsten Abstraktionsmöglichkeiten vor, die Elm fehlt, aber Programmiersprachen wie Haskell zur Verfügung stellen, Typkonstruktorklassen. Dieses Konzept kann zum Beispiel genutzt werden, um die Implementierung eines Funktors für verschiedene Datentypen durch eine überladene Funktion zu abstrahieren. Typkonstruktorklassen sind außerdem die Grundlage für eine der berühmtesten und berüchtigsten Abstraktionen der Programmiersprache Haskell, Monaden.

Domain-specific languages (1997)

Die Arbeit Domain-specific languages stellt die Idee einer domänenspezifischen Sprache vor. Dabei wird eine einfache und eingeschränkte Programmiersprache entwickelt, die von Personen mit Domänenwissen genutzt wird. Eine Variante der domänenspezifischen Sprachen sind die eingebetteten domänenspezifischen Sprachen (EDSL). Dabei wird für die Sprache kein eigener Compiler entwickelt, sondern die Sprache wird in eine Host-Sprache eingebettet. Die Arbeit Combining Deep and Shallow Embedding for EDSL beschreibt die zwei Möglichkeiten zur Einbettung einer domänenspezifischen Sprache, ein shallow und ein deep embedding.

Monadic parsing in Haskell (1998)

Die Arbeit Monadic parsing in Haskell stellt die Idee der Parserkombinatoren vor. Ein Parser ist eine Funktion, die eine Zeichenkette analysiert, zerlegt und in einen strukturierten Datentyp umwandelt. Parserkombinatoren bieten die Möglichkeit einen solchen Parser einfach zu definieren, indem die zur Verfügung gestellten Kombinatoren verwendet werden. Parserkombinatoren sind ein Beispiel für eine embedded domain specific language (EDSL), das heißt, für eine Sprache für einen ganz spezifischen Zweck, die in einer anderen Sprache eingebettet ist. Die Idee der Parserkombinatoren wurde inzwischen in einer Vielzahl von Programmiersprachen implementiert, so gibt es Bibliotheken für Parserkombinatoren zum Beispiel in Java, C#, Ruby, C++, Python und JavaScript.

QuickCheck: a lightweight tool for random testing of Haskell programs (2000)

Die Arbeit QuickCheck: a lightweight tool for random testing of Haskell programs stellt eine Bibliothek mit dem Namen QuickCheck und das Konzept des property-based testing vor. Während bei einem Unit-Test normalerweise eine Eigenschaft für ein paar Beispieleingaben getestet wird, wird beim property-based testing eine Eigenschaft für sehr viele, zufällig generierte Eingaben getestet. Auf diese Weise kann eine Funktion ohne großen Aufwand für eine Vielzahl von Testfällen getestet werden. Die Erzeugung der Testeingaben wird durch die Struktur des Typs der Eingaben geleitet. Die Idee des property-based testing hat inzwischen Einzug in fast statisch getypten Programmiersprachen gehalten. So gibt es Reimplementierungen des QuickCheck-Ansatzes in Programmiersprachen wie Scala, Java, Swift und Objective-C.

Generics for the masses (2004)

Die Arbeit Generics for the masses stellt einen Ansatz zur generischen Programmierung in Haskell vor. Die generische Programmierung erlaubt es, eine einzelne Funktion zu definieren, die auf einer Vielzahl von Typen genutzt werden kann. Im Unterschied zu einer polymorphen Funktion verhält sich eine generische Funktion nicht für alle Typen gleich, sondern trifft Entscheidungen abhängig von der Struktur des Typs. Typische Beispiele für generische Funktionen sind etwa die strukturelle Gleichheit von Werten oder die Funktion toString, die eine String-Darstellung eines Wertes liefert. Solche Funktionen können mit Hilfe der generischen Programmierung ein einziges Mal definiert und dann für verschiedene algebraische Datentypen genutzt werden.

Probabilistic functional programming in Haskell (2006)

Probabilistische Programmiersprachen erlauben es, einfach die Berechnung von Wahrscheinlichkeiten zu modellieren. Solche Programmiersprachen werden zum Beispiel im Bereich der künstlichen Intelligenz zur Modellierung von neuronalen Netzen genutzt. Die Arbeit Probabilistic functional programming in Haskell demonstriert, wie man in Haskell eine Bibliothek zur probabilistischen Programmierung einfach mit Hilfe einer monadischen Abstraktion implementieren kann. Die Bibliothek ist ein Beispiel für eine embedded domain specific language (EDSL), das heißt, für eine Sprache für einen ganz spezifischen Zweck, die in eine andere Programmiersprache eingebettet ist.

Liquidhaskell: Experience with refinement types in the real world (2014)

Liquidhaskell ist eine Implementierung von refinement types für Haskell. Ein Typsystem mit refinement types erlaubt es, sehr viel stärkere Aussagen über Programme zu treffen als es mit Typsystemen wie dem von Elm möglich ist. So ist es zum Beispiel möglich im Typ die Länge einer Liste auszudrücken. Damit erhält man zum Beispiel die Garantie, dass man nie versucht, auf einen Index außerhalb einer Liste zuzugreifen. Typsysteme wie refinement types eignen sich gut, um sicherheitskritische Anwendungen zu entwickeln. Die Arbeit Liquidhaskell: Experience with refinement types in the real world stellt die Haskell-Bibliothek an einer Reihe von Beispielen vor und zeigt, welche Arten von Garantieren, man mit Hilfe dieser Typen über Programme erhält. Der Blog bietet eine ganze Reihe von Artikeln mit motivierenden Beispielen, wie man refinement types nutzen kann, um Garantien über Programme zu erhalten.

Propositions as types (2015)

In der Arbeit Propositions as types geht es um den Zusammenhang zwischen Logik und den Typen in einer funktionalen Programmiersprache. Der Artikel ist in den Communications of the ACM erschienen, einer monatlichen Serie von Artikeln der amerikanischen Gesellschaft für Informatik. Daher adressiert der Artikel Personen aus allen Bereichen der Informatik. Das Thema an sich ist eher abstrakt und beleuchtet einen sehr grundlegenden Zusammenhang zwischen zwei formalen Systemen. Daher erfordert er ein Grundverständnis von formalen Systemen in der Informatik. Der Artikel illustriert, warum jeder Programmier, der in einer statisch getypten Sprache wie Elm oder Java programmiert, tagtäglich mathematische Beweise führt.

All Sorts of Permutations (2016)

Die Arbeit All Sorts of Permutations demonstriert einen Zusammenhang zwischen Sortieren und Permutieren in Haskell. Sortieren beschreibt dabei die Aufgabe mit Hilfe einer Vergleichsfunktion eine Liste von Werten in die richtige Reihenfolge zu bringen. Beim Permutieren wird für eine Liste jede mögliche Reihenfolge der Liste generiert. Der Zusammenhang basiert darauf, dass man zwei verschiedene Instanzen einer monadischen Funktion betrachtet. Dieser Zusammenhang ist nicht auf Sortieren und Permutieren beschränkt, sondern lässt sich auch auf andere Funktionen anwenden, zum Beispiel auf die Funktion filter.