Есть много различий, некоторые технические, некоторые социально-политические. Я попытался поставить на первое место более важные отличия.
SML - это язык с определением и стандартом. Он стабилен (и фактически был заморожен, поэтому не может развиваться). Objective Caml - это реализация, контролируемая небольшой группой INRIA. Он продолжает развиваться. (ИМО, эволюция управляется хорошо.)
SML имеет множество реализаций; У Камла только один.
Objective Caml имеет ряд дополнительных функций, среди которых, вероятно, наиболее заметными являются объекты и полиморфные варианты.
Эти два языка имеют совершенно разные модели типов записей. Вкратце, в Caml имена полей записей должны быть уникальными, тогда как в SML два разных типа записей в одной и той же области могут иметь общие имена полей. Эта причуда может немного усложнить перенос с SML на Caml.
Есть довольно много синтаксических различий.
Библиотеки и стандартные функции кардинально отличаются. Библиотека Caml очень важна, тогда как Стандартная базовая библиотека SML более функциональна. Например, композиция функций - это примитив верхнего уровня в SML; это не часть библиотеки Caml. Библиотека строк Caml не предоставляет функцию сворачивания (по крайней мере, в версии 3.08). Реализации многих Listфункций Caml небезопасны для очень длинных списков; они взорвали стек.
Системы типов немного отличаются: в Caml аннотация типа для выражения e : tyпринимается, если тип tyсовпадает с типом e. В SML e : tyдопускается, только если тип tyявляется экземпляром типа e. Это различие делает аннотацию в Caml гораздо менее полезной на практике, потому что невозможно использовать аннотацию типа, чтобы настаивать на том, что выражение является полиморфным.
Caml имеет гораздо более разумные и разумные отношения между интерфейсами (называемыми типами модулей или сигнатурами ) и (конкретными) реализациями (называемыми модулями или структурами ), чем SML. В SML работает практически все, и вы должны положиться на программиста, чтобы установить хорошие соглашения. В Caml хорошие соглашения устанавливаются и соблюдаются компилятором.
В SML арифметические операторы перегружены для применения как к данным с плавающей запятой, так и к целочисленным данным. В Caml операторы не перегружены; Операторы с плавающей запятой помечаются дополнительной точкой.
В SML программист может управлять приоритетом и ассоциативностью инфиксных операторов. В Caml они определяются первым символом имени оператора. Это ограничение ограничивает преимущества возможности определять собственную инфиксную нотацию.
Вы забыли равенство (неограниченное и небезопасное в OCaml по сравнению с безопасными, но ограниченными типами равенства в SML), переменные необобщенного типа ('_a в OCaml), printf, интерпретацию имен файлов как имен модулей в OCaml, гораздо больше каррирования в stdlib OCaml. Вы написали интерфейс дважды, когда второй раз имели в виду что-то другое (реализацию?).
JD
1
и OCaml-шаблоны и охранники в сопоставлении с образцом.
JD,
1
Обратите внимание, что ограничение полезности аннотаций типов было несколько смягчено в версии 3.12, где аннотирование e : 'a . ty(a)возможно и имеет смысл.
4
Вы делаете важное замечание: «Библиотека Caml очень необходима». Кажется, это пронизывает всю философию, вплоть до того, что параллельная реализация на многоядерном оборудовании кажется очень сложной или невозможной. Напротив, существует как минимум два параллельных SML: Mlton и Poly / ML.
Макариус
2
Что касается вашего третьего момента, имена записей больше не требуют уникальности в OCaml.
PatJ
31
Для получения подробной информации о синтаксических различиях, упомянутых Норманом Рэмси, вот пара веб-страниц:
Ответы:
Есть много различий, некоторые технические, некоторые социально-политические. Я попытался поставить на первое место более важные отличия.
SML - это язык с определением и стандартом. Он стабилен (и фактически был заморожен, поэтому не может развиваться). Objective Caml - это реализация, контролируемая небольшой группой INRIA. Он продолжает развиваться. (ИМО, эволюция управляется хорошо.)
SML имеет множество реализаций; У Камла только один.
Objective Caml имеет ряд дополнительных функций, среди которых, вероятно, наиболее заметными являются объекты и полиморфные варианты.
Эти два языка имеют совершенно разные модели типов записей. Вкратце, в Caml имена полей записей должны быть уникальными, тогда как в SML два разных типа записей в одной и той же области могут иметь общие имена полей. Эта причуда может немного усложнить перенос с SML на Caml.
Есть довольно много синтаксических различий.
Библиотеки и стандартные функции кардинально отличаются. Библиотека Caml очень важна, тогда как Стандартная базовая библиотека SML более функциональна. Например, композиция функций - это примитив верхнего уровня в SML; это не часть библиотеки Caml. Библиотека строк Caml не предоставляет функцию сворачивания (по крайней мере, в версии 3.08). Реализации многих
List
функций Caml небезопасны для очень длинных списков; они взорвали стек.Системы типов немного отличаются: в Caml аннотация типа для выражения
e : ty
принимается, если типty
совпадает с типомe
. В SMLe : ty
допускается, только если типty
является экземпляром типаe
. Это различие делает аннотацию в Caml гораздо менее полезной на практике, потому что невозможно использовать аннотацию типа, чтобы настаивать на том, что выражение является полиморфным.Caml имеет гораздо более разумные и разумные отношения между интерфейсами (называемыми типами модулей или сигнатурами ) и (конкретными) реализациями (называемыми модулями или структурами ), чем SML. В SML работает практически все, и вы должны положиться на программиста, чтобы установить хорошие соглашения. В Caml хорошие соглашения устанавливаются и соблюдаются компилятором.
В SML арифметические операторы перегружены для применения как к данным с плавающей запятой, так и к целочисленным данным. В Caml операторы не перегружены; Операторы с плавающей запятой помечаются дополнительной точкой.
В SML программист может управлять приоритетом и ассоциативностью инфиксных операторов. В Caml они определяются первым символом имени оператора. Это ограничение ограничивает преимущества возможности определять собственную инфиксную нотацию.
Для более подробного анализа с комментариями редакции вы также можете взглянуть на страницу сравнения Адама Члипалы .
источник
e : 'a . ty(a)
возможно и имеет смысл.Для получения подробной информации о синтаксических различиях, упомянутых Норманом Рэмси, вот пара веб-страниц:
источник
OCaml добавляет функции объектной ориентации и имеет некоторые незначительные синтаксические различия.
источник