Standard ML


Standard ML (SML) — компилируемый язык программирования общего назначения высшего порядка[en], основанный на системе типов Хиндли — Милнера.

Является «в основном функциональным» языком[7][8], то есть поддерживает большинство технических свойств функциональных языков, но также предоставляет развитые возможности императивного программирования при необходимости. Сочетает устойчивость программ, гибкость на уровне динамически типизируемых языков и быстродействие>>> на уровне языка Си; обеспечивает превосходную поддержку как быстрого прототипирования, так и модульности и крупномасштабного программирования[en][9][10].

SML был первым самостоятельным компилируемым языком в семействе ML и до сих пор служит опорным языком в сообществе по развитию ML (successor ML)[11]. В SML впервые была реализована уникальная аппликативная система модулей — язык модулей ML.

Язык изначально ориентирован на крупномасштабное программирование[en] программных систем: он предоставляет эффективные средства абстракции и модульности, обеспечивая высокий коэффициент повторного использования кода, и это делает его подходящим также для быстрого прототипирования программ, в том числе и крупномасштабных[en]. Например, в процессе разработки (тогда ещё экспериментального) компилятора SML/NJ[en]>>> (60 тысяч строк на SML), порой приходилось вносить радикальные изменения в реализации ключевых структур данных, влияющих на десятки модулей — и новая версия компилятора была готова в течение дня.[9] (см. также ICFP Programming Contest за 2008, 2009.) При этом, в отличие многих других языков, подходящих для быстрого прототипирования, SML может очень эффективно компилироваться>>>.

SML известен своим относительно низким порогом вхождения и служит языком обучения программированию во многих университетах мира[12]. Обширно документирован в рабочем виде, активно используется учёными в качестве базы для исследования новых элементов языков программирования и идиом (см., например, полиморфизм структурных типов). К настоящему времени все реализации языка (включая устаревшие) стали открытыми и свободными.

Язык имеет математически точное (англ. rigorous) формальное определение, называемое «Определением»>>> (англ. The Definition). Для Определения построено доказательство полной типобезопасности, что гарантирует устойчивость программ и предсказуемое поведение даже при некорректных входных данных и возможных ошибках программистов. Даже содержащая ошибку программа на SML всегда продолжает вести себя как ML-программа: она может навечно уйти в расчёты или породить исключение, но она не может обрушиться[13].