F # y Scala son 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?
functional programming langugages that don't force the developer to only use immutable datatypes
- ¿Hay alguna, excepto tal vez idiomas de juguete?Respuestas:
Grandes diferencias:
Tanto Scala como F # combinan programación imperativa OO y 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 funcional de objeto), mientras que F # proporciona los dos paradigmas uno al lado del otro. Por ejemplo, los tipos de datos algebraicos en F # son construcciones puramente funcionales sin OO en ellas, mientras que los ADT en Scala siguen siendo clases y objetos regulares. (Nota: en el proceso de compilación del código de bytes 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 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 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 # siendo 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 complemento Eclipse todavía no está a la altura. Lo mismo ocurre con el complemento NetBeans. IDEA parece ser su mejor apuesta en este momento, aunque ni siquiera se acerca a lo que obtiene con IDE de Java. (Para los fanáticos de Emacs, existe 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 Scala y F #, y espero que se conviertan en los idiomas predominantes de sus respectivas plataformas en el futuro. :-)
fuente
Some(2)
en Scala tiene tipoSome[Int]
y noOption[Int]
es IMO indeseable. F #, por otro lado, tiene una sintaxis y un tratamiento especiales para los TDA y, por lo tanto, puede inferir correctamente el tipo deSome 2
asint option
. Entonces, la codificación F # de ADTs es mejor que la de Scala (IMO, por supuesto). No traté de dar a entender que es inferior, y lamento que haya sido así.fuente
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 fuente compartida de Microsoft Research", 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 lado).
fuente