F # et Scala sont des langages de programmation fonctionnels qui n'obligent pas le développeur à utiliser uniquement des types de données immuables. Tous deux prennent en charge les objets, peuvent utiliser des bibliothèques écrites dans d'autres langues et s'exécuter sur une machine virtuelle. Les deux langues semblent être basées sur le ML.
Quelles sont les plus grandes différences entre F # et Scala malgré le fait que F # soit conçu pour .NET et Scala pour la plate-forme Java?
functional programming langugages that don't force the developer to only use immutable datatypes
- Y a-t-il des langues, sauf peut-être des langues de jouets?Réponses:
Différences majeures:
Scala et F # combinent programmation OO-impérative et programmation fonctionnelle dans un seul langage. Leur approche de l'unification des paradigmes est toutefois très différente. Scala essaie de fusionner les deux paradigmes en un seul (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 dans F # sont des constructions purement fonctionnelles, sans OO'ness, alors que les ADT dans Scala sont toujours des classes et des objets normaux. (Remarque: lors de la compilation dans le bytecode CLR, même les F # ADT deviennent des classes et des objets, mais ils ne sont pas visibles par le programmeur F # au niveau de la source.)
F # possède une inférence complète de type Hindley-Milner. Scala a une inférence de type partielle. La prise en charge du sous-typage et de pure-OO-ness rend l'inférence de type de type Hindley-Milner impossible pour Scala.
La scala est un langage beaucoup plus minimaliste que le fa #. Scala a un très petit ensemble orthogonal de constructions qui sont réutilisées dans le langage. F # semble introduire une nouvelle syntaxe pour chaque petite chose, devenant ainsi très lourde en syntaxe 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 possède un excellent support IDE sous la forme de Visual Studio. Les choses ne sont pas si bonnes du côté de la Scala. Le plugin Eclipse n'est toujours pas à la hauteur. Il en va de même pour le plugin NetBeans. IDEA semble être votre meilleur choix pour le moment, même si cela n’est même pas proche de ce que vous obtenez avec les IDE Java. (Pour les fans d'Emacs, il y a ENSIME. J'ai entendu beaucoup de bonnes choses à propos de ce paquet, 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 currys par défaut. En Scala, le currying est disponible mais n'est pas utilisé très souvent.
La syntaxe de Scala est un mélange de Java, Standard ML, Haskell, Erlang et de nombreux autres langages. La syntaxe F # est inspirée de celles de 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 sensible aux DSL que F #.
PS: J'aime à la fois Scala et Fa # et espère qu’ils deviendront les langues prédominantes de leurs plateformes respectives à l’avenir. :-)
la source
Some(2)
en Scala a typeSome[Int]
et nonOption[Int]
ce qui est indésirable OMI. D'autre part, F # a une syntaxe et un traitement spéciaux pour les ADT, et peut donc déduire correctement le type deSome 2
asint option
. Le codage en F # des ADT est donc meilleur que celui de Scala (IMO, bien sûr). Je n'ai pas essayé de laisser entendre que c'était inférieur, et je suis désolé si cela se passait ainsi.la source
La licence est un petit point important: Scala est BSD (la licence de logiciel libre la plus permissive qui soit), F # était autrefois "un contrat de licence Microsoft Research Shared Source" mais est un produit commercial de nos jours (selon @Lorenzo ci-dessous, bien que je n’aie pu trouver d’accord de licence plus précis nulle part).
la source