Mercury
De Viquipèdia
Mercury és un llenguatge de programació lògic-funcional dirigit a aplicacions del món real. Està desenvolupat a la Universitat de Melbourne sota la supervisió de Zoltan Somogyi. La primera versió va ésser desenvolupada per Fergus Henderson, Thomas Conway i Zoltan Somogyi i va ser editada l'Abril de 1995.
Mercury té diverses característiques adreçades a una millor enginyeria de software. És compilat i no interpretat. Presenta un sofisticat i estricte sistema de tipus i modes. Els seus autors proclamen que aquestes característiques, combinades amb la natura abstracta de la programació lògica i la divisió en mòduls, faciliten l'escriptura ràpida de programes fiables.
Mercury és més pur i més declaratiu que Prolog, doncs no té les instruccions extra-lògiques de Prolog tal com "cut" (que evita el "backtracking") i la entrada/sortida imperativa. Això permet una millor optimització dels programes però fa que la codificació d'algorismes seqüencials sigui més complicada. Degut a les optimitzacions, els programes escrits en Mercury són significativament més ràpids que els equivalents escrits en Prolog.
Mercury està disponible per a la majoria de plataformes Unix, Mac OS X, i MS-Windows.
Programes notables escrits en Mercury inclouen el compilador Mercury, la base de dades deductiva Aditi i el programa de formateig Prince XML.
[edita] Rera-fons
Mercury té diversos rera-fons (ang.:back-ends), que permeten compilar codi Mercury en els següents llenguatges:
- Llenguatge C de baix nivell per a GNU Compiler Collection (GCC) (el rera-fons original de Mercury)
- Llenguatge C d'alt nivell
- Common Intermediate Language (IL) per a .NET (CLR)
- Java bytecode per a JVM.
- Assembler via el rera-fons GCC.
(els tres darrers encara de qualitat incompleta)
Mercury també s'ha emprat en Aditi, una base de dades deductiva desenvolupada a la Universitat de Melbourne.
Mercury té una interfase de llenguatges forans, que permet enllaçar amb codi escrit en altres llenguatges de programació. Són els següents:
Rera-fons | Llenguatge(s) forans |
---|---|
C (both levels) | C |
IL | IL, C# or Managed C++ |
Java | Java |
Per a d'altres llenguatges cal encadenar-los des dels mencionats. Tantmateix això vol dir que el codi forà pot caldre reescriure'l per als diferents rera-fons, altrament la portabilitat entre rera-fons es perdria.
[edita] Example: Hola món
Hola món en Mercury:
:- module hello. :- interface. :- import_module io. :- pred main(io::di, io::uo) is det. :- implementation. main(!IO) :- io.write_string("Hola, Món!\n", !IO).
(adaptat del tutorial de Ralph Becket Tutorial de Mercury) (anglès).
[edita] Enllaços externs
- Pàgina Oficial de Mercury (anglès)
- LiteratePrograms (anglès) wiki d'exemples de programació literària amb algorismes en diversos llenguatges.