F # e Scala são linguagens de programação funcional que não forçam o desenvolvedor a usar apenas tipos de dados imutáveis. Ambos têm suporte para objetos, podem usar bibliotecas escritas em outros idiomas e executadas em uma máquina virtual. Ambos os idiomas parecem basear-se no ML.
Quais são as maiores diferenças entre o F # e o Scala, apesar de o F # ter sido projetado para .NET e o Scala para a plataforma Java?
functional programming langugages that don't force the developer to only use immutable datatypes
- existe algum, exceto talvez línguas de brinquedo?Respostas:
Principais diferenças:
Scala e F # combinam programação imperativa para OO e programação funcional em um idioma. Sua abordagem para a unificação de paradigmas é muito diferente. Scala tenta fundir os dois paradigmas em um (chamamos de paradigma funcional do objeto), enquanto o F # fornece os dois paradigmas lado a lado. Por exemplo, tipos de dados algébricos em F # são construções puramente funcionais, sem OO'ness, enquanto ADTs em Scala ainda são classes e objetos regulares. (Nota: No processo de compilação para o bytecode do CLR, até os ADTs do F # se tornam classes e objetos, mas não são visíveis para o programador do F # no nível de origem.
O F # possui inferência completa do tipo Hindley-Milner. Scala tem inferência parcial de tipo. O suporte para subtipagem e OO puro torna impossível a inferência de tipo de estilo Hindley-Milner para Scala.
Scala é uma linguagem muito mais minimalista que o F #. Scala tem um conjunto ortogonal muito pequeno de construções que são reutilizadas em todo o idioma. O F # parece introduzir uma nova sintaxe para cada pequena coisa, tornando-se muito pesado em relação à Scala. (Scala tem 40 palavras-chave, enquanto F # tem 97. Isso deve lhe dizer uma coisa. :-)
Sendo o F # uma linguagem da Microsoft, possui um excelente suporte IDE na forma de Visual Studio. As coisas não são tão boas no lado do Scala. O plug-in do Eclipse ainda não está bom. O mesmo vale para o plug-in do NetBeans. O IDEA parece ser a sua melhor aposta no momento, embora nem sequer se aproxime do que você obtém com os Java IDEs. (Para os fãs do Emacs, existe o ENSIME. Ouvi muitas coisas boas sobre este pacote, mas ainda não o experimentei.)
O Scala possui um sistema do tipo muito mais poderoso (e complexo) que o F #.
Outras diferenças:
As funções F # são exibidas por padrão. Em Scala, o curry está disponível, mas não é usado com muita frequência.
A sintaxe do Scala é uma mistura da linguagem Java, Standard ML, Haskell, Erlang e muitas outras linguagens. A sintaxe do F # é inspirada nos de OCaml, C # e Haskell.
O Scala suporta tipos e classes superiores. F # não.
Scala é muito mais acessível a DSLs que F #.
PS: Eu amo Scala e F #, e espero que eles se tornem idiomas predominantes de suas respectivas plataformas no futuro. :-)
fonte
Some(2)
em Scala tem tipoSome[Int]
e nãoOption[Int]
qual é IMO indesejável. Por outro lado, o F # possui uma sintaxe e um tratamento especiais para ADTs e, portanto, pode inferir corretamente o tipo deSome 2
asint option
. Portanto, a codificação F # de ADTs é melhor que a de Scala (IMO, é claro). Não tentei sugerir que é inferior e lamento se isso aconteceu dessa maneira.fonte
Um ponto pequeno, porém importante, é a licença: Scala é BSD (praticamente a licença de software livre mais permissiva que existe), o F # costumava ser "contrato de licença de fonte compartilhada de pesquisa da Microsoft", mas hoje é um produto comercial (de acordo com @Lorenzo abaixo, embora não tenha conseguido encontrar contratos de licença mais específicos em nenhum lugar).
fonte