¿Cuáles son las diferencias entre SML y OCaml? [cerrado]


¿Qué diferencia a los dos dialectos de ML?

 91
Author: Lii, 2009-03-31

3 answers

Hay muchas diferencias, algunas técnicas, otras sociopolíticas. He tratado de poner las diferencias más importantes primero.

  • SML es un lenguaje con una definición y un estándar. Es estable (y de hecho se ha congelado por lo que no puede evolucionar). Objetivo Caml es una implementación controlada por un pequeño grupo en INRIA. Sigue evolucionando. (IMO la evolución se maneja bien.)

  • SML tiene muchas implementaciones; Caml tiene solo una.

  • Objective Caml tiene una serie de características adicionales, entre las que las más destacadas son probablemente objetos y variantes polimórficas.

  • Los dos idiomas tienen modelos dramáticamente diferentes de tipos de registros. Brevemente, en Caml, los nombres de los campos de registro deben ser únicos, mientras que en SML, dos tipos de registro diferentes en el mismo ámbito pueden tener nombres de campo en común. Esta peculiaridad puede hacer que la migración de SML a Caml sea un poco complicada.

  • Hay bastante pocas diferencias sintácticas.

  • Las bibliotecas y funciones estándar son dramáticamente diferentes. La biblioteca Caml es muy imperativa, mientras que la biblioteca SML Standard Basis es más funcional. Por ejemplo, la composición de funciones es una primitiva de nivel superior en SML; no forma parte de la biblioteca Caml. La biblioteca de cadenas Caml no proporciona una función fold (al menos no a partir de la versión 3.08). Las implementaciones de muchas de las funciones Caml List no son seguras para listas muy largas; vuela la pila.

  • Los sistemas de tipos son sutilmente diferentes: En Caml, se acepta una anotación de tipo en una expresión e : ty si el tipo ty unifica con el tipo de e. En SML, e : ty solo se acepta si el tipo ty es una instancia del tipo de e. Esta distinción hace que la anotación en Caml sea mucho menos útil en la práctica, porque es imposible usar una anotación de tipo para insistir en que una expresión es polimórfico.

  • Caml tiene una relación mucho más sana y sensible entre interfaces (llamadas tipos de módulos o firmas) e implementaciones (concretas) (llamadas módulos o estructuras) que SML. En SML casi todo vale y tienes que confiar en el programador para establecer buenas convenciones. En Caml, las buenas convenciones son establecidas y aplicadas por el compilador.

  • En SML, los operadores aritméticos son sobrecargado para aplicar tanto a datos de coma flotante como enteros. En Caml, los operadores no están sobrecargados; los operadores de punto flotante se anotan con un punto adicional.

  • En SML, el programador puede controlar la precedencia y la asociatividad de los operadores de infix. En Caml, estos están determinados por el primer carácter del nombre del operador. Esta restricción limita los beneficios de poder definir su propia notación de infijo.

Para un análisis más detallado completo con comentario editorial, también puedes mirar La página de comparación de Adam Chlipala .

 147
Author: Norman Ramsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-20 18:54:21

Para detalles sobre las diferencias sintácticas que mencionó Norman Ramsey, aquí hay un par de páginas web:

 29
Author: bk1e,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-31 02:46:50

OCaml añade características de orientación a objetos y tiene algunas diferencias menores de sintaxis.

 -4
Author: Charlie Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-31 01:35:33