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



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

517   3  

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

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

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

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

Comments

    Ничего не найдено.