(Plan) Oberseminar

Fortgeschrittene Konzepte in Programmiersprachen

Das OS baut auf den VL “Deklarative/Fortgeschrittene Programmierung” (Bachelor) sowie “Prinzipien von Programmiersprachen” (Master) auf und ergänzt diese um aktuelle und anspruchsvolle Themen.

Im wesentlichen geht es um verschiedene Erweiterungen von Typsystemen für Programmiersprachen. Das softwaretechnische Ziel der Typisierung ist, die Spezifikation eines (Unter-)Programmes durch seine Typdeklaration auszudrücken und die Korrektheit (die Erfüllung der Spezifikation) durch Typprüfung statisch zu garantieren.

Als bekannt werden vorausgesetzt: algebraische Datentypen, Typen höherer Ordnung, generische Polymorphie und deren Einschränkung durch Typklassen. Wir werden das (sehr) kurz wiederholen und betrachten danach Erweiterungen, zum Beispiel

  • Tests und Test-Frameworks (typgesteuerte Testdatenerzeugung, Quickcheck, Smallcheck)
  • Kategorien (Funktoren, Monaden, Konstruktorklassen, Applicative)
  • Theorems for Free
  • generalized algebraic data types
  • Mehrparameter-Typklassen, functional dependencies, associated types, type families
  • Lineare Typen, Uniqueness Typing (in Clean)
  • Ownership von Verweisen (in Rust)
  • Sprachen mit Dependent types (Agda, Idris)
  • Simulation von Dependent types (type level arithmetics)
  • generische Programmierung (compiletime- und runtime-reflection)
  • compile-time code generation (template Haskell)
  • Anwendung der genannten Konzepte in ausgewählten Haskell-Bibliotheken (lens, yesod), in anderen Programmiersprachen (Monaden in F#, Lens in Scala)
  • graduelle Typsysteme für nicht statisch typisierte Sprachen (Typescript,…)

Als Beispiele verwenden wir vorwiegend funktionale Programmiersprachen. Das liegt daran, daß aktuelle Forschungen zu Typsystemen eben vorwiegend dort stattfinden. Nach Forschungs- und Erprobungsphase werden solche Erweiterungen auch in “traditionelle” Sprachen übernommen. Die OS-Teilnehmer lernen die Neuerungen jedoch an der Quelle kennen.

Die OS-Teilnehmer sollen jeweils:

  • wissenschaftliche Original-Publikationen lesen, verstehen, zusammenfassen (Text) und präsentieren (Folien, Vortrag)
  • sowie Code-Beispiele vorführen

Dazu sind zu absolvieren:

  • eine Konsultation 3 Wochen vor Vortragstermin
  • Abgabe einer Zusammenfassung (1-2 Seiten Text) eine Woche vor Vortrag, diese wird an die anderen Teilnehmer verteilt
  • Präsentation und Diskussion im Seminar
  • Überarbeitung bis max. 1 Woche nach Vortrag

allgemeines zur Bewertung von Oberseminaren