Mercury (Programmiersprache)
# Mercury (Programmiersprache)

Mercury ist eine stark an Prolog angelehnte Programmiersprache. Sie vereint Elemente aus der funktionalen und der logischen Programmierung. Die erste Version wurde von Fergus Henderson, Thomas Conway und Zoltan Somogyi entwickelt und am 8. April 1995 veröffentlicht.

Mercury ist eine „reinere“, und damit stärker deklarative Sprache als Prolog, weil es im Gegensatz zu Prolog keine „nicht-logischen“ Eigenschaften hat, wie den Cut-Operator (ein Prolog-Konstrukt, das Backtracking verhindert) oder imperative Eingabe und Ausgabe. Dies macht die Programmierung sequentieller Algorithmen etwas unhandlich, erleichtert jedoch die Optimierung der Programme. Damit kann deutlich schnellerer Code erzeugt werden, als es mit Prolog möglich ist.

Mercury hat einige Eigenschaften für eine bessere Softwaretechnik, es wird kompiliert statt interpretiert, wie es sonst bei logischen Programmiersprachen üblich ist, und realisiert ein fortgeschrittenes, striktes Typ- und Mode-System. Die Autoren behaupten, diese Eigenschaften, zusammen mit der abstrakten Natur der logischen Programmierung, beschleunigten die Erstellung zuverlässiger Programme. Mercurys Modul-System ermöglicht die Unterteilung in abgeschlossene Einheiten, was in der Vergangenheit ein Problem logischer Programmierung darstellte. (Wobei einige Prolog-Implementierungen ebenfalls ein Modul-System einführten.) Ein- und Ausgabe wird durch Uniqueness types verwirklicht.

Mercury verfügt über mehrere Backends wie „low-level C“ (das originale Mercury-Back-end), „high-level C“, Microsofts IL für das .Net-Framework, Suns JVM und Assembler unter Verwendung des gcc-Back-ends, wobei die letzten drei Back-ends derzeit noch Alpha- oder Beta-Status haben. Mercury wird an der Universität Melbourne unter der Leitung von Zoltan Somogyi entwickelt und ist für die meisten Unix-Plattformen, für Mac OS X und mit Hilfe von Cygwin und MinGW auch für Microsoft Windows verfügbar.

## Beispielprogramm in Mercury

Hello World:

(nach Ralph Beckets)

