Mercury — це мова , створена для реального використання. Перша версія була розроблена в університеті Мельбурна, факультеті комп'ютерних наук, Фергусом Гендерсоном, Томасом Конвейем і Золтаном Шомодьї, під керівництвом Шомодьї. Вона була випущена 8 квітня 1995 року.
Mercury | |
---|---|
Парадигма | Логічна, функціональна, об'єктно-орієнтована[] |
Дата появи | 8 квітня 1995 |
Творці | Золтан Шомодьї |
Розробник | Університет Мельбурна |
Останній реліз | |
Система типізації | Сильна, (статична), поліморфна |
Основні реалізації | Melbourne Mercury Compiler |
Під впливом від | Prolog, Hope, Haskell |
Мова реалізації | Mercury |
Платформа | IA-32, x86-64, ARM, SPARC64, Java, |
Ліцензія | Компілятор GPL, Стандартна бібліотека LGPL |
Звичайні розширення файлів | .m |
Репозиторій вихідного коду | github.com/Mercury-Language/mercury |
Вебсайт | www.mercurylang.org |
Mercury — це суто декларативна логічна мова програмування. Вона пов'язана як з Prolog, так і з Haskell.Вона має сильну, статичну, поліморфну систему типізації, а також сильну систему режимів і детермінізму.
Офіційна реалізація, Melbourne Mercury Compiler, доступна для більшості Unix і Unix-подібних платформ, включаючи Linux, macOS і Windows.
Огляд
Mercury базується на логічній мові програмування Prolog. Вона має той самий синтаксис і ті самі базові поняття, такі як алгоритм вибіркової лінійної резолюції з визначеними твердженнями (ВЛВ). Її можна розглядати як чисту підгрупу Prolog з сильними типами та режимами. Тому її часто порівнюють з попередником за функціоналом та ефективністю виконання.
Мова розроблена з використанням принципів програмної інженерії. На відміну від оригінальних реалізацій Prolog, вона має окрему фазу компіляції, а не безпосередньо інтерпретується. Це дозволяє виявити набагато ширший спектр помилок ще до запуску програми. Вона має сувору систему (статичної типізації) і режимів та систему модулів.
Використовуючи інформацію, отриману під час компіляції (наприклад, тип і режим), програми, написані на Mercury, зазвичай працюють значно швидше, ніж еквівалентні програми, написані на Prolog. Її автори стверджують, що Mercury — найшвидша логічна мова у світі, з великим відривом.
Mercury — це чисто декларативна мова, на відміну від Prolog, оскільки у ній відсутні позалогічні оператори Prolog, такі як !
(зріз) і імперативний (ввід/вивід) (I/O). Це дозволяє проводити розширений статичний аналіз коду і оптимізацію програм, включаючи збирання сміття під час компіляції, але це може ускладнити вираження певних програмних конструкцій (наприклад, перемикання між кількома варіантами, зі значенням за замовчуванням[ ]). Хоча Mercury і допускає нечистий функціонал, він слугує переважно для виклику коду іншої мови. Весь нечистий код повинен бути явно позначений. У Mercury, операції, які зазвичай вважаються нечистими (такі як (ввід/вивід)) виражаються за допомогою чистих конструкцій з використанням пропуском фіктивного значення world через весь відповідний код.
Серед відомих програм, написаних на Mercury, можна назвати компілятор Mercury та форматор . Компанія ODASE також використовує Mercury для розробки своєї онтологічно-орієнтованої платформи для розробки програмного забезпечення., ODASE.
Back-end
Mercury має декілька back-end, які дозволяють компілювати код Mercury на декілька мов, зокрема:
Рівень виробництва
- Низькорівневий C для GNU Compiler Collection (GCC), оригінального back-end Mercury
- Високорівневий C
- Java
- C#
Минуле
- Мова асемблера через back-end GCC
- Aditi, дедуктивна система баз даних, також розроблена в університеті Мельбурна. Mercury-0.12.2 — це остання версія, яка підтримує Aditi.[]
- Common Intermediate Language (CIL) для .NET Framework
- Erlang
Mercury також має іншомовний інтерфейс, що дозволяє пов'язувати код іншими мовами (залежить від обраного back-end) з кодом Mercury. Можливі наступні мови:
Back-end | Іноземна мова(и) |
---|---|
C (обидва рівні) | C |
Java | Java |
Erlang | Erlang |
IL | Common Intermediate Language (CIL) або C# |
З іншими мовами можна взаємодіяти, викликаючи їх з цих мов. Однак це означає, що іншомовний код, можливо, доведеться писати кілька разів для різних backend, інакше переносимість між backend'ами буде втрачена.
Найчастіше використовується оригінальний back-end на низькорівневому C.
Приклади
:- module hello. :- interface. :- import_module io. :- pred main(io::di, io::uo) is det. :- implementation. main(!IO) :- io.write_string("Привіт, світе!\n", !IO).
Обчислення 10-го числа Фібоначчі (найлегшим способом):
:- module fib. :- interface. :- import_module io. :- pred main(io::di, io::uo) is det. :- implementation. :- import_module int. :- func fib(int) = int. fib(N) = (if N =< 2 then 1 else fib(N - 1) + fib(N - 2)). main(!IO) :- io.write_string("fib(10) = ", !IO), io.write_int(fib(10), !IO), io.nl(!IO). % Натомість можна використовувати io.format("fib(10) = %d\n", [i(fib(10))], !IO).
!IO
— це «змінна стану», яка є синтаксичним цукром для пари змінних, яким присвоюються конкретні імена під час компіляції; Наприклад, вищевказане знецукрюється до чогось на кшталт:
main(IO0, IO) :- io.write_string("fib(10) = ", IO0, IO1), io.write_int(fib(10), IO1, IO2), io.nl(IO2, IO).
Графік випусків
Схема іменування стабільних випусків була від 0.1 до 0.13 для перших тринадцяти стабільних випусків. У лютому 2010 року проєкт Mercury вирішив називати кожен стабільний випуск, використовуючи рік і місяць випуску. Наприклад, 10.04 для випуску, зробленого у квітні 2010 року.
Часто також існує періодичний знімок системи розробки release of the day (ROTD)
Підтримка IDE та редакторів
- Розробники надають підтримку для Vim
- Бібліотека Flycheck для Emacs
- Доступний плагін для Eclipse IDE
- Доступний плагін для NetBeans IDE
Див. також
- Curry, інша функціонально-логічна мова
- Alice, діалектна мова Standard ML
- , об'єктноорієнтоване розширення мови Prolog, яке компілюється до мови Prolog
- , мультипарадигмальна мова
- , мова, сильно типізоване об'єктноорієнтоване розширення Prolog з новим синтаксисом
Примітки
- The Mercury Project — Motivation
- The Mercury Project — Benchmarks
- Шомодьї, Золтан; Гендерсон, Фергус; Конвей, Томас (Жовтень–Грудень 1996). Алгоритм виконання Mercury: ефективна мова програмування з чисто декларативною логікою. 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. Процитовано 30 серпня 2008.
- Мазур, Ненсі (Травень 2004). Compile-time garbage collection for the declarative language Mercury (PDF) (Дипломна робота). Katholieke Universiteit Leuven.
- ODASE
- Адаптовано з Ralph Becket's Mercury tutorial
Посилання
- Офіційний сайт
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina Mercury znachennya Mercury ce mova stvorena dlya realnogo vikoristannya Persha versiya bula rozroblena v universiteti Melburna fakulteti komp yuternih nauk Fergusom Gendersonom Tomasom Konvejem i Zoltanom Shomodyi pid kerivnictvom Shomodyi Vona bula vipushena 8 kvitnya 1995 roku MercuryParadigmaLogichna funkcionalna ob yektno oriyentovana dzherelo Data poyavi8 kvitnya 1995TvorciZoltan ShomodyiRozrobnikUniversitet MelburnaOstannij relizSistema tipizaciyiSilna statichna polimorfnaOsnovni realizaciyiMelbourne Mercury CompilerPid vplivom vidProlog Hope HaskellMova realizaciyiMercuryPlatformaIA 32 x86 64 ARM SPARC64 Java LicenziyaKompilyator GPL Standartna biblioteka LGPLZvichajni rozshirennya fajliv mRepozitorij vihidnogo kodugithub com Mercury Language mercuryVebsajtwww mercurylang org Mercury ce suto deklarativna logichna mova programuvannya Vona pov yazana yak z Prolog tak i z Haskell Vona maye silnu statichnu polimorfnu sistemu tipizaciyi a takozh silnu sistemu rezhimiv i determinizmu Oficijna realizaciya Melbourne Mercury Compiler dostupna dlya bilshosti Unix i Unix podibnih platform vklyuchayuchi Linux macOS i Windows OglyadMercury bazuyetsya na logichnij movi programuvannya Prolog Vona maye toj samij sintaksis i ti sami bazovi ponyattya taki yak algoritm vibirkovoyi linijnoyi rezolyuciyi z viznachenimi tverdzhennyami VLV Yiyi mozhna rozglyadati yak chistu pidgrupu Prolog z silnimi tipami ta rezhimami Tomu yiyi chasto porivnyuyut z poperednikom za funkcionalom ta efektivnistyu vikonannya Mova rozroblena z vikoristannyam principiv programnoyi inzheneriyi Na vidminu vid originalnih realizacij Prolog vona maye okremu fazu kompilyaciyi a ne bezposeredno interpretuyetsya Ce dozvolyaye viyaviti nabagato shirshij spektr pomilok she do zapusku programi Vona maye suvoru sistemu statichnoyi tipizaciyi i rezhimiv ta sistemu moduliv Vikoristovuyuchi informaciyu otrimanu pid chas kompilyaciyi napriklad tip i rezhim programi napisani na Mercury zazvichaj pracyuyut znachno shvidshe nizh ekvivalentni programi napisani na Prolog Yiyi avtori stverdzhuyut sho Mercury najshvidsha logichna mova u sviti z velikim vidrivom Mercury ce chisto deklarativna mova na vidminu vid Prolog oskilki u nij vidsutni pozalogichni operatori Prolog taki yak zriz i imperativnij vvid vivid I O Ce dozvolyaye provoditi rozshirenij statichnij analiz kodu i optimizaciyu program vklyuchayuchi zbirannya smittya pid chas kompilyaciyi ale ce mozhe uskladniti virazhennya pevnih programnih konstrukcij napriklad peremikannya mizh kilkoma variantami zi znachennyam za zamovchuvannyam sumnivno Hocha Mercury i dopuskaye nechistij funkcional vin sluguye perevazhno dlya vikliku kodu inshoyi movi Ves nechistij kod povinen buti yavno poznachenij U Mercury operaciyi yaki zazvichaj vvazhayutsya nechistimi taki yak vvid vivid virazhayutsya za dopomogoyu chistih konstrukcij z vikoristannyam propuskom fiktivnogo znachennya world cherez ves vidpovidnij kod Sered vidomih program napisanih na Mercury mozhna nazvati kompilyator Mercury ta formator Kompaniya ODASE takozh vikoristovuye Mercury dlya rozrobki svoyeyi ontologichno oriyentovanoyi platformi dlya rozrobki programnogo zabezpechennya ODASE Back endMercury maye dekilka back end yaki dozvolyayut kompilyuvati kod Mercury na dekilka mov zokrema Riven virobnictva Nizkorivnevij C dlya GNU Compiler Collection GCC originalnogo back end Mercury Visokorivnevij C Java C Minule Mova asemblera cherez back end GCC Aditi deduktivna sistema baz danih takozh rozroblena v universiteti Melburna Mercury 0 12 2 ce ostannya versiya yaka pidtrimuye Aditi dzherelo Common Intermediate Language CIL dlya NET Framework Erlang Mercury takozh maye inshomovnij interfejs sho dozvolyaye pov yazuvati kod inshimi movami zalezhit vid obranogo back end z kodom Mercury Mozhlivi nastupni movi Back end Inozemna mova i C obidva rivni C Java Java Erlang Erlang IL Common Intermediate Language CIL abo C Z inshimi movami mozhna vzayemodiyati viklikayuchi yih z cih mov Odnak ce oznachaye sho inshomovnij kod mozhlivo dovedetsya pisati kilka raziv dlya riznih backend inakshe perenosimist mizh backend ami bude vtrachena Najchastishe vikoristovuyetsya originalnij back end na nizkorivnevomu C PrikladiPrivit svite module hello interface import module io pred main io di io uo is det implementation main IO io write string Privit svite n IO Obchislennya 10 go chisla Fibonachchi najlegshim sposobom module fib interface import module io pred main io di io uo is det implementation import module int func fib int int fib N if N lt 2 then 1 else fib N 1 fib N 2 main IO io write string fib 10 IO io write int fib 10 IO io nl IO Natomist mozhna vikoristovuvati io format fib 10 d n i fib 10 IO IO ce zminna stanu yaka ye sintaksichnim cukrom dlya pari zminnih yakim prisvoyuyutsya konkretni imena pid chas kompilyaciyi Napriklad vishevkazane znecukryuyetsya do chogos na kshtalt main IO0 IO io write string fib 10 IO0 IO1 io write int fib 10 IO1 IO2 io nl IO2 IO Grafik vipuskivShema imenuvannya stabilnih vipuskiv bula vid 0 1 do 0 13 dlya pershih trinadcyati stabilnih vipuskiv U lyutomu 2010 roku proyekt Mercury virishiv nazivati kozhen stabilnij vipusk vikoristovuyuchi rik i misyac vipusku Napriklad 10 04 dlya vipusku zroblenogo u kvitni 2010 roku Chasto takozh isnuye periodichnij znimok sistemi rozrobki release of the day ROTD Pidtrimka IDE ta redaktorivRozrobniki nadayut pidtrimku dlya Vim Biblioteka Flycheck dlya Emacs Dostupnij plagin dlya Eclipse IDE Dostupnij plagin dlya NetBeans IDEDiv takozhCurry insha funkcionalno logichna mova Alice dialektna mova Standard ML ob yektnooriyentovane rozshirennya movi Prolog yake kompilyuyetsya do movi Prolog multiparadigmalna mova mova silno tipizovane ob yektnooriyentovane rozshirennya Prolog z novim sintaksisomPrimitkiThe Mercury Project Motivation The Mercury Project Benchmarks Shomodyi Zoltan Genderson Fergus Konvej Tomas Zhovten Gruden 1996 Algoritm vikonannya Mercury efektivna mova programuvannya z chisto deklarativnoyu logikoyu 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 Procitovano 30 serpnya 2008 Mazur Nensi Traven 2004 Compile time garbage collection for the declarative language Mercury PDF Diplomna robota Katholieke Universiteit Leuven ODASE Adaptovano z Ralph Becket s Mercury tutorialPosilannyaOficijnij sajt