Mercury (programmeringssprog)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 11. august 2016; checks kræver 4 redigeringer .
Merkur
Sprog klasse logisk , funktionel
Dukkede op i 1995
Forfatter Zoltan Somogyi
Udvikler University of Melbourne
Filtypenavn _ .m
Frigøre 22/01 (31. marts 2022 ) ( 31-03-2022 )
Type system streng , statisk , polymorf
Større implementeringer Melbourne Mercury Compiler
Blev påvirket Prolog , Haskell
Licens GPL for compileren, LGPL for standardbiblioteket
Internet side mercurylang.org

Mercury  er et stærkt indtastet funktionelt logisk programmeringssprog designet til at løse følgende to problemer, der opstår, når du bruger det klassiske Prolog logiske programmeringssprog :

  1. ydeevne problem. Moderne implementeringer af logiske programmeringssprog er ringere i ydeevne end implementeringer af programmeringssprog af imperativ-type .
  2. fejlfindingsproblem. Implementeringer af logiske programmeringssprog udfører færre compile-time-tjek end implementeringer af imperativ-type programmeringssprog. Dette tvinger programmøren til at finde fejl på egen hånd og uden væsentlig hjælp fra debuggeren.

Sproget blev udviklet på University of Melbourne . Den første version blev udgivet af Fergus Henderson, Thomas Conway og Zoltan Somogyi den 8. april 1995 .

Funktioner

Mercury-syntaksen er delvist arvet fra Prolog, typesystemet ligner Haskell . Dette er et rent deklarativt sprog, udviklerne fjernede fuldstændigt alle bydende funktioner fra det, hvilket gjorde det muligt at forbedre optimeringsmulighederne indbygget i compileren . Navnet Mercury er givet til ære for guden for speed Mercury og afspejler fokus på at få højhastighedsprogrammer. Operationer, der normalt ville undgå en rent deklarativ tilgang, såsom I/O , er udtrykt i Mercury med deklarative konstruktioner, der anvender lineære typer .

Implementering

Mercury- sprogkompilatoren er skrevet på selve sproget. Før Mercury-kompileren kunne kompilere sig selv, blev Prolog -sproget brugt . Det distribueres under betingelserne i GPL-licensen og fungerer på alle moderne operativsystemer. Det er muligt at oversætte kode til mange populære programmeringssprog, såsom: C , Java , Erlang , IL til .NET -platformen .

Siden 2010 har Project Mercury haft en 6-måneders udgivelsescyklus, hvor det store versionsnummer svarer til udgivelsesåret, det mindre versionsnummer svarer til den måned, hvor arbejdet med udgivelsen begyndte. De tidligere versioner havde tal som 0.12, 0.13... og tiden mellem udgivelser af stabile versioner var meget lang (ca. 3 år).

Mercury-kompileren distribueres på det officielle websted i kildekode, Windows -brugere kan også bruge den uofficielle winmercury-distribution. Dette er et praktisk installationsprogram, der installerer MinGW , GCC-kompileren og alle de nødvendige Mercury-filer i en kompileret og konfigureret form. Den indeholder også en HTML -hjælpefil med en praktisk indholdsfortegnelse og indeks, samt et plug-in til Vim -editoren . Den seneste Mercury-bygning til dato er 20.01.2.

Eksempler

hej verden :

:- modul hej . :- interface . : - import_module.io . :- pred main ( io : :di , io : :uo ) er det . :- implementering . hoved (! IO ) :- io . write_string ( "Hej, verden!\n" , ! IO ).

Beregning af det 10. Fibonacci-tal (på den mest indlysende måde) [1] :

:- modul fib . :- interface . : - import_module.io . :- pred main ( io : :di , io : :uo ) er det . :- implementering . :- import_modul int . :- func fib ( int ) = int . fib ( N ) = ( hvis N =< 2 1 ellers fib ( N - 1 ) + fib ( N - 2 )). hoved (! IO ) :- io . write_string ( "fib(10) = " , ! IO ), io . write_int ( fib ( 10 ), ! IO ), io . nl (! IO ). % Kunne i stedet bruge io.format("fib(10) =%d\n", [i(fib(10))], !IO).

Noter

  1. Baseret på Ralph Beckets Mercury tutorial Arkiveret 21. september 2020 på Wayback Machine

Links