it-swarm-es.com

¿Cuáles son las mayores diferencias entre F # y Scala?

F # y Scala son dos lenguajes de programación funcional que no obligan al desarrollador a usar solo tipos de datos inmutables. Ambos tienen soporte para objetos, pueden usar bibliotecas escritas en otros idiomas y ejecutarse en una máquina virtual Ambos idiomas parecen estar basados ​​en ML.

¿Cuáles son las mayores diferencias entre F # y Scala a pesar de que F # está diseñado para .NET y Scala para el Java = plataforma?

59
Jonas

Diferencias principales:

  • Ambos Scala y F # combinan programación OO-imperativa y programación funcional en un solo lenguaje. Sin embargo, su enfoque hacia la unificación de paradigmas es muy diferente. Scala intenta Fusionar los dos paradigmas en uno (lo llamamos paradigma funcional de objeto), mientras que F # proporciona los dos paradigmas uno al lado del otro. Por ejemplo, tipos de datos algebraicos en F # son construcciones puramente funcionales sin OO en ellas, mientras que los ADT en Scala todavía son clases y objetos regulares. (Nota: en el proceso de compilación en el bytecode CLR, incluso los ADT F # se convierten en clases y objetos) pero no son visibles para el programador de F # en el nivel de origen).

  • F # tiene una inferencia de tipo de estilo Hindley-Milner completa. Scala tiene inferencia de tipo parcial. El soporte para subtipar y pure-OO-ness hace que la inferencia de tipo de estilo Hindley-Milner sea imposible para Scala.

  • Scala es un lenguaje mucho más minimalista que F #. Scala tiene un conjunto ortogonal muy pequeño de construcciones que se reutilizan en todo el lenguaje. F # parece introducir una nueva sintaxis para cada pequeña cosa, convirtiéndose así en una sintaxis muy pesada en comparación con Scala. (Scala tiene 40 palabras clave, mientras que F # tiene 97. Eso debería decirle algo. :-)

  • F # al ser un lenguaje de Microsoft tiene una excelente compatibilidad con IDE en forma de Visual Studio. Las cosas no son tan buenas en el lado Scala. El complemento Eclipse todavía no es hasta la marca. Lo mismo ocurre con el complemento de NetBeans. IDEA parece ser su mejor apuesta en este momento, aunque ni siquiera se acerca a lo que obtienes con Java IDEs. (Para los fanáticos de Emacs, hay ENSIME. He escuchado muchas cosas buenas sobre este paquete, pero aún no lo he probado).

  • Scala tiene un sistema de tipos mucho más poderoso (y complejo) que F #.


Otras diferencias:

  • Las funciones F # se curry por defecto. En Scala, el curry está disponible pero no se usa con mucha frecuencia.

  • La sintaxis de Scala es una mezcla de Java, Standard ML, Haskell, Erlang y muchos otros idiomas. La sintaxis de F # está inspirada en las de OCaml, C # y Haskell.

  • Scala admite tipos y clases de tipos superiores. F # no lo hace.

  • Scala es mucho más susceptible a DSL que F #.


PD: Me encantan ambos Scala y F #, y espero que se conviertan en los idiomas predominantes de sus respectivas plataformas en el futuro. :-)

61
missingfaktor
  • F # se resuelve en aspectos funcionales mientras que scala se basa en aspectos orientados a objetos.
  • F # tiene mejor IDE soporte con Visual studio while El complemento Eclipse de Scala es para código abierto IDE y comparativamente más lento.
  • F #, al ser más parecido a ML que Scala, tiene una sensación de cálculo lambda mínima como lo hace OCaml, Standard ML y Scheme. F # parece ser un lenguaje considerablemente más simple.
9
Ayush Goyal

Un punto pequeño pero importante es la licencia: Scala es BSD (más o menos la licencia de software libre más permisiva que existe), F # solía ser "Acuerdo de licencia de Microsoft Shared Shared Source" pero es un comercial producto hoy en día (según @Lorenzo a continuación, aunque no pude encontrar acuerdos de licencia más específicos en ningún lado).

0
Joonas Pulakka