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

редактировать
Чтобы узнать об Автокоде Меркурия, см. Автокод. Не путать с Mercurial.
Меркурий
Меркурий (язык программирования) logo.jpg
Парадигма Логическая, функциональная, объектно-ориентированная
Разработано Золтан Сомоги
Разработчик Мельбурнский университет
Впервые появился 8 апреля 1995 г. ; 25 лет назад  ( 1995-04-08 )
Стабильный выпуск 20.06.1 / 3 ноября 2020 г. ; 55 дней назад  ( 2020-11-03 )
Печатная дисциплина Сильный, статичный, полиморфный
Язык реализации Меркурий
Платформа IA-32, x86-64, ARM, Sparc64, Java, CLI, Erlang / OTP
Операционные системы Кроссплатформенность : Unix, Linux, macOS, Solaris, FreeBSD, OpenBSD, Windows, Android.
Лицензия Компилятор GPL, стандартная библиотека LGPL
Расширения имени файла .m
Веб-сайт www.mercurylang.org
Основные реализации
Компилятор Melbourne Mercury
Под влиянием
Пролог, Надежда, Haskell

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

Mercury - это язык программирования с чисто декларативной логикой. Это связано как с Прологом, так и с 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 является чисто декларативным языком, поскольку в нем отсутствуют дополнительные логические операторы Пролога, такие как (вырезать) и императивный ввод / вывод (I / O). Это позволяет оптимизировать анализ статической программы и оптимизацию программ, в том числе во время компиляции сборки мусора, но это может сделать определенные программные конструкции (например, коммутатором в течение ряда опций, с по умолчанию) труднее выразить. (Хотя Mercury действительно допускает нечистую функциональность, это служит в основном способом вызова кода на иностранном языке. Весь нечистый код должен быть явно отмечен.) Операции, которые обычно были бы нечистыми (например, ввод / вывод ), выражаются с использованием чистых конструкций в Mercury с использованием линейные типы, пропуская фиктивное мировое значение через весь соответствующий код. !

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

Бэкэнды

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

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

прошлый

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

Бэкэнд Иностранные языки)
C (оба уровня) C
Ява Ява
Erlang Erlang
IL Общий промежуточный язык (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-го числа Фибоначчи (наиболее очевидным способом):

:- 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 =lt; 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).
График выпуска

Релизы названы в соответствии с годом и месяцем выпуска. Текущая стабильная версия - 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 с новым синтаксисом
Рекомендации
внешние ссылки

Последняя правка сделана 2024-01-02 07:34:51
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте