97 votes

Quelles sont les différences entre SML et Ocaml ?

Qu'est-ce qui différencie les deux dialectes ML ?

155voto

Norman Ramsey Points 115730

Il y a beaucoup de différences, certaines techniques, d'autres sociopolitiques. J'ai essayé de mettre les différences les plus importantes en premier.

  • SML est un langage avec une définition et une norme. Il est stable (et en fait a été gelé pour ne pas évoluer). Objective Caml est une implémentation contrôlée par un petit groupe à l'INRIA. Il continue à évoluer. (IMO l'évolution est bien gérée).

  • SML a de nombreuses implémentations ; Caml n'en a qu'une.

  • Objective Caml possède un certain nombre de fonctionnalités supplémentaires, parmi lesquelles les plus importantes sont probablement les objets et les variantes polymorphes.

  • Les deux langues ont des modèles de types d'enregistrements radicalement différents. En bref, en Caml, les noms des champs d'enregistrement doivent être uniques, alors qu'en SML, deux types d'enregistrement différents dans la même portée peuvent avoir des noms de champs communs. Cette bizarrerie peut rendre le portage de SML vers Caml un peu délicat.

  • Il existe un certain nombre de différences syntaxiques.

  • Les bibliothèques et les fonctions standard sont radicalement différentes. La bibliothèque Caml est très impérative, tandis que la bibliothèque de base standard SML est plus fonctionnelle. Par exemple, la composition de fonctions est une primitive de haut niveau dans SML ; elle ne fait pas partie de la bibliothèque Caml. La bibliothèque Caml pour les chaînes de caractères ne fournit pas de fonction fold (du moins pas depuis la version 3.08). Les implémentations de nombreuses fonctions de la bibliothèque Caml List ne sont pas sûres pour les listes très longues ; elles font sauter la pile.

  • Les systèmes de types sont subtilement différents : en Caml, une annotation de type sur une expression e : ty est accepté si le type ty unifie avec le type de e . Dans SML, e : ty n'est accepté que si le type ty est un instance du type de e . Cette distinction rend l'annotation dans Caml beaucoup moins utile en pratique, car il est impossible d'utiliser une annotation de type pour insister sur le fait qu'une expression est polymorphe.

  • Caml a une relation beaucoup plus sensée et raisonnable entre les interfaces (appelées types de modules ou signatures ) et des implémentations (concrètes) (appelées modules ou structures ) que SML. En SML, tout est permis et vous devez compter sur le programmeur pour établir de bonnes conventions. En Caml, les bonnes conventions sont établies et appliquées par le compilateur.

  • En SML, les opérateurs arithmétiques sont surchargés pour s'appliquer à la fois aux données en virgule flottante et aux données entières. En Caml, les opérateurs ne sont pas surchargés ; les opérateurs à virgule flottante sont notés avec un point supplémentaire.

  • En SML, le programmeur peut contrôler la précédence et l'associativité des opérateurs infixes. En Caml, celles-ci sont déterminées par le premier caractère du nom de l'opérateur. Cette restriction limite les avantages de la possibilité de définir votre propre notation infixe.

30voto

bk1e Points 13737

Pour plus de détails concernant les différences syntaxiques mentionnées par Norman Ramsey, voici quelques pages web :

-3voto

Charlie Martin Points 62306

OCaml ajoute des fonctionnalités d'orientation objet et présente quelques différences syntaxiques mineures.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X