Почему SML и OCaml рассматриваются как диалекты ML? Что такое определение ML?

Существует много диалектов ML, а SML и OCaml - самые популярные. Между SML и OCaml существует много различий, но они оба рассматриваются как диалекты ML. Таким образом,

  • Почему SML и OCaml рассматриваются как диалекты ML?
  • Как язык можно рассматривать как диалект ML?
  • Если ML не является SML/OCaml, каково определение ML?

Я предполагаю, что ML является некоторым пересечением SML и OCaml, но я не могу найти подробное определение.

Ответ 1

Ссылка от camlspotter имеет хороший обзор истории ML и упоминает о реализации Luca Cardelli под названием "Cardelli ML". Я задумался и нашел эту статью: ML под Unix. Luca Cardelli описывает реализацию "ML", и я уверен, что это будет предшествовать стандарту ML, поскольку оно датируется 1983 годом. Это список особенностей в реферате:

  • интерактивными
  • строго типизированный
  • система полиморфного типа.
  • абстрактные типы данных
  • исключения
  • Модули

Это довольно хороший список, хотя некоторые части кажутся неясными. Я думаю, что этот список может служить неформальным определением того, какие функции должен иметь язык, чтобы "считаться ML", однако есть несколько вещей, которые стоит отметить.

Требование о том, что система является "интерактивной", представляет собой несколько детальную детализацию реализации, возможно, специфичную для реализации, описанной в этой статье. У стандартного ML-компилятора MLton нет интерактивного REPL (потому что это компилятор с оптимизацией целых программ), однако я сомневаюсь, что кто-то серьезно предполагает, что язык MLton реализует не ML.

Кроме того, "сильно типизированный" довольно расплывчатый, поэтому стоит прочитать остальную часть этого абзаца для большего контекста:

Каждое выражение ML имеет тип, который определяется статически. Тип выражения обычно автоматически выводится системой, без необходимости определения типа. Система типа ML гарантирует, что любое выражение, которое может быть напечатано, не будет генерировать ошибки типа во время выполнения. Static typechecking ловушки во время компиляции большая часть ошибок в программах.

В этом списке также не упоминается совпадение шаблонов, однако бумага действительно охватывает сопоставление шаблонов, хотя я не знаю, имел ли ur-ML, используемый в LCF, соответствие шаблону, а если нет, то как можно манипулировать данными типы без него. Я бы сказал, что в 2013 году язык с этими функциями, но без соответствия шаблону, будет трудно продать как ML.

Обратите внимание, что Haskell в основном соответствует этому списку, если вы немного прищурились. Но на практике это расходится настолько, что я думаю, что большинство людей считают Haskell вдохновленным ML, но "не ML", в основном потому, что Haskell чист и ленив, в то время как ML исторически был нечистым и строгим. Кроме того, система модулей ML, как в SML, так и в OCaml, немного отличается от Haskell's, и ни один из ML не имеет типов.

Это не исчерпывающий ответ на все ваши вопросы, но я надеюсь, что это все равно поможет.