|
|
# Master-Projekt im Sommersemester 2017
|
|
|
|
|
|
---
|
|
|
|
|
|
**Inhaltsverzeichnis:**
|
|
|
1. [Problem- und Zielbeschreibung](#problem-und-zielbeschreibung)
|
|
|
2. [Allgemeine Informationen](#allgemeine-informationen)
|
|
|
3. [Expertengebiete](#expertengebiete)
|
|
|
|
|
|
---
|
|
|
|
|
|
## Problem- und Zielbeschreibung
|
|
|
|
|
|
Wenn man eine neue Programmiersprache erlernt bzw. Studierende diese Sprache beibringt, möchte man zunächst eigentlich nicht auf den vollen Umfang dieser Sprache zugreifen.
|
|
|
|
|
|
Stattdessen sind Vorlesungen zum Erlernen neuer Programmiersprachen derart aufgebaut, dass zunächst simple Konstrukte wie die Definition einfacher Funktionen eingeführt werden und dann nach und nach und mit dem wachsenden Programmierkenntnissen der Studierenden komplexere Sprachfeatures betrachtet werden.
|
|
|
|
|
|
Beispielhaft kann man sich dazu den Aufbau des Abschnitts über Funktionale Programmierung der Vorlesung [Fortgeschrittene Programmierung]() ansehen.
|
|
|
Dieses Kapitel der Vorlesung gibt eine Einführung in die funktionale Programmiersprache Haskell. Dabei werden zunächst einfache Ausdrücke und Funktionen vorgestellt, dann erfährt man, wie man selbst (polymorphe) Datentypen sowie Funktionen über diesen (mittels Pattern Matching) definieren kann.
|
|
|
Aufbauend auf diesen Grundlagen werden dann schrittweise speziellere Sprachfeatures wie das Programmieren mit Funktionen höherer Ordnung, Typklassen sowie die Ausnutzung der sogenannten lazy evaluation vorgestellt.
|
|
|
|
|
|
Leider wird diese stufenweise Einführung in eine neue Programmiersprache in der Regel nicht durch die Interpreter bzw. Übersetzer dieser Sprache unterstützt.
|
|
|
Diese berücksichtigen von Anfang an den vollen Sprachumfang und geben auch entsprechende (Typ-)Fehlermeldungen aus.
|
|
|
Für Studierende, die diese Sprache gerade erst erlernen, sind diese Fehlermeldungen oftmals eher verwirrend als hilfreich, da sie die entsprechenden Konzepte der Sprache einfach noch nicht kennen. Haskell bzw. der GHC liefern hier einige gute Beispiele im Zusammenhang mit Typklassen und Überladung von Funktionen.
|
|
|
|
|
|
Das [DrRacket-System](https://racket-lang.org/) für die Programmiersprache Scheme ist hingegen ein gutes Beispiel dafür, wie eine IDE (mit integriertem Interpreter) das stufenweise Erlernen einer Programmiersprache unterstützen kann. Diese IDE bietet verschiedene Sprachstufen, wobei auf den unteren Stufen komplexere Sprachfeatures (wie die Konstrukte zur Deklaration eigener Datenstrukturen oder das Programmieren mit Seiteneffekten) zunächst versteckt werden. Bei der syntaktischen Analyse des Programms werden diese Konstrukte auf den unteren Stufen einfach nicht erkannt.
|
|
|
Somit können Einsteiger zunächst die Grundlagen der Sprache erlernen, ohne Gefahr zu laufen, aus Versehen fortgeschrittene Features zu verwenden und so möglicherweise verwirrende Fehlermeldungen zu erhalten.
|
|
|
|
|
|
Weiterhin stellt das DrRacket-System Konstrukte zur Angabe von Testfällen bereit, die bei der Interpretation des Programms ausgeführt werden.
|
|
|
Auf diese Weise werden Studierende gleich daran herangeführt, ihre Programme zu testen.
|
|
|
Haskell bietet mit QuickCheck zwar auch die Möglichkeit, einfache Testfälle anzugeben bzw. Eigenschaften von Funktionen zu testen. Allerdings benötigt man für die Verwendung von QuickCheck auf selbst definierten (polymorphen) Datentypen bereits Sprachfeatures, die man erst als etwas fortgeschrittenerer Haskell-Programmierer kennt. Für Einsteiger ist die Verwendung von QuickCheck daher leider eher ungeeignet.
|
|
|
|
|
|
Ziel dieses Masterprojekts ist es daher ein DrRacket-ähnliches Werkzeug für Haskell zu entwickeln.
|
|
|
Dieses Werkzeug soll verschiedene Sprachstufen für Haskell (angelehnt an das Skript zur Vorlesung Fortgeschrittene Programmierung) bereitstellen.
|
|
|
Auf niedrigeren Sprachstufen sollen fortgeschrittene Sprachkonstrukte wie beispielsweise Typklassen zunächst versteckt sein.
|
|
|
Auch die Typfehlermeldungen auf diesen Stufen sollen einsteigerfreundlicher sein als die des GHC.
|
|
|
Weiterhin soll auf den unteren Sprachebenen ein ähnliches Konstrukt wie `check-expect` aus dem DrRacket-System angeboten werden, mit dem Studierende einfache Testfälle angeben können, die dann auch ausgeführt werden. Intern könnten diese Tests wieder mit Hilfe von QuickCheck realisiert werden.
|
|
|
|
|
|
Als Hilfsmittel für die Umsetzung wollen wir die [Haskell-Source-Extensions](http://hackage.haskell.org/package/haskell-src-exts) einsetzen. Diese stellen einen Haskell-Parser sowie eine AST-Repräsentation von Haskell-Modulen zur Verfügung.
|
|
|
Unter Verwendung dieses ASTs sollen dann stufenspezifische semantische Analysen in Haskell implementiert werden.
|
|
|
Zur Visualisierung von Fehlern/Warnungen in Texteditoren wollen wir auf das [LINT-Format](https://www.thinkage.ca/english/gcos/expl/lint/manu/manu.html) zurückgreifen.
|
|
|
In diesem Quasi-Standard-Format werden Quelltexte mit zusätzlichen Informationen annotiert (Positionsangaben, Fehlermeldungen, Warnungen). Durch Einbindung eines entsprechenden Linters in einem Texteditor kann der annotierte Quelltext dann angezeigt werden.
|
|
|
|
|
|
## Allgemeine Informationen
|
|
|
|
|
|
1. [Projektteilnehmer](kontakt)
|
|
|
2. [Protokolle](protokolle)
|
|
|
|
|
|
## Expertengebiete
|
|
|
|
|
|
1. [Haskell Source Extensions](haskell-src-exts) - Marc
|
|
|
2. [Typprüfung und -inferenz](type-check) - Janina und Jan
|
|
|
3. [LINT-Format und Linter](linter) - Jonas
|
|
|
4. [Helium](helium) - Niels |
|
|
\ No newline at end of file |