ML

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
ML
Семантика:

мультипарадигменный: функциональный, императивный, модульный

Появился в:

1973

Автор(ы):

Робин Милнер и др. - Эдинбургский университет

Система типов:

строгая, статическая, вывод типов

Диалекты:

Standard ML, Caml Light, OCaml, F#, LazyML, OcaMl

Повлиял на:

Miranda, Haskell, Cyclone, Nemerle, C++

ML (Meta Language) — семейство строгих языков функционального программирования с развитой полиморфной системой типов и параметризуемыми модулями. Подобная система типов была раньше предложена Роджером Хиндли в 1969 году и сейчас часто называется системой Хиндли-Милнера. Языки данного семейства не являются чистыми функциональными языками, так как включают и императивные инструкции. ML преподаётся во многих западных университетах (в некоторых даже как первый язык программирования).

Предпосылки[править | править вики-текст]

В 1963 году Джон Алан Робинсон реализовал метод автоматического доказательства теорем, получивший название «принцип резолюции». Идея этого метода принадлежит Эрбрану, и предложена в 1930 году. Робинсон разработал эффективный с вычислительной точки зрения алгоритм унификации, являющийся основой метода. Так появился язык ML[уточнить], созданный для автоматического доказательства теорем, но, как оказалось, пригодный и в качестве языка программирования общего назначения.

Особенности[править | править вики-текст]

В основе строгой и статической системы типов языка лежит лямбда-исчисление, к которому добавлена строгая типизация. Строгая система типов дает возможности для оптимизации, поэтому вскоре появляется компилятор языка. В системе типов Хиндли-Милнера ограниченно полиморфная система типов, где большинство типов выражений может быть выведено автоматически. Это даёт возможность программисту не описывать явно типы функций, но сохранить строгий контроль типов.

Примеры[править | править вики-текст]

Вычисление факториала на ML:

fun fac(n) = if n = 0 then 1 else n * fac(n-1);

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

Ссылки[править | править вики-текст]