Mercur (limbaj de programare)

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 11 august 2016; verificările necesită 4 modificări .
Mercur
Clasa de limba logic , funcțional
Aparut in 1995
Autor Zoltan Somogyi
Dezvoltator Universitatea din Melbourne
Extensie de fișier .m
Eliberare 22/01 (31 martie 2022 ) ( 31.03.2022 )
Tip sistem strict , static , polimorf
Implementări majore Melbourne Mercury Compiler
A fost influențat Prolog , Haskell
Licență GPL pentru compilator, LGPL pentru biblioteca standard
Site-ul web mercurylang.org

Mercury  este un limbaj de programare logic funcțional puternic tipizat , conceput pentru a rezolva următoarele două probleme care apar atunci când se utilizează limbajul de programare logic clasic Prolog :

  1. problema de performanta. Implementările moderne ale limbajelor de programare logică sunt inferioare ca performanță față de implementările limbajelor de programare de tip imperativ .
  2. problema de depanare. Implementările limbajelor de programare logică efectuează mai puține verificări la timp de compilare decât implementările limbajelor de programare de tip imperativ. Acest lucru forțează programatorul să găsească erori pe cont propriu și fără niciun ajutor semnificativ din partea depanatorului.

Limba a fost dezvoltată la Universitatea din Melbourne . Prima versiune a fost lansată de Fergus Henderson, Thomas Conway și Zoltan Somogyi pe 8 aprilie 1995 .

Caracteristici

Sintaxa Mercury este parțial moștenită de la Prolog, sistemul de tipuri este similar cu Haskell . Acesta este un limbaj pur declarativ , dezvoltatorii au eliminat complet toate caracteristicile imperative din acesta, ceea ce a făcut posibilă îmbunătățirea capabilităților de optimizare încorporate în compilator . Numele Mercur este dat în onoarea zeului vitezei Mercur și reflectă concentrarea asupra obținerii de programe de mare viteză. Operațiile care ar evita în mod normal o abordare pur declarativă, cum ar fi I/O , sunt exprimate în Mercur cu constructe declarative folosind tipuri liniare .

Implementare

Compilatorul limbajului Mercury este scris în limbajul propriu-zis. Înainte ca compilatorul Mercury să se poată compila singur, a fost folosit limbajul Prolog . Este distribuit în conformitate cu termenii licenței GPL și funcționează pe toate sistemele de operare moderne. Este posibilă traducerea codului în multe limbaje de programare populare, cum ar fi: C , Java , Erlang , IL pentru platforma .NET .

Din 2010, Project Mercury a avut un ciclu de lansare de 6 luni, în care numărul versiunii majore corespunde anului lansării, numărul versiunii minore corespunde lunii în care au început lucrările la lansare. Versiunile anterioare aveau numere precum 0.12, 0.13... iar timpul dintre lansările versiunilor stabile a fost foarte lung (aproximativ 3 ani).

Compilatorul Mercury este distribuit pe site-ul oficial în cod sursă, utilizatorii Windows pot folosi și distribuția neoficială winmercury. Acesta este un program de instalare util care instalează MinGW , compilatorul GCC și toate fișierele Mercury necesare într-o formă compilată și configurată. Conține, de asemenea, un fișier HTML Help cu un cuprins și un index la îndemână, precum și un plug-in pentru editorul Vim . Cea mai recentă versiune Mercury până în prezent este 20.01.2.

Exemple

salut lumea :

:- modul salut . :- interfata . : - import_module.io . :- pred main ( io : :di , io : :uo ) este det . :- implementare . principal (! IO ) :- io . write_string ( "Bună ziua, lume!\n" , ! IO ).

Calcularea celui de-al 10-lea număr Fibonacci (în cel mai evident mod) [1] :

:- modul fib . :- interfata . : - import_module.io . :- pred main ( io : :di , io : :uo ) este det . :- implementare . :- import_module int . :- func fib ( int ) = int . fib ( N ) = ( dacă N =< 2 atunci 1 altfel fib ( N - 1 ) + fib ( N - 2 )). principal (! IO ) :- io . write_string ( "fib(10) = " , ! IO ), io . write_int ( fib ( 10 ), ! IO ), io . nl (! IO ). % Ar putea folosi io.format("fib(10) =%d\n", [i(fib(10))], !IO).

Note

  1. Bazat pe tutorialul lui Ralph Becket Mercury Arhivat 21 septembrie 2020 la Wayback Machine

Link -uri