Skip to content
Popular repositories
-
The Mercury logic programming system.
Mercury
815
56
-
Packaging scripts
Shell
8
3
-
Copies of outside papers which are relevant to the implementation of the Mercury system.
7
-
Mercury source distribution
5
Repositories
Type
All
Public
Sources
Forks
Archived
Mirrors
Templates
Language
All
C
HTML
Mercury
Shell
TeX
Sort
Last updated
Name
Stars
-
5
0
0
0
Updated May 17, 2023
-
mercury
Public
The Mercury logic programming system.
Mercury
815
56
14
5
Updated May 16, 2023
-
www
Public
Mercury website
HTML
4
5
3
1
Updated May 10, 2023
-
TeX
11
2
0
0
Updated Apr 2, 2023
-
testing
Public
Automated testing of Mercury ROTDs
Shell
1
BSD-2-Clause
0
0
0
Updated Oct 14, 2022
-
bdwgc
Public
The Boehm-Demers-Weiser conservative C/C++ Garbage Collector (libgc, bdwgc, boehmgc)
C
1
354
0
0
Updated Oct 6, 2022
-
libatomic_ops
Public
The atomic_ops project (Atomic memory update operations portable implementation)
C
0
GPL-2.0
105
0
0
Updated Oct 6, 2022
-
Shell
8
3
5
0
Updated May 1, 2022
-
mercury_outside_papers
Public
Copies of outside papers which are relevant to the implementation of the Mercury system.
7
0
0
0
Updated Feb 26, 2016
-
discussions
Public
Notes from meetings discussions and regarding ideas.
3
0
0
0
Updated Oct 23, 2013
Most used topics
Loading…
From Wikipedia, the free encyclopedia
For Mercury Autocode, see Autocode.
Paradigm | Logic, functional, object-oriented |
---|---|
Designed by | Zoltan Somogyi |
Developer | University of Melbourne |
First appeared | April 8, 1995; 28 years ago |
Stable release |
22.01.6 |
Typing discipline | Strong, static, polymorphic |
Implementation language | Mercury |
Platform | IA-32, x86-64, ARM, Sparc64, Java, CLI |
OS | Cross-platform: Unix, Linux, macOS, Solaris, FreeBSD, OpenBSD, Windows, Android |
License | GPL compiler, LGPL standard library |
Filename extensions | .m |
Website | www.mercurylang.org |
Major implementations | |
Melbourne Mercury Compiler | |
Influenced by | |
Prolog, Hope, Haskell |
Mercury is a functional logic programming language made for real-world uses. The first version was developed at the University of Melbourne, Computer Science department, by Fergus Henderson, Thomas Conway, and Zoltan Somogyi, under Somogyi’s supervision, and released on April 8, 1995.
Mercury is a purely declarative logic programming language. It is related to both Prolog and Haskell.[1] It features a strong, static, polymorphic type system, and a strong mode and determinism system.
The official implementation, the Melbourne Mercury Compiler, is available for most Unix and Unix-like platforms, including Linux, macOS, and for Windows.
Overview[edit]
Mercury is based on the logic programming language Prolog. It has the same syntax and the same basic concepts such as the selective linear definite clause resolution (SLD) algorithm. It can be viewed as a pure subset of Prolog with strong types and modes. As such, it is often compared to its predecessor in features and run-time efficiency.
The language is designed using software engineering principles. Unlike the original implementations of Prolog, it has a separate compilation phase, rather than being directly interpreted. This allows a much wider range of errors to be detected before running a program. It features a strict static type and mode system[1] and a module system.
By using information obtained at compile time (such as type and mode), programs written in Mercury typically perform significantly faster than equivalent programs written in Prolog.[2][3] Its authors claim that Mercury is the fastest logic language in the world, by a wide margin.[1]
Mercury is a purely declarative language, unlike Prolog, since it lacks extra-logical Prolog statements such as !
(cut) and imperative input/output (I/O). This enables advanced static program analysis and program optimization, including compile-time garbage collection,[4] but it can make certain programming constructs (such as a switch over a number of options, with a default[dubious – discuss]) harder to express. While Mercury does allow impure functionality, it serves mainly as a way to call foreign language code. All impure code must be explicitly marked. Operations which would typically be impure (such as input/output) are expressed using pure constructs in Mercury using linear types, by threading a dummy world value through all relevant code.
Notable programs written in Mercury include the Mercury compiler and the Prince XML formatter. The Software company ODASE has also been using Mercury to develop its Ontology-Centric software development platform, ODASE.[5]
Back-ends[edit]
Mercury has several back-ends, which enable compiling Mercury code into several languages, including:
Production level[edit]
- Low-level C for GNU Compiler Collection (GCC), the original Mercury back-end
- High-level C
- Java
- C#
Past[edit]
- Assembly language via the GCC back-end
- Aditi, a deductive database system also developed at the University of Melbourne. Mercury-0.12.2 is the last version to support Aditi.[citation needed]
- Common Intermediate Language (CIL) for the .NET Framework
- Erlang
Mercury also features a foreign language interface, allowing code in other languages (depending on the chosen back-end) to be linked with Mercury code. The following foreign languages are possible:
Back-end | Foreign language(s) |
---|---|
C (both levels) | C |
Java | Java |
Erlang | Erlang |
IL | Common Intermediate Language (CIL) or C# |
Other languages can then be interfaced to by calling them from these languages. However, this means that foreign language code may need to be written several times for the different backends, otherwise portability between backends will be lost.
The most commonly used back-end is the original low-level C back-end.
Examples[edit]
Hello World:
:- module hello. :- interface. :- import_module io. :- pred main(io::di, io::uo) is det. :- implementation. main(!IO) :- io.write_string("Hello, World!n", !IO).
Calculating the 10th Fibonacci number (in the most obvious way):[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). % Could instead use io.format("fib(10) = %dn", [i(fib(10))], !IO).
!IO
is a «state variable», which is syntactic sugar for a pair of variables which are assigned concrete names at compilation; for example, the above is desugared to something like:
main(IO0, IO) :- io.write_string("fib(10) = ", IO0, IO1), io.write_int(fib(10), IO1, IO2), io.nl(IO2, IO).
Release schedule[edit]
The stable release naming scheme was 0.1 up to 0.13 for the first thirteen stable releases. In February 2010 the Mercury project decided to name each stable release by using the year and month of the release. For example 10.04 is for a release made in April 2010.
There is often also a periodic snapshot of the development system release of the day (ROTD)
IDE and editor support[edit]
- Developers provide support for Vim
- Flycheck library for Emacs
- A plugin is available for the Eclipse IDE
- A plugin is available for the NetBeans IDE
See also[edit]
- Curry, another functional logic language
- Alice, a dialect language of Standard ML
- Logtalk, language, an object-oriented extension of Prolog which compiles down to Prolog
- Oz/Mozart, a multiparadigm language
- Visual Prolog, language, a strongly typed object-oriented extension of Prolog, with a new syntax
References[edit]
- ^ a b c The Mercury Project — Motivation
- ^ The Mercury Project — Benchmarks
- ^ Somogyi, Zoltan; Henderson, Fergus; Conway, Thomas (October–December 1996). «The execution algorithm of Mercury: an efficient purely declarative logic programming language». 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. Retrieved 2008-08-30.
- ^ Mazur, Nancy (May 2004). Compile-time garbage collection for the declarative language Mercury (PDF) (Thesis). Katholieke Universiteit Leuven.
- ^ ODASE
- ^ Adapted from Ralph Becket’s Mercury tutorial
External links[edit]
- Official website
Парадигма | Логика, функциональный, объектно-ориентированный |
---|---|
Разработан | Золтан Сомоги |
Разработчик | University of Melbourne |
Впервые появился | 8 апреля 1995 г.; 25 лет назад (1995-04-08) |
Стабильный выпуск | 20.06 / 30 июня 2020 г.; 3 месяца назад (30.06.2020) |
Печатная дисциплина | Сильный, статический, полиморфный |
Язык реализации | Mercury |
Платформа | IA-32, x86-64, ARM, Sparc64, Java, CLI, Erlang / OTP |
OS | Кросс-платформенный : Unix, Linux, macOS, Solaris, FreeBSD, OpenBSD, Windows, Android |
Лицензия | GPL компилятор,. LGPL стандартная библиотека |
Расширения имен файлов | .m |
Веб-сайт | www.mercurylang.org |
Основные реализации | |
Melbourne Mercury Compiler | |
Под влиянием | |
Prolog, Hope, Haskell |
Mercury — это язык функционального логического программирования, созданный для использования в реальном мире. Первая версия была разработана в Мельбурнском университете на факультете компьютерных наук Фергусом Хендерсоном, Томасом Конвеем и Золтаном Сомоги под руководством Сомоги и выпущена 8 апреля 1995 года.
Mercury — это чисто декларативный язык логического программирования. Это связано как с Prolog, так и с Haskell. Он имеет сильную, статическую, полиморфную систему типов , а также строгую систему режимов и детерминизма.
Официальная реализация Melbourne Mercury Compiler доступна для большинства Unix и Unix-подобных платформ, включая Linux, macOS и для Windows.
Содержание
- 1 Обзор
- 2 Внутренние компоненты
- 2.1 Уровень производства
- 2.2 Прошлые
- 3 Примеры
- 4 График выпуска
- 5 Поддержка IDE и редактора
- 6 См. Также
- 7 Ссылки
- 8 Внешние ссылки
Обзор
Mercury основан на языке логического программирования Prolog. Он имеет тот же синтаксис и те же основные концепции, такие как алгоритм выборочного линейного разрешения определенных предложений (SLD). Его можно рассматривать как чистое подмножество Prolog с сильными типами и режимами. Таким образом, его часто сравнивают со своим предшественником по функциям и эффективности во время выполнения.
Язык разработан с использованием принципов программной инженерии. В отличие от исходных реализаций Prolog, он имеет отдельную фазу компиляции, а не напрямую интерпретируется. Это позволяет обнаруживать гораздо более широкий спектр ошибок перед запуском программы. Он имеет строгий статический тип и систему режимов и систему модулей.
Используя информацию, полученную во время компиляции (например, тип и режим), программы, написанные на Mercury, обычно работают значительно быстрее, чем эквивалентные программы, написанные на Prolog. Его авторы с большим отрывом заявляют, что Mercury — самый быстрый логический язык в мире.
Mercury — чисто декларативный язык, в отличие от Prolog, поскольку в нем отсутствует внелогические операторы Пролога, такие как !
(вырезать) и императив ввод / вывод (ввод / вывод). Это обеспечивает расширенный статический анализ программ и оптимизацию программ, включая сборку мусора во время компиляции , но может создавать определенные программные конструкции (например, переключение числа вариантов, по умолчанию) выразить сложнее. (Хотя Mercury действительно допускает нечистую функциональность, это служит в основном способом вызова кода на иностранном языке. Весь нечистый код должен быть явно отмечен.) Операции, которые обычно будут нечистыми (например, ввод / вывод ), выражаются использование чистых конструкций в Mercury с использованием линейных типов, путем пропуска фиктивного мирового значения через весь соответствующий код.
Известные программы, написанные на Mercury, включают компилятор Mercury и форматировщик Prince XML. Софтверная компания Mission Critical IT также использует Mercury с 2000 года для разработки корпоративных приложений и своей платформы разработки программного обеспечения ODASE на основе онтологий.
Back-end
Mercury имеет несколько back-end, которые включить компиляцию кода Mercury на несколько языков, в том числе:
Уровень производства
- Низкий уровень C для GNU Compiler Collection (GCC), исходная версия Mercury back- end
- Высокоуровневый C
- Java
- C#
- Erlang
Прошлый
- язык ассемблера через серверную часть GCC
- Aditi, также дедуктивная система баз данных разработан в Мельбурнском университете. Mercury-0.12.2 является последней версией, поддерживающей Aditi.
- Common Intermediate Language (CIL) для .NET Framework
Mercury также имеет интерфейс на иностранном языке, позволяющий код на других языках ( в зависимости от выбранной серверной части) для связывания с кодом Mercury. Возможны следующие иностранные языки:
Back-end | Иностранный язык (и) |
---|---|
C (оба уровня) | C |
Java | Java |
Erlang | Erlang |
IL | Common Intermediate Language (CIL) или C# |
Другие языки могут быть затем сопряжены с вызовом их из этих языков. Однако это означает, что код на иностранном языке, возможно, придется писать несколько раз для разных бэкэндов, иначе переносимость между бэкэндами будет потеряна.
Наиболее часто используемая внутренняя часть — это исходная базовая часть C низкого уровня.
Примеры
Hello World :
: - модуль hello. : - интерфейс. : - import_module io. : - pred main (io :: di, io :: uo) равно det. :- реализация. main (! IO): - io.write_string ("Hello, World! n",! IO).
Вычисление 10-го числа Фибоначчи (наиболее очевидным способом):
: - модуль fib. : - интерфейс. : - import_module io. : - pred main (io :: di, io :: uo) равно det. :- реализация. : - import_module int. : - функция fib (int) = int. fib (N) = (если 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). % Could instead use io.format("fib(10) = %dn", [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).
График выпуска
Релизы названы в соответствии с годом и месяцем выпуска. Текущий стабильный выпуск — 20.06 (30 июня 2020 г.). Предыдущие выпуски были пронумерованы 0,12, 0.13 и т. Д., А время между стабильными выпусками может составлять до 3 лет.
Часто бывает также выпуск моментальных снимков дня (ROTD), состоящий из последних функций и исправлений ошибок, добавленных в последний стабильный выпуск.
Поддержка IDE и редактора
- Разработчики обеспечивают поддержку
- библиотеки Flycheck для Emacs
- Доступен плагин для Eclipse IDE
- Доступен подключаемый модуль для IDE NetBeans
См. Также
Портал бесплатного программного обеспечения с открытым исходным кодом
- C urry, другой функциональный логический язык
- Алиса, диалектный язык Standard ML
- Logtalk, язык, объектно-ориентированное расширение Prolog, которое компилируется до Prolog
- Oz / Mozart, мультипарадигмальный язык
- Visual Prolog, язык, строго типизированное объектно-ориентированное расширение Prolog, с новым синтаксисом
Ссылки
Внешние ссылки
- Официальный сайт
.
Московский физико-технический институт
Опубликован: 08.07.2011 | Доступ: свободный | Студентов: 0 / 0 | Оценка: 4.80 / 4.70 | Длительность: 04:48:00
Теги: 1-грамматика, алгоритм, алгоритмы, вычисления, логика, отсечение, парадигма программирования, поиск, предикат, программирование, пролог-программа, семантика, функция, язык программирования
Аннотация: Пролог-программа. Свободные и связные переменные. Структурные термы для представления бесконечных объектов. Характеристики операторов. Встроенные предикаты. Язык Mercury. Режимы предикатов.
Смотреть на youtube || на ИНТУИТ в качестве: низком | среднем | высоком
Dmytro Malishevskyi
Пропала возможность скачивать презентации к лекциям курса. Куда писать баг-репорт?
P.S.: Курс «Логическое программирование».
У этого термина существуют и другие значения, см. Mercury.
Класс языка: |
логический, функциональный |
---|---|
Появился в: |
1995 |
Автор(ы): |
Zoltán Somogyi |
Релиз: |
11.07 (22 декабря 2011) |
Типизация данных: |
строгая, статическая, полиморфная |
Основные реализации: |
Melbourne Mercury Compiler |
Испытал влияние: |
Prolog, Haskell |
Лицензия |
GPL для компилятора, LGPL для стандартной библиотеки |
Сайт: |
http://www.mercury.csse.unimelb.edu.au/ |
Mercury — язык функционально-логического программирования со строгой типизацией, призванный решить следующие две проблемы, которые возникают при использовании классического языка логического программирования Prolog:
- проблема производительности. Современные реализации языков логического программирования по производительности уступают реализациям языков программирования императивного типа.
- проблема отладки. Реализации языков логического программирования осуществляют меньше проверок во время компиляции, чем реализации языков программирования императивного типа. Это вынуждает программиста находить ошибки самому и без какой-либо существенной помощи со стороны отладчика.
Язык разработан в Мельбурнском университете. Первую версию выпустили Fergus Henderson, Thomas Conway и Zoltan Somogyi 8 апреля 1995 года.
Особенности
Синтаксис Mercury частично унаследован от Пролога, система типов похожа на Haskell. Это чисто декларативный язык, разработчики полностью убрали из него все императивные возможности, что позволило улучшить встроенные в компилятор возможности оптимизации. Название Mercury, дано в честь бога скорости Меркурия, и отражает направленность на получение быстродействующих программ. Операции, при реализации которых обычно отказываются от чисто-декларативного подхода, такие как ввод-вывод, выражаются в Mercury с помощью декларативных конструкций, используя линейные типы.
Реализация
Компилятор языка Mercury написан на самом языке. До того как компилятор Mercury смог скомпилировать себя сам, был использован язык Prolog. Он распространяется на условиях лицензии GPL, работает на всех современных операционных системах. Имеется возможность транслировать код на многие популярные языки программирования, такие как: C, Java, Erlang, IL для платформы .NET.
С 2010 Проект Mercury имеет 6-месячный цикл выпуска релизов, где старший номер версии соответствует году выпуска, младший — месяцу начала работы над релизом. Более ранние версии имели номера вроде 0.12, 0.13… и время между выпуском стабильных версий было очень велико (около 3 лет).
Компилятор Mercury распространяется на официальном сайте в исходных кодах, пользователи Windows также могут воспользоваться неофициальным дистрибутивом winmercury. Это удобный инсталлятор, устанавливающий MinGW, компилятор GCC и все необходимые файлы Mercury в скомпилированном и настроенном виде. Также содержит файл справки в формате HTML Help с удобным оглавлением и индексом, а также плагин для редактора Vim. Самая свежая на сегодняшний день сборка winmercury — 10.07.
Примеры
Hello World:
:- module hello. :- interface. :- import_module io. :- pred main(io::di, io::uo) is det. :- implementation. main(!IO) :- io.write_string("Hello, World!n", !IO).
Вычисление 10-го числа Фибоначчи (наиболее очевидным способом)[1]:
:- 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). % Could instead use io.format("fib(10) = %dn", [i(fib(10))], !IO).
Примечания
- ↑ На основе Ralph Becket’s Mercury tutorial
Ссылки
- mercury.cs.mu.oz.au — Официальный сайт Mercury в Мельбурнском университете
- mercurylanguage.ucoz.ru — Русскоязычное сообщество
- code.google.com/p/winmercury — winmercury, User-friendly Mercury distribution for Windows
- adventuresinmercury.blogspot.com — Adventures in Mercury, блог посвященный языку
|
|
---|---|
Используемые в разработке |
Ада • APL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • Бейсик • Си • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • Icon • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • PHP • PowerBASIC • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic (.NET) |
Академические |
Agda • Clean • Curry • Лого • ML • РЕФАЛ • Симула • Оберон |
IEC 61131-3 |
Instruction List • ST • FBD • Ladder Diagram (LD) • SFC |
Прочие |
Алгол • Алгол 68 • Модула-2 • Миранда • Hope |
Эзотерические |
HQ9+/HQ9++ • INTERCAL • Brainfuck • Brainfork • Befunge • Malbolge • Piet • Spoon • Unlambda • Whitespace • FALSE • LOLCODE |
Визуальные |
G (LabVIEW) • Microsoft VPL • Sikuli • VisSim • Алиса • ДРАКОН • Скретч |