Mercury (язык программирования) | это... Что такое Mercury (язык программирования)? (original) (raw)

У этого термина существуют и другие значения, см. Mercury.

Mercury

Mercury pl logo.jpg
Класс языка: логический, функциональный
Появился в: 1995
Автор(ы): Zoltán Somogyi
Релиз: 11.07 (22 декабря 2011)
Типизация данных: строгая, статическая, полиморфная
Основные реализации: Melbourne Mercury Compiler
Испытал влияние: Prolog, Haskell
Лицензия GPL для компилятора, LGPL для стандартной библиотеки
Сайт: http://www.mercury.csse.unimelb.edu.au/

Mercury — язык функционально-логического программирования со строгой типизацией, призванный решить следующие две проблемы, которые возникают при использовании классического языка логического программирования Prolog:

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

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

Особенности

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

Реализация

Компилятор языка Mercury написан на самом языке. До того как компилятор Mercury смог скомпилировать себя сам, был использован язык Prolog. Он распространяется на условиях лицензии GPL, работает на всех современных операционных системах. Имеется возможность транслировать код на многие популярные языки программирования, такие как: C, Java, Erlang, IL для платформы .NET.

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

Компилятор Mercury распространяется на официальном сайте в исходных кодах, пользователи Windows также могут воспользоваться неофициальным дистрибутивом winmercury. Это удобный инсталлятор, устанавливающий MinGW, компилятор GCC и все необходимые файлы Mercury в скомпилированном и настроенном виде. Также содержит файл справки в формате HTML Help с удобным оглавлением и индексом, а также плагин для редактора Vim. Самая свежая на сегодняшний день сборка winmercury — 10.07.

Примеры

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

:- 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. На основе Ralph Becket's Mercury tutorial

Ссылки

Просмотр этого шаблона Основные языки программирования (сравнениеIDEисторияхронология)
Используемыев разработке АдаAPLЯзык ассемблераActionScriptABAP/4AutoItAWKБейсикСиКоболC++C#ClarionClojureColdFusionCommon LispDdBaseDelphiEiffelErlangEuphoriaF#ФортФортранGambasGoGroovy • HAL/S • HaskellIconJavaJavaScriptLimboLuaМодула-3Object PascalObjective-COCamlOzParserПаскальКомпонентный ПаскальPerlPHPPowerBASICPythonПЛ/1ПрологRubyScalaSchemeSmalltalkSQLPL/SQLTclValaVisual Basic (.NET)
Академические AgdaCleanCurryЛогоMLРЕФАЛСимулаОберон
IEC 61131-3 Instruction ListSTFBDLadder Diagram (LD) • SFC
Прочие АлголАлгол 68Модула-2МирандаHope
Эзотерические HQ9+/HQ9++ • INTERCALBrainfuck • Brainfork • BefungeMalbolgePietSpoonUnlambdaWhitespaceFALSELOLCODE
Визуальные G (LabVIEW) • Microsoft VPLSikuliVisSimАлисаДРАКОНСкретч