Jump to content

Меркурий (язык программирования)

Меркурий
Парадигма Логический , функциональный , объектно-ориентированный [ нужна ссылка ]
Разработано Золтан Шомоджи
Разработчик Университет Мельбурна
Впервые появился 8 апреля 1995 г .; 29 лет назад ( 1995-04-08 )
Стабильная версия
22.01.8 [1]  Отредактируйте это в Викиданных / 8 сентября 2023 г .; 10 месяцев назад ( 8 сентября 2023 г. )
Дисциплина набора текста Сильный , статичный , полиморфный
Язык реализации Меркурий
Платформа IA-32 , x86-64 , Arm , SPARC 64, Java , CLI
ТЫ Кроссплатформенность : Unix , Linux , macOS , Solaris , FreeBSD , OpenBSD , Windows , Android.
Лицензия GPL- компилятор,
LGPL Стандартная библиотека
Расширения имен файлов
Веб-сайт www .mercurylang .org
Основные реализации
Мельбурнский Меркурий Компилятор
Под влиянием
Пролог , Хоуп , Хаскель

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

Mercury — чисто декларативный логический язык программирования . Это связано как с Прологом , так и с Haskell . [2] Он имеет строгую, статическую, полиморфную систему типов , а также строгую систему режимов и детерминизма.

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

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

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

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

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

Известные программы, написанные на Mercury, включают компилятор Mercury и форматтер Prince XML . Компания-разработчик программного обеспечения ODASE также использовала Mercury для разработки своей платформы разработки программного обеспечения, ориентированной на онтологии, ODASE. [6]

Серверные части

[ редактировать ]

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

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

[ редактировать ]

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

Серверная часть Иностранный язык(и)
C (оба уровня) С
Ява Ява
Эрланг Эрланг
ТО Общий промежуточный язык (CIL) или C#

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

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

Привет, мир :

 :- 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-го числа Фибоначчи (самым очевидным способом): [7]

 :- 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) = %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 года.

Также часто существует периодический снимок текущего выпуска системы разработки (ROTD).

Поддержка IDE и редактора

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

См. также

[ редактировать ]
  1. ^ «Выпуск 22.01.8» . 8 сентября 2023 г. Проверено 18 сентября 2023 г.
  2. ^ Jump up to: а б с Проект «Меркурий» — Мотивация
  3. ^ Проект Меркурий - Контрольные показатели
  4. ^ Сомоджи, Золтан; Хендерсон, Фергюс; Конвей, Томас (октябрь – декабрь 1996 г.). «Алгоритм исполнения Меркурия: эффективный чисто декларативный логический язык программирования» . Журнал логического программирования . 29 (1–3). Mercurylang.org: 17–64. CiteSeerX   10.1.1.46.9861 . дои : 10.1016/S0743-1066(96)00068-4 . Проверено 30 августа 2008 г.
  5. ^ Мазур, Нэнси (май 2004 г.). Сборка мусора во время компиляции для декларативного языка Mercury (PDF) (Диссертация). Католический университет Левена.
  6. ^ ОДАСЭ
  7. ^ Адаптировано из руководства Ральфа Беккета по Меркурию.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 150bfec7b58278bc6b998b78c582acde__1722755580
URL1:https://arc.ask3.ru/arc/aa/15/de/150bfec7b58278bc6b998b78c582acde.html
Заголовок, (Title) документа по адресу, URL1:
Mercury (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)