Frege ist eine rein funktionale, nicht-strikte Programmiersprache für die JVM — im Geiste ein „Haskell für die JVM“. Entwickelt wurde sie von Ingo Wechsung, benannt nach dem deutschen Mathematiker, Logiker und Philosophen Gottlob Frege (1848–1925). Frege-Programme werden zu Java-Quellcode kompiliert und laufen dann wie normale Java-Anwendungen auf der virtuellen Maschine.
Besonderheiten
- Rein funktional: Funktionen ohne Seiteneffekte, Ausnahmen und Ein-/Ausgabe laufen über Monaden (IO-Typ), genau wie in Haskell.
- Nicht-strikte (lazy) Auswertung, Typklassen, Pattern Matching und Typinferenz — vertraute Haskell-Syntax.
- Der Compiler ist selbst in Frege geschrieben und generiert Java-Quellcode, der anschließend von javac übersetzt wird — eine Seltenheit unter den JVM-Sprachen.
- Nahtloser Aufruf von Java-Bibliotheken aus Frege-Code heraus.
Wichtige Befehle
java -jar fregec.jar -d bin -target 1.8 Hello.fr # kompilieren
java -Xss1m -cp bin:fregec.jar Hello # ausfuehren
java -jar frege.jar # REPL starten
Die Option -d setzt das Ausgabeverzeichnis, -target die Java-Version. Im REPL helfen Kommandos wie :load, :type und :quit beim Experimentieren.
Einordnung
Frege ist eine von mehreren Sprachen, die neben Java auf der JVM laufen — funktionale Vertreter sind außerdem Clojure und Scala. Wer rein funktional mit statischer Typisierung arbeiten will, findet in Frege eine konsequente Alternative. Eng verwandt sind die JVM-Sprachen Ceylon und Fantom.