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

59

F # y Scala son ambos 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 la plataforma Java?

    
pregunta Jonas 03.10.2010 - 02:38

3 respuestas

60

Diferencias principales:

  • Tanto Scala como F # combinan la programación imperativa de OO y la programación funcional en un solo idioma. Sin embargo, su enfoque hacia la unificación de paradigmas es muy diferente. Scala intenta fusionar los dos paradigmas en uno (lo llamamos paradigma objeto-funcional), mientras que F # proporciona los dos paradigmas lado a lado. Por ejemplo, los tipos de datos algebraicos en F # son construcciones puramente funcionales sin OO en ellos, mientras que los ADT en Scala son todavía clases y objetos regulares. (Nota: en el proceso de compilación a código de bytes de CLR, incluso los ADT de 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 subtipos y pureza de OO hace que la inferencia del 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, por lo que se vuelve muy sintaxis pesada en comparación con Scala. (Scala tiene 40 palabras clave, mientras que F # tiene 97. Eso debería decirte algo. :-)

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

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

Otras diferencias:

  • Las funciones F # se currifican de forma predeterminada. En Scala, el curry está disponible pero no se usa muy a menudo.

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

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

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

PS: Me encantan tanto Scala como F #, y espero que se conviertan en lenguajes predominantes de sus respectivas plataformas en el futuro. :-)

    
respondido por el missingfaktor 15.10.2010 - 20:26
9
  • F # se resuelve en aspectos funcionales mientras que scala se basa en Aspectos orientados a objetos.
  • F # tiene mejor soporte de IDE con Visual Studio mientras que el complemento eclipse de Scala es para IDE de código abierto y es comparativamente más lento.
  • F #, al ser más parecido a ML que a Scala, tiene más de un mínimo de cálculo lambda, y se siente de la misma manera que OCaml, Standard ML y Scheme. F # parece ser un lenguaje considerablemente más simple.
respondido por el Ayush Goyal 13.10.2010 - 19:26
0

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

    
respondido por el Joonas Pulakka 13.10.2010 - 11:44

Lea otras preguntas en las etiquetas