Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Mercury - это функционально-логический язык программирования, предназначенный для использования в реальном мире. Первая версия была разработана на факультете компьютерных наук Мельбурнского университета Фергусом Хендерсоном, Томасом Конвеем и Золтаном Сомоги под руководством Сомоги и выпущена 8 апреля 1995 года.

Mercury - это язык программирования с чисто декларативной логикой . Это связано как с Prolog, так и с Haskell . [1] Он имеет сильную, статическую, полиморфную систему типов , а также сильную систему модуляции и детерминизма.

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

Обзор [ править ]

Mercury основан на языке логического программирования Prolog . Он имеет тот же синтаксис и те же основные концепции, такие как алгоритм выборочного линейного разрешения определенных предложений (SLD). Его можно рассматривать как чистое подмножество Пролога с сильными типами и режимами. Таким образом, его часто сравнивают с его предшественником по функциям и эффективности во время выполнения.

Язык разработан с использованием принципов программной инженерии . В отличие от исходных реализаций Prolog, он имеет отдельную фазу компиляции , а не интерпретируется напрямую. Это позволяет обнаруживать гораздо более широкий спектр ошибок перед запуском программы. Он имеет строгую статическую систему типов и режимов [1] и модульную систему.

Используя информацию, полученную во время компиляции (например, тип и режим), программы, написанные на Mercury, обычно работают значительно быстрее, чем эквивалентные программы, написанные на Prolog. [2] [3] Его авторы с большим отрывом заявляют, что Mercury - самый быстрый логический язык в мире. [1]

В отличие от Prolog , Mercury является чисто декларативным языком, поскольку в нем отсутствуют дополнительные логические операторы Prolog, такие как (вырезать) и императивный ввод / вывод (I / O). Это позволяет оптимизировать анализ статической программы и оптимизацию программ , в том числе во время компиляции сборки мусора , [4] , но это может сделать определенные программные конструкции (например, коммутатором в течение ряда опций, с по умолчанию [ сомнительный ]! ) сложнее выразить. (Хотя Mercury действительно допускает нечистую функциональность, это служит в основном способом вызова кода на иностранном языке. Весь нечистый код должен быть явно отмечен.) Операции, которые обычно были бы нечистыми (например, ввод / вывод ), выражаются с использованием чистых конструкций в Mercury с использованием линейные типы , пропуская фиктивное мировое значение через весь соответствующий код.

Известные программы, написанные на Mercury, включают компилятор Mercury и форматировщик Prince XML . Софтверная компания Mission Critical IT также использует Mercury с 2000 года для разработки корпоративных приложений и своей платформы разработки программного обеспечения ODASE на основе онтологий. [5]

Back-end [ править ]

Mercury имеет несколько бэкэндов, которые позволяют компилировать код Mercury на несколько языков, в том числе:

Уровень производства [ править ]

  • Низкоуровневый C для GNU Compiler Collection (GCC), исходная серверная часть Mercury
  • Высокий уровень C
  • Ява
  • C #
  • Erlang

Прошлое [ править ]

  • Язык ассемблера через серверную часть GCC
  • Адити, дедуктивная система баз данных, также разработанная в Мельбурнском университете . Mercury-0.12.2 - последняя версия, поддерживающая Aditi. [ необходима цитата ]
  • Общий промежуточный язык (CIL) для .NET Framework

Mercury также имеет интерфейс на иностранном языке, позволяющий связать код на других языках (в зависимости от выбранной серверной части) с кодом Mercury. Возможны следующие иностранные языки:

Затем к другим языкам можно подключиться, вызвав их из этих языков. Однако это означает, что код на иностранном языке может потребоваться несколько раз для разных серверных ВМ, иначе переносимость между серверными ВМ будет потеряна.

Наиболее часто используемый бэкэнд - это исходный низкоуровневый бэкэнд C.

Примеры [ править ]

Привет, мир :

 : -  модуль  привет .  : -  интерфейс .  : -  import_module  io .  : -  пред  главное ( : : ди ,  : : ио )  является  Det . : -  реализация .  main (! IO )  : -  io . write_string ( "Hello, World! \ п" ,  ! IO ).

Расчет десятого числа Фибоначчи (в наиболее очевидным образом): [6]

 : -  модуль  fib .  : -  интерфейс .  : -  import_module  io .  : -  пред  главное ( : : ди ,  : : ио )  является  Det .  : -  реализация .  : -  import_module  int . : -  функция  fib ( int )  =  int .  fib ( N )  =  ( если  N  = <  2,  то  1  иначе  fib ( N  -  1 )  +  fib ( N  -  2 )). main (! IO )  : -  io . write_string ( "Фибо (10) =" ,  ! 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 ),  ИО . write_int ( FIB ( 10 ),  IO1 ,  IO2 ),  ИО . nl ( IO2 ,  IO ).

График выпуска [ править ]

Релизы названы в соответствии с годом и месяцем выпуска. Текущая стабильная версия - 20.06 (30 июня 2020 г.). Предыдущие выпуски имели номера 0,12, 0,13 и т. Д., А время между стабильными выпусками могло достигать 3 лет.

Часто существует также выпуск моментальных снимков (ROTD), состоящий из последних функций и исправлений ошибок, добавленных в последний стабильный выпуск.

Поддержка IDE и редактора [ править ]

  • Разработчики предоставляют поддержку Vim
  • Библиотека Flycheck для Emacs
  • Доступен плагин для Eclipse IDE.
  • Доступен подключаемый модуль для IDE NetBeans.

См. Также [ править ]

  • Карри , еще один функциональный язык логики
  • Алиса , диалектный язык Standard ML
  • Logtalk , язык, объектно-ориентированное расширение Prolog, которое компилируется до Prolog
  • Оз / Моцарт , многопарадигмальный язык
  • Visual Prolog , язык, строго типизированное объектно-ориентированное расширение Prolog с новым синтаксисом

Ссылки [ править ]

  1. ^ a b c Проект Меркурий - Мотивация
  2. ^ Проект Меркурий - Ориентиры
  3. ^ Сомоги, Золтан; Хендерсон, Фергус; Конвей, Томас (октябрь – декабрь 1996 г.). «Алгоритм исполнения Mercury: эффективный язык программирования с чисто декларативной логикой» . Журнал логического программирования . 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 г.). Сборка мусора во время компиляции для декларативного языка Mercury (PDF) (Thesis). Katholieke Universiteit Leuven.
  5. ^ Критически важные ИТ
  6. ^ Адаптировано из Mercury учебника Ральфа Бекета

Внешние ссылки [ править ]

  • Официальный веб-сайт