Вопрос

Что отличает два диалекта ML друг от друга?

Это было полезно?

Решение

Есть много различий, некоторые технические, некоторые социально-политические.Я попытался поставить на первое место более важные различия.

  • SML - это язык с определением и стандартом.Он стабилен (и фактически был заморожен, поэтому не может эволюционировать).Objective Caml - это реализация, контролируемая небольшой группой в INRIA.Она продолжает развиваться.(ИМО, эволюция управляется хорошо.)

  • SML имеет множество реализаций;У Caml есть только один.

  • Objective Caml обладает рядом дополнительных функций, среди которых наиболее заметными, вероятно, являются объекты и полиморфные варианты.

  • Эти два языка имеют совершенно разные модели типов записей.Вкратце, в Caml имена полей записи должны быть уникальными, тогда как в SML два разных типа записей в одной и той же области могут иметь общие имена полей.Эта особенность может немного усложнить перенос с SML на Caml.

  • Существует довольно много синтаксических различий.

  • Библиотеки и стандартные функции кардинально отличаются.Библиотека Caml очень важна, в то время как Стандартная базовая библиотека SML более функциональна.Например, композиция функций - это примитив верхнего уровня в SML;это не часть библиотеки Caml.Библиотека строк Caml не предоставляет функции fold (по крайней мере, начиная с версии 3.08).Реализации многих из Caml List функции небезопасны для очень длинных списков;они взрывают стек.

  • Системы типов слегка отличаются друг от друга:В Caml аннотация типа к выражению e : ty принимается, если тип ty объединяет с типом e.В SML, e : ty принимается только в том случае, если тип ty является экземпляр того типа, который e.Это различие делает аннотацию в Caml гораздо менее полезной на практике, поскольку невозможно использовать аннотацию типа, чтобы настаивать на том, что выражение является полиморфным.

  • Caml имеет гораздо более разумные отношения между интерфейсами (называемыми типы модулей или подписи) и (конкретные) реализации (называемые модули или структуры), чем SML.В SML работает практически все, и вы должны полагаться на программиста, чтобы установить хорошие соглашения.В Caml хорошие соглашения устанавливаются и применяются компилятором.

  • В SML арифметические операторы перегружены для применения как к данным с плавающей запятой, так и к целочисленным данным.В Caml операторы не перегружены;операторы с плавающей запятой обозначаются дополнительной точкой.

  • В SML программист может управлять приоритетом и ассоциативностью инфиксных операторов.В Caml они определяются первым символом имени оператора.Это ограничение ограничивает преимущества возможности определения вашей собственной инфиксной нотации.

Для более подробного анализа в комплекте с редакционным комментарием вы также можете ознакомиться с Страница сравнения Адама Члипалы.

Другие советы

Для получения подробной информации о синтаксических различиях, упомянутых Норманом Рэмси, вот пара веб-страниц:

OCaml добавляет функции объектной ориентации и имеет некоторые незначительные синтаксические отличия.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top