Quais são as maiores diferenças entre F # e Scala?

59

F # e Scala são ambos langugages 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 rodar em uma máquina virtual. Ambas as linguagens parecem ser baseadas no ML.

Quais são as maiores diferenças entre o F # e o Scala, apesar do fato de o F # ser projetado para .NET e Scala para a plataforma Java?

    
por Jonas 03.10.2010 / 02:38
fonte

3 respostas

60

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 #.

PS: Eu amo Scala e F # e espero que eles se tornem idiomas predominantes em suas respectivas plataformas no futuro. : -)

    
por 15.10.2010 / 20:26
fonte
9
  • F # é resolvido em aspectos funcionais enquanto scala é baseado em aspectos orientados a objeto.
  • O F # tem melhor suporte a IDE com o Visual Studio enquanto O plug-in do Eclipse do Scala é para IDE de software livre e comparativamente mais lento.
  • F #, sendo mais parecido com ML do que Scala, tem mais de um cálculo lambda-y mínimo do jeito que OCaml, ML Padrão e Esquema têm. F # parece ser uma linguagem consideravelmente mais simples.
por 13.10.2010 / 19:26
fonte
0

Um pequeno, mas importante ponto é a licença: o Scala é BSD (a licença de software livre mais permissiva), o F # costumava ser "contrato de licença Microsoft Research Shared Source", mas hoje é um produto comercial (de acordo com @ Lorenzo abaixo, embora eu não consegui encontrar acordos de licença mais específicos em nenhum lugar).

    
por 13.10.2010 / 11:44
fonte