Меркурий (язык программирования) - Mercury (programming language)
Парадигма | Логика, функциональный, объектно-ориентированный |
---|---|
Разработано | Золтан Сомоги |
Разработчик | Мельбурнский университет |
Впервые появился | 8 апреля 1995 г. |
Стабильный выпуск | 20.06.1 / 3 ноября 2020 г. |
Печатная дисциплина | Сильный, статический, полиморфный |
Язык реализации | Меркурий |
Платформа | IA-32, x86-64, РУКА, Sparc64, Ява, CLI, Erlang / OTP |
Операционные системы | Кроссплатформенность: Unix, Linux, macOS, Солярис, FreeBSD, OpenBSD, Windows, Android |
Лицензия | GPL компилятор LGPL стандартная библиотека |
Расширения имени файла | .m |
Интернет сайт | www |
Основной реализации | |
Компилятор Melbourne Mercury | |
Под влиянием | |
Пролог, Надеяться, Haskell |
Меркурий это функционально-логическое программирование язык, созданный для использования в реальном мире. Первая версия была разработана в Мельбурнский университет, Отдел компьютерных наук, составленный Фергусом Хендерсоном, Томасом Конвеем и Золтаном Сомоги под руководством Сомоги, выпущенный 8 апреля 1995 года.
Меркурий - это чисто декларативный логическое программирование язык. Это связано как с Пролог и Haskell.[1] Обладает прочным, статичным, полиморфным система типов, а также система сильного режима и детерминизма.
Официальная реализация Melbourne Mercury Compiler доступна для большинства Unix и Unix-подобный платформы, в том числе Linux, macOS, и для Windows.
Обзор
Mercury основан на языке логического программирования Пролог. Он имеет тот же синтаксис и те же основные концепции, такие как выборочное линейно определенное разрешение (SLD) алгоритм. Его можно рассматривать как чистое подмножество Пролога с сильными типами и режимами. Таким образом, его часто сравнивают с его предшественником по функциям и эффективности во время выполнения.
Язык разработан с использованием программная инженерия принципы. В отличие от оригинальных реализаций Prolog, в нем есть отдельный сборник фаза, а не интерпретируется напрямую. Это позволяет обнаруживать гораздо более широкий спектр ошибок перед запуском программы. Отличается строгим статический тип и система режимов[1] и модульная система.
Используя информацию, полученную во время компиляции (например, тип и режим), программы, написанные на Mercury, обычно работают значительно быстрее, чем эквивалентные программы, написанные на Prolog.[2][3] Его авторы с большим отрывом заявляют, что Меркурий - самый быстрый логический язык в мире.[1]
Меркурий - это чисто декларативный язык, в отличие от Пролог, поскольку в нем отсутствует экстралогичный Операторы Пролога, такие как !
(вырезать) и императив ввод, вывод (Ввод / вывод). Это позволяет продвинутым статический анализ программы и оптимизация программы, включая время компиляции вывоз мусора,[4] но он может создавать определенные программные конструкции (например, переключение ряда опций со значением по умолчанию[сомнительный ]) сложнее выразить. (Хотя Mercury допускает нечистую функциональность, в основном это служит способом вызова кода на иностранном языке. Весь нечистый код должен быть явно отмечен.) Операции, которые обычно бывают нечистыми (например, ввод, вывод ) выражаются с использованием чистых конструкций в Меркурии с использованием линейные типы, продев манекен Мир значение через весь соответствующий код.
Известные программы, написанные на Mercury, включают компилятор Mercury и Принц XML форматтер. Компания по разработке программного обеспечения Mission Critical IT также использует Mercury с 2000 года для разработки корпоративных приложений и своей платформы разработки программного обеспечения ODASE на основе онтологий.[5]
Бэкэнды
Mercury имеет несколько бэкэндов, которые позволяют компилировать код Mercury на несколько языков, в том числе:
Уровень производства
- Низкий уровень C за Коллекция компиляторов GNU (GCC), исходная серверная часть Mercury
- Высокий уровень C
- Ява
- C #
- Erlang
Прошлое
- язык ассемблера через серверную часть GCC
- Адити, дедуктивная система баз данных, также разработанная в Мельбурнский университет. Mercury-0.12.2 - последняя версия, поддерживающая Aditi.[нужна цитата ]
- Общий промежуточный язык (CIL) для .NET Framework
Mercury также имеет интерфейс на иностранном языке, позволяющий связывать код на других языках (в зависимости от выбранной серверной части) с кодом Mercury. Возможны следующие иностранные языки:
Бэкэнд | Иностранные языки) |
---|---|
C (оба уровня) | C |
Ява | Ява |
Erlang | Erlang |
IL | Общий промежуточный язык (CIL) или C # |
Затем к другим языкам можно подключиться, вызвав их из этих языков. Однако это означает, что код на иностранном языке, возможно, придется писать несколько раз для разных бэкэндов, иначе переносимость между бэкэндами будет потеряна.
Наиболее часто используемый бэкэнд - это исходный низкоуровневый бэкэнд C.
Примеры
:- модуль Привет. :- интерфейс. :- import_module io. :- пред главный(io:: di, io:: uo) является Det. :- выполнение. главный(!IO) :- io.write_string("Привет, мир!", !IO).
Расчет 10-го Число Фибоначчи (наиболее очевидным образом):[6]
:- модуль выдумать. :- интерфейс. :- import_module io. :- пред главный(io:: di, io:: uo) является Det. :- выполнение. :- import_module int. :- func выдумать(int) = int. выдумать(N) = (если N =< 2 тогда 1 еще выдумать(N - 1) + выдумать(N - 2)). главный(!IO) :- io.write_string("fib (10) =", !IO), io.write_int(выдумать(10), !IO), io.нл(!IO). % Вместо этого можно использовать io.format ("fib (10) =% d", [i (fib (10))],! IO).
! IO
"переменная состояния", которая синтаксический сахар для пары переменных, которым при компиляции присваиваются конкретные имена; например, приведенное выше сокращается до чего-то вроде:
главный(IO0, IO) :- io.write_string("fib (10) =", IO0, IO1), io.write_int(выдумать(10), IO1, IO2), io.нл(IO2, IO).
График выпуска
Релизы названы в соответствии с годом и месяцем выпуска. Текущая стабильная версия - 20.06 (30 июня 2020 г.). Предыдущие выпуски имели номера 0,12, 0,13 и т. Д., А время между стабильными выпусками может достигать 3 лет.
Часто бывает и снимок выпуск дня (ROTD), состоящий из последних функций и исправлений ошибок, добавленных в последний стабильный выпуск.
IDE и поддержка редактора
- Разработчики оказывают поддержку Vim
- Библиотека Flycheck для Emacs
- Плагин доступен для Eclipse IDE
- Плагин доступен для IDE NetBeans
Смотрите также
- Карри, еще один функциональный язык логики
- Алиса, диалектный язык Стандартный ML
- Logtalk, язык, объектно-ориентированное расширение Prolog, которое компилируется до Prolog
- Оз / Моцарт, мультипарадигмальный язык
- Визуальный пролог, язык, строго типизированное объектно-ориентированное расширение Пролога, с новым синтаксисом
Рекомендации
- ^ а б c Проект Меркурий - Мотивация
- ^ Проект Меркурий - Ориентиры
- ^ Сомоги, Золтан; Хендерсон, Фергус; Конвей, Томас (октябрь – декабрь 1996 г.). «Алгоритм исполнения Mercury: эффективный язык программирования с чисто декларативной логикой». Журнал логического программирования. Mercurylang.org. 29 (1–3): 17–64. CiteSeerX 10.1.1.46.9861. Дои:10.1016 / S0743-1066 (96) 00068-4. Получено 2008-08-30.
- ^ Мазур, Нэнси (май 2004 г.). Сборка мусора во время компиляции для декларативного языка Mercury (PDF) (Тезис). Katholieke Universiteit Leuven.
- ^ Критически важные ИТ
- ^ Адаптирован из Учебник Ральфа Беккета по Меркурию