© Excellent backgrounds/Shutterstock.com
Frege - konsequent funktionale Programmierung

Ein Haskell für die JVM


Frege ist ein Haskell für die JVM. Man programmiert nicht mit Objekten, sondern mit Funktionen. Reine Funktionen haben keine beobachtbaren Effekte. Sie nehmen unveränderliche Werte entgegen und geben einen unveränderlichen Wert zurück. Das macht den Code in vielen Dimensionen robust – vor allem für den nebenläufigen und parallelen Einsatz. Das Typsystem kann die Reinheit von Funktionen zur Compile-Zeit zusichern. Das macht Frege einzigartig auf der JVM.

Neue Sprachen auf der JVM brauchen eine Existenzberechtigung, ein Alleinstellungsmerkmal, und für Frege ist das die vollständige Überwindung der imperativen Programmierung durch Funktionen. Traditionell programmieren wir mit veränderlichem Zustand. Das haben wir so gelernt, und wir haben uns so sehr daran gewöhnt, dass uns kaum noch auffällt, wie sehr wir uns damit selbst das Leben schwer machen.

Das Grundproblem der traditionellen Programmierung wird schon bei einer der ersten Aufgaben deutlich, die Programmieranfänger bewältigen müssen. Was passiert hier?

a = 1 b = 2 c = b b = a a = c

Die meisten werden erkannt haben, was dieses Stückchen Code bewirkt: Es vertauscht a und b. Stimmt das auch oder habe ich mich vertan? Ehrlich gesagt habe ich mir selbst nicht getraut und habe es gleich noch einmal verifiziert. Ist das nicht furchtbar – bei so einer trivialen Aufgabe? Das Problem ist nicht, dass wir uns ein gedankliches Modell von drei Speicherzellen machen müssen. Das ist ok. Schwierig wird es, weil sich das Modell mit jeder Zuweisung ändert:

a

b

c

1

-

-

1

2

-

1

2

2

1

1

2

2

1

2

Zuweisungen führen das Konzept von Zeit ein: Die Welt vor und die Welt nach der Zuweisung. Dadurch wird die Reihenfolge der Zuweisungen relevant. Fast jede Umordnung der Zuweisungen führt zu einem falschen Ergebnis.

Man muss sich vier verschiedene Belegungen merken. Vier Belegungen mal drei Zellen machen zwölf Zustände. Das übersteigt schon mein Kurzzeitgedächtnis. Zusätzlich muss man diesen Code isolieren. Während der Umstellung darf niemand anders die Speicherzellen verändern oder auch nur anschauen. Als Programmierer lernen wir mit diesen Schwierigkeiten umzugehen und Mittel des Software Engineering einzusetzen, um den Schaden in Grenzen zu halten (Code in Objekten/Methoden verbergen, c nach temp umbenennen usw.). Die Zähmung dieses Biests macht einen Großteil unserer täglichen Arbeit aus, und oft genug überschätzen wir unsere Cleverness und das Biest gewinnt. Dann brauchen wir den Debugger, um Wertänderungen über die Zeit ...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang