Question

F # est dérivé de OCaml, mais quels éléments principaux manquent ou sont ajoutés? En particulier, je suis curieux de savoir si les ressources disponibles pour apprendre OCaml sont également utiles pour quelqu'un qui veut apprendre le F #.

Était-ce utile?

La solution

Les principales différences sont que F # ne prend pas en charge:

  • foncteurs
  • Objets de style OCaml
  • variants polymorphes
  • les points de préprocesseur ou d’extension camlp4 / 5 (ppx)

De plus, F # a une syntaxe différente pour les paramètres étiquetés et facultatifs.

En théorie, les programmes OCaml qui n'utilisent pas ces fonctionnalités peuvent être compilés avec F #. Learning OCaml est une introduction parfaitement raisonnable à F # (et inversement, je l’imagine).

La liste complète des différences est ici (note: remplacement par archive.org du lien mort).

Autres conseils

Cette question a été répondue depuis un certain temps, mais j’ai été assez surpris que la plupart des réponses indiquent quelles fonctionnalités OCaml sont manquantes dans F # - c’est vraiment utile de savoir si vous souhaitez porter les programmes OCaml existants en F # (qui est probablement la motivation de la plupart des articles référencés). Cependant, de nombreuses fonctionnalités font de F # un langage différent (pas seulement une version limitée d’OCaml pour .NET!). Voici quelques ajouts dans F #:

  • Unités de mesure vous permettant de vérifier le code traitant des calculs numériques
  • La méta-programmation à l'aide de citations (permet d'utiliser LINQ en F # et est également indispensable pour la réalisation de projets tels que la plate-forme WebSharper)
  • Modèles actifs permettant de créer des abstractions pour des types de données fonctionnels (et fonctionnalité généralement très utile pour les applications de correspondance de modèle plus complexes)
  • Expressions de calcul qui est une fonctionnalité linguistique derrière les flux de travail asynchrones (une bibliothèque pour la programmation asynchrone de services Web / Web / d'interface graphique)
  • Système objet compatible .NET qui permet une interopérabilité totale avec la plate-forme .NET (OCaml prend également en charge les objets, mais il est différent. Il existe bien sûr des avantages dans les deux systèmes. ).
  • Opérateurs surchargés - Autant que je sache, OCaml n'a pas d'opérateurs surchargés. En F #, vous pouvez utiliser + pour tous les types numériques, ainsi que vos types soutenez-le.

Honnêtement, j'estime qu'il convient également de mentionner l'IDE de Visual Studio. Cela ne fait pas partie du langage, mais cela améliore vraiment l'expérience utilisateur (la prise en charge d'IntelliSense dans Visual Studio est vraiment bonne!)

Si vous consultez la liste, de nombreux éléments ont largement contribué à la popularité de F #. Il s’agit donc bien plus que de simplement "OCaml sans foncteurs". F # est définitivement basé sur OCaml (et reprend les idées d’autres langages tels que Haskell) et partage de nombreux aspects avec eux, mais il y a aussi beaucoup d’autres choses. Sans les flux de travail asynchrones, les OO de style .NET et la méta-programmation, je suppose que la division des développeurs Microsoft n'incluerait jamais F # dans Visual Studio 2010.

Je décris toujours F # comme un cousin d'OCaml, car OCaml présente de nombreuses fonctionnalités que F # ne possède pas et ne risque jamais de l'être. F # est plus étroitement lié au précédent langage CAML. En particulier, F # ne prend en charge que très peu l'abstraction et ne prend pas en charge le typage structural (comme objets et variantes polymorphes ).

Contrairement à ce que certains répondants ont écrit, F # prend en charge (de manière limitée) les arguments étiquetés ("nommés") et facultatifs.

Cependant, toutes ces fonctionnalités sont avancées et vous pouvez certainement commencer à comprendre les idées de base de la programmation fonctionnelle à la petite échelle de style OCaml à l’aide de ressources sur OCaml. La première différence majeure que vous découvrirez concerne les problèmes à plus grande échelle, tels que l’encapsulation et l’abstraction, qui sont résolus de manière complètement différente dans OCaml et dans F #. Si vous voulez savoir comment faire cela en fa #, la seule documentation disponible est cet article sur les structures de données purement fonctionnelles .

J'ai également découvert que le merveilleux système de modules d'OCaml facilite le paramétrage du code sur des types (tels que les structures de données), mais que les alternatives de POO sont non seulement hideuses, mais presque totalement inutilisées sur .NET. De plus, lorsque j'essayais d'écrire des structures de données élégamment paramétrées, je rencontrais des dizaines de bogues dans le compilateur F #, car personne n'avait même tenté de le faire auparavant. F # stdlib contient quelques implémentations de structure de données intéressantes, mais pratiquement aucune réutilisation, c’est-à-dire qu’il s’agit d’un travail cut'n'paste.

F # et OCaml sont taxonimiquement des classes de la famille des langues ML, qui comprend également de nombreux animaux étranges. F # est plus récent que OCaml et ne contient aucun des foncteurs [fonctions du module - > module] ou types de ligne [classes d'objets et variantes polymorphes] pour le moment. Entre elles, ces deux simplifications facilitent probablement la courbe d’apprentissage pour les développeurs de la plate-forme .Net. Malheureusement, ces deux fonctionnalités linguistiques sont extrêmement puissantes dans OCaml. Par conséquent, lire la documentation d'OCaml pour comprendre comment coder pour F # risque de générer une frustration prématurée avec cette dernière solution, qui constitue probablement une excellente alternative au C #, où les deux sont disponibles.

F # supporte directement la syntaxe OCaml. Ce n'est peut-être pas compatible à 100%, mais je pense que c'est assez proche.

http://plus.kaist.ac.kr/ ~ shoh / fsharp / html / index.html

Voici une liste des différences (vous ne savez pas à quel point c'est à jour)

http: //plus.kaist. ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top