Mercury (мова програмування)

Mercury
ПарадигмаЛогічна, функціональна, об'єктно-орієнтована[джерело?]
Дата появи8 квітня 1995
ТворціЗолтан Шомодьї
РозробникУніверситет Мельбурна
Останній реліз
Система типізаціїСильна, статична, поліморфна
Основні реалізаціїMelbourne Mercury Compiler
Під впливом відProlog, Hope, Haskell
Мова реалізаціїMercury
ПлатформаIA-32, x86-64, ARM, SPARC64, Java, CLI
ЛіцензіяКомпілятор GPL,
Стандартна бібліотека LGPL
Звичайні розширення файлів.m
Репозиторій вихідного кодуgithub.com/Mercury-Language/mercury
Вебсайтwww.mercurylang.org

Mercury — це мова функціонально-логічного програмування, створена для реального використання. Перша версія була розроблена в університеті Мельбурна, факультеті комп'ютерних наук, Фергусом Гендерсоном, Томасом Конвейем і Золтаном Шомодьї, під керівництвом Шомодьї. Вона була випущена 8 квітня 1995 року.

Mercury — це суто декларативна логічна мова програмування. Вона пов'язана як з Prolog, так і з Haskell.[1]Вона має сильну, статичну, поліморфну систему типізації, а також сильну систему режимів і детермінізму.

Офіційна реалізація, Melbourne Mercury Compiler, доступна для більшості Unix і Unix-подібних платформ, включаючи Linux, macOS і Windows.

Огляд

Mercury базується на логічній мові програмування Prolog. Вона має той самий синтаксис і ті самі базові поняття, такі як алгоритм вибіркової лінійної резолюції з визначеними твердженнями (ВЛВ). Її можна розглядати як чисту підгрупу Prolog з сильними типами та режимами. Тому її часто порівнюють з попередником за функціоналом та ефективністю виконання.

Мова розроблена з використанням принципів програмної інженерії. На відміну від оригінальних реалізацій Prolog, вона має окрему фазу компіляції, а не безпосередньо інтерпретується. Це дозволяє виявити набагато ширший спектр помилок ще до запуску програми. Вона має сувору систему статичної типізації і режимів[1] та систему модулів.

Використовуючи інформацію, отриману під час компіляції (наприклад, тип і режим), програми, написані на Mercury, зазвичай працюють значно швидше, ніж еквівалентні програми, написані на Prolog.[2][3] Її автори стверджують, що Mercury — найшвидша логічна мова у світі, з великим відривом.[1]

Mercury — це чисто декларативна мова, на відміну від Prolog, оскільки у ній відсутні позалогічні оператори Prolog, такі як ! (зріз) і імперативний ввід/вивід (I/O). Це дозволяє проводити розширений статичний аналіз коду і оптимізацію програм, включаючи збирання сміття під час компіляції,[4] але це може ускладнити вираження певних програмних конструкцій (наприклад, перемикання між кількома варіантами, зі значенням за замовчуванням[сумнівно ]). Хоча Mercury і допускає нечистий функціонал, він слугує переважно для виклику коду іншої мови. Весь нечистий код повинен бути явно позначений. У Mercury, операції, які зазвичай вважаються нечистими (такі як ввід/вивід) виражаються за допомогою чистих конструкцій з використанням лінійних типів пропуском фіктивного значення world через весь відповідний код.

Серед відомих програм, написаних на Mercury, можна назвати компілятор Mercury та форматор Prince XML. Компанія ODASE також використовує Mercury для розробки своєї онтологічно-орієнтованої платформи для розробки програмного забезпечення., ODASE.[5]

Back-end

Mercury має декілька back-end, які дозволяють компілювати код Mercury на декілька мов, зокрема:

Рівень виробництва

  • Низькорівневий C для GNU Compiler Collection (GCC), оригінального back-end Mercury
  • Високорівневий C
  • Java
  • C#

Минуле

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-го числа Фібоначчі (найлегшим способом):[6]

:- 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
  • Logtalk, об'єктноорієнтоване розширення мови Prolog, яке компілюється до мови Prolog
  • Oz/Mozart, мультипарадигмальна мова
  • Visual Prolog, мова, сильно типізоване об'єктноорієнтоване розширення Prolog з новим синтаксисом

Примітки

  1. а б в The Mercury Project — Motivation
  2. The Mercury Project — Benchmarks
  3. Шомодьї, Золтан; Гендерсон, Фергус; Конвей, Томас (Жовтень–Грудень 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.
  4. Мазур, Ненсі (Травень 2004). Compile-time garbage collection for the declarative language Mercury (PDF) (Дипломна робота). Katholieke Universiteit Leuven.
  5. ODASE
  6. Адаптовано з Ralph Becket's Mercury tutorial

Посилання

Read other articles:

Potret komponis. Pasquale Anfossi (5 April 1727 – Februari 1797) adalah seorang komponis opera asal Italia. Lahir di Taggia, Liguria, ia belajar dengan Niccolò Piccinni dan Antonio Sacchini, dan biasanya berkayra di London, Venesia dan Roma. Ia menulis lebih dari 80 opera, baik opera seria maupun opera buffa, meskipun ia berkonsentrasi pada musik gereja, khsusunya oratorio, pada tahun-tahun terakhirnya. Anfossi wafat di Roma pada 1797. Sumber The Oxford Dictionary of Opera, by John Warrack...

 

 

Ini adalah nama Maluku, (Ambon), marganya adalah Kainama J.W. Kainama Informasi pribadiLahir21 Desember 1944 (umur 79)Kaimana, Papua BaratAlma materAkademi Angkatan Laut (1968)PekerjaanPurnawirawan TNIKarier militerPihak IndonesiaDinas/cabang TNI Angkatan LautMasa dinas1968—1997Pangkat KolonelNRP5830/PSatuanKorps MarinirSunting kotak info • L • B Kolonel Mar (Purn.) Jacobus Wilson Kainama (lahir 21 Desember 1944) adalah seorang Purnawirawan TNI-AL dan salah satu...

 

 

Pour les articles homonymes, voir Vingt-Trois-Août. Éphémérides Août 1er 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31         23 juillet 23 septembre Chronologies thématiques Croisades Ferroviaires Sports Disney Anarchisme Catholicisme Abréviations / Voir aussi (° 1852) = né en 1852 († 1885) = mort en 1885 a.s. = calendrier julien n.s. = calendrier grégorien Calendrier Calendrier perpétuel Liste de calendriers Naissances d...

Pour les articles homonymes, voir Malvy. Martin Malvy Martin Malvy en 2007. Fonctions Président du conseil régional de Languedoc-Roussillon-Midi-Pyrénées(intérim) 1er – 4 janvier 2016(3 jours) Prédécesseur Damien Alary (Languedoc-Roussillon) Lui-même (Midi-Pyrénées) Successeur Carole Delga Président de la Communauté decommunes du Grand Figeac puis de la Communauté de communes Grand-Figeac - Haut-Ségala - Balaguier d'Olt 1er janvier 2014 – 10 février 2018 (4 ans e...

 

 

Adas manis Pimpinella anisum TumbuhanWarna bungaputih TaksonomiDivisiTracheophytaSubdivisiSpermatophytesKladAngiospermaeKladmesangiospermsKladeudicotsKladcore eudicotsKladasteridsKladcampanulidsOrdoApialesFamiliApiaceaeSubfamiliApioideaeGenusPimpinellaSpesiesPimpinella anisum Linnaeus, 1753 lbs Adas manis atau anis (Pimpinella anisum) merupakan sejenis tumbuhan berbunga dari famili Apiaceae yang berasal dari kawasan Laut Tengah bagian timur dan Asia barat daya. Tumbuhan ini merupakan tumbuhan...

 

 

نهائي كأس أوروبا 1979الحدثكأس أوروبا 1978–79 نوتينغهام فورست مالمو 1 0 التاريخ30 مايو 1979الملعبالملعب الأولمبي، ميونخالحكمإريش لينيماير (النمسا)الحضور68,000 → 1978 1980 ← نهائي كأس أوروبا 1968 كانت المباراة النهائية لبطولة كأس أوروبا 1978–79، أقيمت في 30 مايو 1979، على الملعب الأولمبي، ميون...

Vourey L'hôtel de ville. Héraldique Administration Pays France Région Auvergne-Rhône-Alpes Département Isère Arrondissement Grenoble Intercommunalité Communauté d'agglomération du Pays voironnais Maire Mandat Fabienne Blachot-Minassian 2020-2026 Code postal 38210 Code commune 38566 Démographie Populationmunicipale 1 687 hab. (2021 ) Densité 245 hab./km2 Population agglomération 63 320 hab. (2021) Géographie Coordonnées 45° 19′ 18″ no...

 

 

Il duca Cesarini (in abito scuro e gorgiera). Giovanni Ferri, detto Giovanni senese, (attribuito). Corteo del Prefetto di Roma Taddeo Barberini nel rione Ponte, particolare. Il duca Giovan Giorgio Cesarini, detto Giangiorgio II Cesarini (Roma, 1590 – Roma, 23 giugno 1635), è stato un nobile italiano, secondo duca di Civitanova Marche. Stemma Cesarini Indice 1 Biografia 2 Ascendenza 3 Note 4 Voci correlate Biografia Figlio dei nobili Livia Orsini e Giuliano II Cesarini, duca di Civitanova, ...

 

 

Crown corporation of the Government of Canada National Capital CommissionNative nameCommission de la capitale nationaleCompany typeCrown corporationIndustryProperty management,urban planningPredecessorFederal District CommissionFounded1959; 65 years ago (1959)HeadquartersCentral Chambers, 202–40 Elgin Street, Ottawa, ON, CanadaArea servedNational Capital RegionKey peopleTobi Nussbaum (CEO)Mark Seaman (Chair)[1]OwnerGovernment of CanadaNumber of employees419 (2...

أبو الهذيل العلاف معلومات شخصية الميلاد 752البصرة الوفاة 840بغداد مواطنة الدولة العباسية  الديانة الإسلام، معتزلة الحياة العملية التلامذة المشهورون النظام،  وأبو محمد هشام بن عمرو الفوطي،  وأبو يعقوب الشحام  المهنة عالم عقيدة  مجال العمل معتزلة،  وعلم الكلا...

 

 

Chinese medium-lift utility helicopter Z-20 Z-20 flying at Airshow China 2022 Role Medium lift helicopterType of aircraft National origin China Manufacturer Harbin Aircraft Industry Group First flight 23 December 2013 Introduction 1 October 2019[1] Status In service, in production[1] Primary users People's Liberation Army Ground ForcePeople's Liberation Army Naval Air Force People's Armed Police The Harbin Z-20 (Chinese: 直-20) is a Chinese medium-lift utility helico...

 

 

此条目序言章节没有充分总结全文内容要点。 (2019年3月21日)请考虑扩充序言,清晰概述条目所有重點。请在条目的讨论页讨论此问题。 哈萨克斯坦總統哈薩克總統旗現任Қасым-Жомарт Кемелұлы Тоқаев卡瑟姆若马尔特·托卡耶夫自2019年3月20日在任任期7年首任努尔苏丹·纳扎尔巴耶夫设立1990年4月24日(哈薩克蘇維埃社會主義共和國總統) 哈萨克斯坦 哈萨克斯坦政府...

أحمد الدوخي   معلومات شخصية الاسم الكامل أحمد فهد الدوخي الدوسري الميلاد 25 أكتوبر 1976 (العمر 47 سنة)الرياض، السعودية الطول 1.75 م (5 قدم 9 بوصة) مركز اللعب مدافع الجنسية سعودي الرقم 2 المسيرة الاحترافية1 سنوات فريق م. (هـ.) 1995–2005 الهلال 2005–2008 الاتحاد 2008–2009 قطر 2009–2011 ال�...

 

 

نادي الهلال السعوديموسم 1998–99الرئيس بندر بن محمد بن عبد الرحمن آل سعودالمدير الفني راينر هولمان الزياني (1999) ساندري (1999)الملعبملعب الملك فهد الدوليملعب الأمير فيصل بن فهدالدوري السعودي الممتازالمركز الثالثكأس ولي العهد السعوديالوصيف → 1997–98 1999–2000 ← موسم نادي الهلال الس�...

 

 

Piala AFCPenyelenggaraAFCMulai digelar2004; 20 tahun lalu (2004)Dihentikan2024WilayahAsiaJumlah tim36–48 (group stage)59 (total)Kompetisi terkaitAFC Champions LeagueJuara terakhir Central Coast Mariners (Gelar pertama)Tim tersukses Al-Quwa Al-Jawiya Al-Kuwait(Masing-masing 3 Gelar)Situs webOfficial website Piala AFC 2023–24 Piala AFC (bahasa Inggris: AFC Cup) adalah kompetisi sepak bola antara klub se-Asia yang diselenggarakan oleh Konfederasi Sepak Bola Asia (AFC). Kompetisi ini...

ميشيل ماكلين (بالإنجليزية: Michelle McLean)‏[1]    معلومات شخصية الميلاد 31 يوليو 1972 (52 سنة)  ويندهوك  الجنسية ناميبيا[2][1]  الطول 184 سنتيمتر[2]  لون الشعر شعر أشقر  لون العيون ذهبي  معلومات العائلة الزوج غاري بايلي  الحياة العملية المهنة متسابقة �...

 

 

Invariance under a mathematical reflection This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Reflection symmetry – news · newspapers · books · scholar · JSTOR (October 2015) (Learn how and when to remove this message) Not to be confused with Point reflection. Mirror symmetry redirects here. For other uses, see...

 

 

USNS Waccamaw (T-AO-109) Ships of the United States NavyShips in current service Current ships Ships grouped alphabetically A–B C D–F G–H I–K L M N–O P Q–R S T–V W–Z Ships grouped by type Aircraft carriers Airships Amphibious warfare ships Auxiliaries Battlecruisers Battleships Cruisers Destroyers Destroyer escorts Destroyer leaders Escort carriers Frigates Hospital ships Littoral combat ships Mine warfare vessels Monitors Oilers Patrol vessels Registered civilian vessels Sai...

1986 film by Tom McLoughlin Friday the 13th PartVI: Jason LivesTheatrical release posterDirected byTom McLoughlinWritten byTom McLoughlinBased onCharactersby Victor MillerProduced byDon BehrnsStarring Thom Mathews Jennifer Cooke David Kagen Renée Jones Kerry Noonan Darcy DeMoss Tom Fridley CinematographyJon KranhouseEdited byBruce GreenMusic byHarry ManfrediniProductioncompaniesTerror, Inc.Distributed byParamount PicturesRelease date August 1, 1986 (1986-08-01) Running time86 ...

 

 

Philosophy in the ancient world For the journal, see Ancient Philosophy (journal). This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Ancient philosophy – news · newspapers · books · scholar · JSTOR (October 2011) (Learn how and when to remove this message) Part of a series onPhilosophy Philosophy portal Co...