ML | это... Что такое ML? (original) (raw)
У этого термина существуют и другие значения, см. 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 является интерактивным языком. Каждое введённое предложение анализируется, компилируется и исполняется, и значение, полученное в результате исполнения предложения, вместе с его типом выдаётся пользователю. В языке поддерживается обработка исключительных событий.
Ссылки
- Статья ML в Прогопедии — энциклопедии языков программирования (рус.)
- http://schools.keldysh.ru/sch444/MUSEUM/LANR/ml.htm