F # et Scala sont tous deux des langages de programmation fonctionnels qui n'obligent pas le développeur à n'utiliser que des types de données immuables. Ils prennent tous deux en charge les objets, peuvent utiliser des bibliothèques écrites dans d'autres langages et s'exécuter sur une machine virtuelle Les deux langues semblent être basées sur ML.
Quelles sont les plus grandes différences entre F # et Scala malgré le fait que F # est conçu pour .NET et Scala pour le Java = plateforme?
Différences majeures:
Les deux Scala et F # combinent la programmation OO-impérative et la programmation fonctionnelle en un seul langage. Leur approche vers l'unification des paradigmes est cependant très différente. Scala essaie de Fusionnez les deux paradigmes en un (nous l'appelons paradigme objet-fonctionnel), tandis que F # fournit les deux paradigmes côte à côte. Par exemple, les types de données algébriques en F # sont des constructions purement fonctionnelles sans OO'ness alors que les ADT dans Scala sont toujours des classes et des objets réguliers. mais ils ne sont pas visibles par le programmeur F # au niveau source.)
F # a une inférence de type de style Hindley-Milner complète. Scala a une inférence de type partielle. La prise en charge du sous-typage et de la pureté OO rend l'inférence de type de style Hindley-Milner impossible pour Scala.
Scala est un langage beaucoup plus minimaliste que F #. Scala possède un très petit ensemble orthogonal de constructions qui sont réutilisées dans tout le langage. F # semble introduire une nouvelle syntaxe pour chaque petite chose, devenant ainsi très syntaxique par rapport à Scala. (Scala a 40 mots-clés, alors que F # en a 97. Cela devrait vous dire quelque chose. :-)
F # étant un langage Microsoft a un excellent support IDE sous la forme de Visual Studio. Les choses ne vont pas si bien du côté Scala. Le plugin Eclipse n'est toujours pas Il en va de même pour le plugin NetBeans. IDEA semble être votre meilleur pari pour le moment, bien qu'il ne soit même pas proche de ce que vous obtenez avec Java IDE. (Pour les fans d'Emacs, il y a ENSIME. J'ai entendu beaucoup de bonnes choses à propos de ce package, mais je ne l'ai pas encore essayé.)
Scala a un système de type beaucoup plus puissant (et complexe) que F #.
Autres différences:
Les fonctions F # sont curry par défaut. À Scala, le curry est disponible mais peu utilisé.
La syntaxe de Scala est un mélange de celle de Java, Standard ML, Haskell, Erlang et de nombreuses autres langues. La syntaxe F # est inspirée de celles d'OCaml, C # et Haskell.
Scala prend en charge les types et classes de types supérieurs. F # ne le fait pas.
Scala est beaucoup plus accessible aux DSL que F #.
PS: J'adore les deux Scala et F #, et j'espère qu'ils deviendront à l'avenir les langues prédominantes de leurs plateformes respectives. :-)
Un petit mais important point est la licence: Scala est BSD (à peu près la licence de logiciel libre la plus permissive qui existe), F # était auparavant "accord de licence Microsoft Research Shared Source" mais est une publicité produit de nos jours (selon @Lorenzo ci-dessous, bien que je ne puisse trouver des accords de licence plus spécifiques nulle part).