Principais diferenças:
-
Tanto o Scala quanto o F # combinam a programação imperativa da OO e a programação funcional em um idioma. Sua abordagem para a unificação de paradigmas é muito diferente. O Scala tenta fundir os dois paradigmas em um (chamamos de paradigma objeto-funcional), enquanto o F # fornece os dois paradigmas lado a lado. Por exemplo, os tipos de dados algébricos em F # são construções puramente funcionais sem nenhum OO'ness neles enquanto os ADTs no Scala ainda são classes e objetos regulares. (Nota: No processo de compilação para o bytecode do CLR, até mesmo F # ADTs se tornam classes e objetos, mas eles não são visíveis para o programador F # no nível de origem.)
-
F # tem inferência de tipo de estilo Hindley-Milner completa. Scala tem inferência de tipo parcial. O suporte para subtipagem e pure-OO-ness torna a inferência do tipo estilo Hindley-Milner impossível para o Scala.
-
Scala é uma linguagem muito mais minimalista que o F #. O Scala tem um conjunto ortogonal muito pequeno de construções que são reutilizadas em toda a linguagem. F # parece introduzir uma nova sintaxe para cada pequena coisa, tornando-se assim muito sintaxe pesada em comparação com Scala. (Scala tem 40 palavras-chave, enquanto F # tem 97. Isso deve lhe dizer uma coisa.: -)
-
F # sendo uma linguagem da Microsoft tem um excelente suporte a IDE na forma de Visual Studio. As coisas não são tão boas no lado do Scala. Plugin do Eclipse ainda não é até a marca. O mesmo vale para o plug-in do NetBeans. A IDEA parece ser sua melhor aposta no momento, embora nem chegue perto do que você obtém com os IDEs Java. (Para os fãs do Emacs, existe ENSIME. Eu ouvi muitas coisas boas sobre esse pacote, mas ainda não tentei.)
-
O Scala tem um sistema de tipos muito mais poderoso (e complexo) que o F #.
Outras diferenças:
-
As funções do F # são curried por padrão. Em Scala, o curry está disponível, mas não é usado com frequência.
-
A sintaxe do Scala é uma mistura do Java, Standard ML, Haskell, Erlang e muitas outras linguagens. A sintaxe do F # é inspirada naquelas do OCaml, C # e Haskell.
-
O Scala suporta tipos e tipeclasses superiores. F # não.
-
O Scala é muito mais receptivo às DSLs do que ao F #.