Mercury (язык программирования)

Материал из Википедии — свободной энциклопедии
Mercury
Класс языка логический, функциональный
Появился в 1995
Автор Zoltán Somogyi
Разработчик
Университет Мельбурна
Расширение файлов .m
Выпуск 22.01 (31 марта 2022; 2 года назад (2022-03-31))
Система типов
полиморфная
Основные реализации Melbourne Mercury Compiler
Испытал влияние
Prolog, Haskell
Лицензия
LGPL
для стандартной библиотеки
Сайт mercurylang.org

Mercury — язык

Prolog
:

  1. проблема производительности. Современные реализации языков логического программирования по производительности уступают реализациям языков программирования императивного типа.
  2. проблема отладки. Реализации языков логического программирования осуществляют меньше проверок во время компиляции, чем реализации языков программирования императивного типа. Это вынуждает программиста находить ошибки самому и без какой-либо существенной помощи со стороны отладчика.

Язык разработан в

Мельбурнском университете. Первую версию выпустили Fergus Henderson, Thomas Conway и Zoltan Somogyi 8 апреля 1995 года
.

Особенности

Синтаксис Mercury частично унаследован от Пролога, система типов похожа на

оптимизации. Название Mercury дано в честь бога скорости Меркурия и отражает направленность на получение быстродействующих программ. Операции, при реализации которых обычно отказываются от чисто декларативного подхода, такие как ввод-вывод, выражаются в Mercury с помощью декларативных конструкций, используя линейные типы
.

Реализация

C, Java, IL для платформы .NET. Транслятор в байткод Erlang был удалён в версии 22.01[1]
.

С 2010 Проект Mercury имеет 6-месячный цикл выпуска релизов, где старший номер версии соответствует году выпуска, младший — месяцу начала работы над релизом. Более ранние версии имели номера вроде 0.12, 0.13… и время между выпуском стабильных версий было очень велико (около 3 лет).

Компилятор Mercury распространяется на официальном сайте в исходных кодах, пользователи

HTML Help с удобным оглавлением и индексом, а также плагин для редактора Vim
. Самая свежая на сегодняшний день сборка Mercury — 20.01.2.

Примеры

Hello World
:

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

 :- 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).

Примечания

  1. NEWS for Mercury 22.01. Дата обращения: 18 декабря 2023. Архивировано 18 декабря 2023 года.
  2. На основе Ralph Becket's Mercury tutorial Архивная копия от 21 сентября 2020 на Wayback Machine

Ссылки