Qu'est-ce qui différencie les deux dialectes ML?Quelles sont les différences entre SML et OCaml?
Répondre
Il y a beaucoup de différences, certaines techniques, d'autres sociopolitiques. J'ai essayé de mettre en premier des différences plus importantes.
SML est un langage avec une définition et un standard. Il est stable (et en fait a été gelé donc il ne peut pas évoluer). Objective Caml est une implémentation contrôlée par un petit groupe à l'INRIA. Il continue d'évoluer. (IMO l'évolution est bien gérée.)
SML a de nombreuses implémentations; Caml n'en a qu'un.
Objective Caml a un certain nombre de fonctionnalités supplémentaires, parmi lesquelles les plus importantes sont probablement des objets et des variantes polymorphes.
Les deux langages ont des modèles de types d'enregistrements radicalement différents. Brièvement, dans Caml, les noms des champs d'enregistrement doivent être uniques, alors qu'en SML, deux types d'enregistrements 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 compliqué.
Il existe de nombreuses différences syntaxiques.
Les bibliothèques et les fonctions standard sont radicalement différentes. La bibliothèque Caml est très impérative, alors que la bibliothèque standard SML est plus fonctionnelle. Par exemple, la composition de fonction est une primitive de niveau supérieur dans SML; ça ne fait pas partie de la bibliothèque Caml. La bibliothèque de chaînes Caml ne fournit pas de fonction de pli (du moins pas à partir de la version 3.08). Les implémentations de nombreuses fonctions Caml
List
ne sont pas sécurisées pour les très longues listes; ils soufflent la pile.Les systèmes de type sont subtilement différents: En Caml, une annotation de type sur une expression
e : ty
est acceptée si le typety
unifie avec le type dee
. En SML,e : ty
n'est accepté que si le typety
est une instance du typee
. 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 sain et sensible entre les interfaces (appelé types de modules ou signatures) implémentations et (béton) (appelés modules ou structures) que SML. En SML, à peu près tout se passe et vous devez compter sur le programmeur pour établir de bonnes conventions. Dans Caml, de bonnes conventions sont établies et appliquées par le compilateur.
En langage 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. Dans Caml, les opérateurs ne sont pas surchargés; les opérateurs à virgule flottante sont notés avec un point supplémentaire.
En langage SML, le programmeur peut contrôler la priorité et l'associbilité des opérateurs infixes. Dans Caml, ils sont déterminés par le premier caractère du nom de l'opérateur.Cette restriction limite les avantages de pouvoir définir votre propre notation d'infixe.
Pour une analyse plus détaillée complète avec un commentaire éditorial, vous pouvez également regarder Adam Chlipala's comparison page.
très instructif! mon +1 pour ça. –
Vous avez oublié l'égalité (sans restriction et dangereuse dans OCaml vs SML), les variables de type non-généralisées ('_a dans OCaml), printf, l'interprétation des noms de fichiers dans OCaml, beaucoup plus dans stdlib d'OCaml . Vous avez écrit interface deux fois quand vous vouliez dire autre chose (implémentation?) La deuxième fois. –
et or-modèles et gardes dans la correspondance de modèle. –
OCaml ajoute des fonctions d'orientation d'objet et présente des différences de syntaxe mineures.
Pour plus de détails concernant les différences syntaxiques que Norman Ramsey mentionné, voici quelques pages web:
- Comparing Objective Caml and Standard ML: a de bonnes explications sur les différences et les icônes « pratiques » par rapport aux « purs » sont amusant aussi
- Standard ML and Objective Caml, Side by Side
- 1. Quelles sont les différences entre les délégués et les événements?
- 2. Quelles sont les principales différences entre CLTL2 et ANSI CL?
- 3. Quelles sont les différences de rendu entre FF2 et FF3?
- 4. Quelles sont les différences/similitudes entre JBI et SCA
- 5. Quelles sont les différences entre LLVM et java bytecode?
- 6. Quelles sont les différences entre le système et les backticks et les tuyaux dans Perl?
- 7. Quelles sont les différences entre XSLT et les méthodes de génération de code T4?
- 8. Xcode/Cocoa: Quelles sont les différences entre les versions de débogage et de version?
- 9. Quelles sont les principales différences entre IE7 et IE8 qu'un testeur Web devrait connaître?
- 10. OSGi: Quelles sont les différences entre Apache Felix et Apache Karaf?
- 11. Quelles sont les différences entre visual studio et VS express edition?
- 12. Quelles sont les différences entre Castle Windsor 1.0 RC3 et Castle Windsor 2.0?
- 13. Quelles sont les différences entre MySQL hébergé sur Windows et Debian (Linux)?
- 14. Quelles sont les principales différences entre IE7 et IE8 qu'un développeur Web devrait connaître?
- 15. Différences entre BasicRenderEngine et LazyRenderEngine?
- 16. Quelles sont les principales différences entre les navigateurs que les développeurs web doivent noter?
- 17. Différences entre Smalltalk et python?
- 18. Différences entre les interfaces Java et les protocoles Objective-C?
- 19. Recherche Google vs FAST ESP - quelles sont les différences technologiques?
- 20. Quelles sont les différences et les similitudes possibles des fermetures et des curry?
- 21. Différences entre .NET 3.0 et 3.5?
- 22. différences entre smack, amadou et whack
- 23. Différences entre set et ordered_set dans Mnesia?
- 24. NHibernate 2.1 Proxy Usine options - quelles sont les différences et lequel choisir?
- 25. Différences entre Silverlight 2.0 et 3.0
- 26. Différences WxPython entre Windows et Linux
- 27. Quelles sont les différences entre une carte de modification différentielle et une carte de modification en bloc?
- 28. Différences entre Exception et Erreur
- 29. Différences entre JPA et JPA2
- 30. Différences entre App.Config et Web.Config?
comparaison Syntactic: http://adam.chlipala.net/mlcomp/ – nawfal