3 ответов:
есть много различий, некоторые технические, некоторые социально-политические. Я попытался поставить более важные различия в первую очередь.
SML-это язык с определением и стандартом. Он стабилен (и фактически был заморожен, поэтому он не может развиваться). Цель Caml-это реализация, контролируемая небольшой группой в INRIA. Она продолжает развиваться. (ИМО эволюция управляется хорошо.)
SML имеет много реализаций; Caml имеет только один.
объективный Caml имеет ряд дополнительных особенностей, среди которых наиболее заметными являются, вероятно, объекты и полиморфные варианты.
эти два языка имеют совершенно разные модели типов записей. Короче говоря, в Caml имена полей записей должны быть уникальными, где в SML два разных типа записей в одной области могут иметь общие имена полей. Эта причуда может сделать перенос из SML в Caml немного хитрый.
есть довольно много синтаксических различий.
библиотеки и стандартные функции сильно различаются. Библиотека Caml очень важна, в то время как библиотека SML Standard Basis более функциональна. Например, function composition является примитивом верхнего уровня в 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 программист может управлять приоритетом и ассоциативностью операторов infix. В Caml они определяются первым символом имени оператора. Этот ограничение ограничивает преимущества возможности определения собственной инфиксной нотации.
для более детального анализа в комплекте с редакционным комментарием, вы также можете посмотреть на страница сравнения Адама Члипалы.
для получения подробной информации о синтаксических различиях, о которых упоминал Норман Рэмси, вот несколько веб-страниц:
- сравнивая объективный Caml и стандартный ML: имеет хорошие объяснения различий, и" практические "против" чистых " значков тоже забавны
- стандартный мл и объективный Камл, бок о бок
OCaml добавляет функции объектной ориентации и имеет некоторые незначительные синтаксические различия.
Comments