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.