Python ist eine dynamisch typisierte Programmiersprache mit einem statischen statischen Typchecker names mypy. In einem aktuellen Python Enhancement Proposal (PEP 622, PEP 634) wird ein Syntaxkonstrukt vorgeschlagen, welches Structural Pattern Matching zur Sprache hinzufügt. Folgend ist ein Beispiel für die Anwendung:
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
def whereis(point: Point):
match point:
case Point(0, 0):
print("Origin")
case Point(0, y):
print(f"Y={y}")
case Point(x, 0):
print(f"X={x}")
case Point(x, y) if y > 3:
print("Somewhere else")
Ein wichtiges Thema bei Structural Pattern Matching ist die Exhaustiveness der Pattern, also die Frage, ob alle möglichen Belegungen der Match-Variable abgedeckt sind (unter der Annahme der Wohltypisiertheit). Im Beispiel ist dies nicht der Fall, da Fälle wie Point(1, 1)
offensichtlich nicht abgedeckt werden. Dies ist oft ein Zeichen für einen Programmierfehler.
Aufgabe:
Für Haskell wurde im letzten Jahr ein verbesserter Algorithmus zur Erkennung der Exhaustiveness entwickelt. Die Aufgabe dieser Arbeit ist nun, diesen Algorithmus für Python zu adaptieren und auf Basis von mypy zu implementieren.
Voraussetzungen
Erfahrung mit Python ist hierbei hilfreich.
Schlüsselworte
Python, Pattern Matching
Veröffentlichungen
Betreuer