Программирование счетчика меркурий 231 ат 01

Ртуть
Mercury (язык программирования) logo.jpg
Парадигма Логика, функциональная, объектно-ориентированная
Разработанный компанией Золтан Соможи
Разработчик Мельбурнский университет
Впервые появился 8 апреля 1995года ; 26 лет назад
Стабильное высвобождение

20.06.1 / 3 ноября 2020; 6 месяцев назад

Дисциплина машинописи Сильный, статический, полиморфный
Язык реализации Ртуть
Платформа IA-32, x86-64, ARM, Sparc64, Java, CLI, Erlang/OTP
ОС Кросс-платформенный: Unix, Linux, macOS, Solaris, FreeBSD, OpenBSD, Windows, Android
Лицензия Компилятор GPL,
стандартная библиотека LGPL
Расширения имен файлов
Веб-сайт www.mercurylang.org
Мельбурн Меркурий Компилятор
Пролог, Надежда, Хаскелл

Mercury — это функциональный логический язык программирования. Созданный для реального использования.

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

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

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

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

Язык разработан с использованием

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

Используя информацию, полученную во время компиляции (например, тип и режим), программы. Написанные на Mercury. Обычно работают значительно быстрее. Чем аналогичные программы. Написанные на Prolog.Его авторыутверждают, что Меркурий-самый быстрый логический язык в мире, с большим отрывом.

[1]

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

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

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

Бэк-энды

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

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

Прошлое

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

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

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

Примеры

Привет Мир:

 :- module hello. :- interface. :- import_module io. :- pred main(io::di, io::uo) is det. :- implementation. main(!IO) :- io.write_string(, !IO). 

Вычисление 10-го числа Фибоначчи (наиболее очевидным способом):[6]

 :- модуль привирать. :- интерфейс. :- import_module Ио. :- пред главной(Ио::Ди, Ио::УО) - это дет. :- реализации. :- import_module инт. :- функции привирать(инт) = инт. мерцательная аритмия(Н) = (Если Н = 2 тогда 1 еще Фибо(П - 1) + Фибоначчи(П - 2)). основной(!IO) :- io.write_string(, !IO), io.write_int(fib(10), !IO), io.nl(!IO). % Может вместо этого использовать io.format(

!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 и редактора

См. также

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

Внешние ссылки