Robin Milner
13.01.1934 – 20.03.2010
|
История
Язык ML (MetaLanguage) является аппликативным языком, программы на этом языке пишутся примерно так же, как на языке С или Pascal. Однако это аппликативный язык с улучшенной концепцией типов данных. ML поддерживает полиморфизм и, с помощью своей системы типов, абстракции данных. Основные структуры этого языка относительно компактны, особенно в сравнении с таким языком, как Ada. Но его возможность расширять типы данных обеспечивает ему большую мощь в случае написания сложных программ. ML включает создание и обработку исключительных ситуации (исключений), императивное и функциональное программирование,
основанные на правилах спецификации, и большую часть концепций, представленных в других языках программирования. Если бы потребовалось выбрать один-единственный язык для изучения многих концепций языков программирования, то ML оказался бы наиболее подходящим кандидатом, пока не встал бы вопрос о коммерческой живучести. ML завоевал большую популярность в исследовательских кругах и в области компьютерного образования.
Доступность механизма определения типов данных на уровне исходной программы - то свойство ML, которое выгодно отличает его от других распространенных языков программирования. Однако коммерческих приложений, написанных на языке ML, практически нет; до сих пор он остается всего лишь инструментом при проведении теоретических исследований в области информатики и широко используется в образовании.
Краткий обзор языка
ML - это сильно типизированный язык со статическим контролем типов и аппликативным выполнением программ. Отличие его от других представленных в этой книге языков заключается в том, что программист не должен объявлять типы данных - для этого существует специальный механизм вывода типа данных результирующих выражений. Этот механизм вывода типов делает возможным перегрузку и сопоставление с образцом на основе унификации, почти как в языке Prolog.
Как и в языке LISP, программа на ML состоит из определений нескольких функций. Каждая функция имеет статически определяемый тип и может возвращать значения любого типа. Поскольку ML является аппликативным языком, то хранение переменных в нем осуществляется иначе, чем в языках С или FORTRAN. В ML имеется только ограниченная форма присваивания. Функциональное выполнение программы на ML подразумевает, что параметры функций передаются по значению с созданием новой копии любого сложного объекта, используя кучу.
Комментарии в ML обозначаются следующим образом: (*...*). В отличие от многих других языков в ML комментарии могут быть вложенными. Как уже говорилось, в ML реализовано большинство свойств языков программирования, которые мы рассматриваем в этой книге. Он позволяет создавать записи и абстрактные типы данных, а также создавать и обрабатывать исключения. Возможности ввода-вывода в ML не очень велики, что обусловлено областью его применения - большинству исследователей не требуется обрабатывать многочисленные базы данных с использованием сложных форматов. Синтаксис этого языка достаточно лаконичен по сравнению с синтаксисом C++ или Ada.
Пример
Вычисление факториала
fun factorial n = let
fun fac (0, acc) = acc
| fac (n, acc) = fac (n - 1, n*acc)
in
if (n < 0) then raise Fail "negative argument"
else fac (n, 1)
end
|
|