F # est dérivé d'OCaml, mais quels éléments majeurs sont manquants ou ajoutés? Plus précisément, je suis curieux de savoir si les ressources disponibles pour l'apprentissage d'OCaml sont également utiles à quelqu'un qui veut apprendre le F #.
Réponses
Trop de publicités?Cette question a été posée pour un certain temps maintenant, mais j'ai été assez surpris de voir que la plupart des réponses de dire ce OCaml fonctionnalités sont manquantes dans F# c'est certainement bon à savoir si vous voulez un port existant OCaml programmes de F# (qui est sans doute la motivation de la plupart des articles référencés). Cependant, il ya de nombreuses fonctionnalités que F# est un langage différent (et pas seulement d'une version limitée de OCaml .NET!) Voici un couple de choses qui sont ajoutés dans F#:
- Les unités de mesure qui vous permettent de type-code de vérification de traiter avec des calculs numériques
- La méta-programmation à l'aide de citations (ce qui rend possible l'utilisation de LINQ en F#, et est également essentiel pour les encourageant des projets comme le WebSharper plate-forme)
- Active modèles pour créer des abstractions fonctionnelle des types de données (et généralement très utile pour plus compliquée filtrage des applications)
- Le calcul des expressions qui est une langue caractéristique derrière asynchrone des flux de travail (une bibliothèque pour asynchronous I/O/web service/interface de programmation)
- .NET compatible objet-système qui rend possible d'interagir avec le .NET plate-forme (OCaml est également un support pour les objets, mais différents, il y a évidemment quelques avantages dans les deux systèmes).
-
Surcharge des opérateurs - pour autant Que je sais, OCaml n'est pas surchargée opérateurs en F#, vous pouvez utiliser
+
pour tous les types numériques ainsi que vos types qui le prennent en charge.
Et, honnêtement, je pense qu'il convient également de mentionner l'IDE de Visual Studio. Ce n'est pas une partie de la langue, mais il améliore vraiment l'expérience de l'utilisateur (prise en charge IntelliSense de Visual Studio est vraiment bon!!!)
Si vous regardez la liste, il y a beaucoup de choses qui ont largement contribué à la popularité de F#, de sorte qu'il est beaucoup plus que juste "OCaml sans foncteurs". F# est certainement basé sur OCaml (et prend des idées à d'autres langages comme Haskell) et les actions de nombreux aspects avec eux, mais il ya aussi beaucoup d'autres choses. Je suppose que sans des choses comme asynchrone des flux de travail, .Style NET OO et de la méta-programmation, les Développeurs de Microsoft de la Division ne serait jamais F# dans Visual Studio 2010.
Les principales différences sont que le F# ne prend pas en charge:
- les foncteurs
- OCaml-style objets
- variantes polymorphes
- le camlp4 préprocesseur
En outre, F# a une syntaxe différente pour étiquetés, et les paramètres facultatifs.
En théorie, OCaml programmes qui n'utilisent pas ces caractéristiques peuvent être compilés avec F#. Apprendre OCaml est parfaitement raisonnable introduction à F# (et vice-versa, j'imagine).
La liste complète des différences est ici (remarque: archive.org remplacement de lien mort).
J'ai toujours décrire F# comme un cousin de OCaml parce que OCaml dispose de nombreuses fonctionnalités que F# n'est pas et n'est jamais susceptible d'obtenir. F# est plus étroitement liée à la précédente langage CAML. En particulier, F# a très peu de soutien pour l'abstraction et pas de support structurel de frappe (comme OCaml objets et des variantes polymorphes).
Contrairement à ce que certains répondants ont écrit, F# n'ont (limitée) de soutien pour le label ("nom") et des arguments optionnels.
Cependant, ce sont toutes les fonctionnalités avancées et vous pouvez certainement commencer à se familiariser avec les idées de base derrière à petite échelle OCaml style de programmation fonctionnelle en utilisant les ressources sur OCaml. La première différence majeure que vous allez découvrir à plus grande échelle des problèmes comme l'encapsulation et d'abstraction qui sont résolus dans de façons complètement différentes en OCaml et en F#. Si vous voulez apprendre comment le faire qu'en F#, la seule documentation disponible est cet article sur le plan purement fonctionnelle des structures de données.
J'ai aussi découvert qu'OCaml est merveilleux module de système, il est facile de paramétrer un code (tels que les structures de données), mais la programmation orientée objet, les alternatives ne sont pas seulement horrible, mais presque entièrement inutilisé .NET. En outre, lorsque vous essayez d'écrire élégamment paramétrées structures de données que j'ai frappé des dizaines de bugs dans le compilateur F# parce que personne n'a même essayé de le faire avant. F# stdlib contient quelques belles structure de données implémentations, mais pratiquement aucun réutiliser, c'est un couper / " coller emploi.
F# et OCaml sont taxonimically classes dans la ML de la famille des langues, qui inclut un ensemble de passle d'étranges animaux. F# est plus récente que OCaml, et il n'a pas, soit foncteurs [fonctions de module> module] ou des types de ligne [classes d'objets et des variantes polymorphes] encore. Entre eux, ces deux simplifications probablement faire la courbe d'apprentissage est plus facile pour quelqu'un développement sur le .Net plate-forme. Malheureusement, ces deux fonctions du langage sont très puissantes en OCaml, donc, la lecture de l'OCaml de la littérature afin de mieux comprendre comment le code F# sera probablement entraîner une frustration avec ce dernier lorsqu'il est probablement une excellente alternative à C#, où les deux sont disponibles.
F # supporte directement la syntaxe OCaml. Ce n'est peut-être pas 100% compatible, mais je pense que c'est assez proche.
http://plus.kaist.ac.kr/~shoh/fsharp/html/index.html
Voici une liste de différences (vous ne savez pas si c'est à jour)
http://plus.kaist.ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html