2009-03-31 6 views

ответ

141

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

  • 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 программист может управлять приоритетом и ассоциацией операторов infix. В Caml они определяются первым символом имени оператора.Это ограничение ограничивает преимущества, позволяющие определить вашу собственную инфиксную нотацию.

Для более подробного анализа в комплекте с редакционным комментарием вы также можете посмотреть Adam Chlipala's comparison page.

+2

очень познавательно! мой +1 для этого. –

+4

Вы забыли равенство (неограниченное и небезопасное в OCaml по сравнению с безопасными, но ограниченными типами ограничений в SML), переменные не обобщенного типа ('_a в OCaml), printf, интерпретация имен файлов в качестве имен модулей в OCaml, гораздо больше currying в stdlib OCaml , Вы дважды писали интерфейс, когда вы имели в виду что-то еще (реализация?) Во второй раз. –

+1

и OCaml или шаблоны и защитные устройства в соответствии с шаблоном. –

-4

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

 Смежные вопросы

  • Нет связанных вопросов^_^