Merkur (programovací jazyk) - Mercury (programming language)
![]() | |
Paradigma | Logika, funkční, objektově orientovaný |
---|---|
Navrhl | Zoltan Somogyi |
Vývojář | University of Melbourne |
Poprvé se objevil | 8. dubna 1995 |
Stabilní uvolnění | 20.06.1 / 3. listopadu 2020 |
Psací disciplína | Silný, statický, polymorfní |
Jazyk implementace | Rtuť |
Plošina | IA-32, x86-64, PAŽE, Sparc64, Jáva, CLI, Erlang / OTP |
OS | Cross-platform: Unix, Linux, Operační Systém Mac, Solaris, FreeBSD, OpenBSD, Okna, Android |
Licence | GPL překladač, LGPL standardní knihovna |
Přípony názvu souboru | .m |
webová stránka | www |
Hlavní, důležitý implementace | |
Melbourne Mercury Compiler | |
Ovlivněno | |
Prolog, Naděje, Haskell |
Rtuť je funkční logické programování jazyk pro skutečné použití. První verze byla vyvinuta na University of Melbourne, Oddělení informatiky, Fergus Henderson, Thomas Conway a Zoltan Somogyi, pod dohledem Somogyi, a vydáno 8. dubna 1995.
Merkur je čistě deklarativní logické programování Jazyk. Souvisí to s oběma Prolog a Haskell.[1] Vyznačuje se silným, statickým, polymorfním typový systém a silný systém a systém determinismu.
Pro většinu je k dispozici oficiální implementace, kompilátor Melbourne Mercury Unix a Unixový platformy, včetně Linux, Operační Systém Mac, a pro Okna.
Přehled
Merkur je založen na logickém programovacím jazyce Prolog. Má stejnou syntaxi a stejné základní pojmy, jako například selektivní lineární rozlišení definitivní klauze (SLD) algoritmus. Lze jej zobrazit jako čistou podmnožinu Prologu se silnými typy a režimy. Jako takový je často srovnáván s předchůdcem, pokud jde o funkce a efektivitu běhu.
Jazyk je navržen pomocí softwarové inženýrství zásady. Na rozdíl od původních implementací Prologu má samostatný sestavení fáze, než aby byly přímo interpretovány. To umožňuje detekovat mnohem širší škálu chyb před spuštěním programu. Vyznačuje se přísným statický typ a režimový systém[1] a modulový systém.
Použitím informací získaných v době kompilace (jako je typ a režim), programy napsané v Merkuru obvykle fungují výrazně rychleji než ekvivalentní programy napsané v Prologu.[2][3] Jeho autoři tvrdí, že Merkur je nejrychlejší logický jazyk na světě, s velkým náskokem.[1]
Merkur je čistě deklarativní jazyk, na rozdíl od Prolog, protože to chybí extra logické Prolog prohlášení jako !
(střih) a rozkazovací způsob vstup výstup (I / O). To umožňuje pokročilé statická analýza programu a optimalizace programu, včetně času kompilace odvoz odpadu,[4] ale může vytvořit určité programovací konstrukce (například přepnout na více možností, s výchozím nastavením)[pochybný ]) těžší k vyjádření. (I když Mercury umožňuje nečistou funkčnost, slouží to hlavně jako způsob volání cizojazyčného kódu. Všechny nečisté kódy musí být výslovně označeny.) Operace, které by obvykle byly nečisté (například vstup výstup ) jsou vyjádřeny pomocí čistých konstruktů v Merkuru pomocí lineární typy navlečením figuríny svět hodnotu prostřednictvím všech příslušných kódů.
Pozoruhodné programy napsané v Merkuru zahrnují kompilátor Mercury a Princ XML formátovač. Softwarová společnost Mission Critical IT také používá Mercury od roku 2000 k vývoji podnikových aplikací a platformu ODASE pro vývoj softwaru založenou na ontologii.[5]
Zadní strany
Merkur má několik back-endů, které umožňují kompilaci kódu Merkuru do několika jazyků, včetně:
Úroveň produkce
- Nízká úroveň C pro Sbírka překladačů GNU (GCC), původní back-end Merkuru
- Vysoká úroveň C.
- Jáva
- C#
- Erlang
Minulost
- Montážní jazyk přes back-end GCC
- Aditi, deduktivní databázový systém vyvinutý také na University of Melbourne. Mercury-0.12.2 je poslední verze podporující Aditi.[Citace je zapotřebí ]
- Společný střední jazyk (CIL) pro .NET Framework
Mercury také obsahuje cizojazyčné rozhraní, které umožňuje propojení kódu v jiných jazycích (v závislosti na zvoleném rozhraní) s kódem Mercury. Možné jsou následující cizí jazyky:
Back-end | Cizí jazyky) |
---|---|
C (obě úrovně) | C |
Jáva | Jáva |
Erlang | Erlang |
IL | Společný střední jazyk (CIL) nebo C# |
K dalším jazykům lze potom připojit jejich voláním z těchto jazyků. To však znamená, že pro různé backendy bude možná třeba několikrát napsat cizojazyčný kód, jinak dojde ke ztrátě přenositelnosti mezi backendy.
Nejčastěji používaným back-endem je původní low-level C back-end.
Příklady
:- modul Ahoj. :- rozhraní. :- import_module io. :- před hlavní(io:: di, io:: uo) je det. :- implementace. hlavní(!IO) :- io.write_string("Ahoj světe!", !IO).
Výpočet 10. Fibonacciho číslo (nejzřejmějším způsobem):[6]
:- modul fib. :- rozhraní. :- import_module io. :- před hlavní(io:: di, io:: uo) je det. :- implementace. :- import_module int. :- func fib(int) = int. fib(N) = (-li N =< 2 pak 1 jiný fib(N - 1) + fib(N - 2)). hlavní(!IO) :- io.write_string("fib (10) =", !IO), io.write_int(fib(10), !IO), io.nl(!IO). % Místo toho může použít io.format ("fib (10) =% d", [i (fib (10))],! IO).
! IO
je "stavová proměnná", což je syntaktický cukr pro dvojici proměnných, kterým jsou při kompilaci přiřazeny konkrétní názvy; například výše je desugared na něco jako:
hlavní(IO0, IO) :- io.write_string("fib (10) =", IO0, IO1), io.write_int(fib(10), IO1, IO2), io.nl(IO2, IO).
Plán vydání
Vydání jsou pojmenována podle roku a měsíce vydání. Aktuální stabilní vydání je 20.06 (30. června 2020). Předchozí verze byly očíslovány 0,12, 0,13 atd. A doba mezi stabilními verzemi může být až 3 roky.
Často existuje také snímek vydání dne (ROTD) skládající se z nejnovějších funkcí a oprav chyb přidaných do posledního stabilního vydání.
Podpora IDE a editorů
- Vývojáři poskytují podporu pro Vim
- Knihovna Flycheck pro Emacs
- K dispozici je plugin pro Zatmění IDE
- K dispozici je plugin pro NetBeans IDE
Viz také
- Kari, další funkční logický jazyk
- Alice, dialekt jazyka Standardní ML
- Logtalk, jazyk, objektově orientované rozšíření Prologu, které se kompiluje až k Prologu
- Oz / Mozart, multiparadigmový jazyk
- Vizuální prolog, jazyk, silně typované objektově orientované rozšíření Prologu, s novou syntaxí
Reference
- ^ A b C Projekt Merkur - motivace
- ^ Merkurský projekt - měřítka
- ^ Somogyi, Zoltan; Henderson, Fergus; Conway, Thomas (říjen – prosinec 1996). „Algoritmus provádění Merkuru: efektivní čistě deklarativní logický programovací jazyk“. Journal of Logic Programming. Mercurylang.org. 29 (1–3): 17–64. CiteSeerX 10.1.1.46.9861. doi:10.1016 / S0743-1066 (96) 00068-4. Citováno 2008-08-30.
- ^ Mazur, Nancy (květen 2004). Kompilační sběr odpadu pro deklarativní jazyk Merkur (PDF) (Teze). Katholieke Universiteit Lovaň.
- ^ Mission Critical IT
- ^ Převzato z Výukový program Ralph Becket pro Merkur