Подтвердить что ты не робот

Каковы различия между SML и OCaml?

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 3

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