¿Habrá un lenguaje funcional que haga para la comunidad Java lo que F # hace para la comunidad .NET?

StackOverflow https://stackoverflow.com/questions/169812

  •  05-07-2019
  •  | 
  •  

Pregunta

¿Habrá un lenguaje funcional que haga para la comunidad Java lo que F # hace para la comunidad .NET?

¿Qué lenguajes de programación funcional están disponibles, o en desarrollo, para la JVM?

¿Fue útil?

Solución

Quizás Clojure . No está tipificado estáticamente, pero tiene más énfasis en la inmutabilidad y la concurrencia que F #. Sin embargo, al igual que F # (y a diferencia de Common Lisp), está destinado a ser un lenguaje principalmente funcional que sea bueno para consumir bibliotecas OO de la plataforma subyacente.

Otros consejos

Scala sería el idioma.

Aunque no es estrictamente funcional (es una combinación de funcional y orientado a objetos) y no es estrictamente para Java (hay un . NET versión de Scala ), que sería el análogo más cercano a F # en la JVM.

Lo primero que se me ocurrió fue Scala pero realmente Ocaml-Java se acerca ya que F # es una variante de Ocaml. Consulte esta publicación que compara Ocaml-Java con Scala :

  

Los programadores OCaml son típicamente más de 10 veces más productivos que Java o C ++   programadores para una amplia gama de tareas prácticas. A pesar de estar basado en un   fundamentalmente plataforma OOP, F # recorre un largo camino para capturar la productividad   Impulso de los beneficios de OCaml (y toda la familia ML). En contraste, Scala   no logra capturar muchos de los beneficios, incluidos algunos realmente básicos y,   en consecuencia, escribir código correcto es mucho más difícil en Scala que en   cualquier ML real.

     

Además, la familia de idiomas ML está diseñada para ser sucinta pero Scala es   innecesariamente detallado para todo, desde "¡Hola mundo!" hacia arriba. La familia de ML   de idiomas proporcionan una inferencia de tipos extensa (OCaml más que la mayoría) pero   Scala solo tiene inferencia rudimentaria en comparación. OCaml tiene un inusualmente   sistema de tipo expresivo pero Scala agrega poco a OOP que es práctico   importancia.

Por ahora diría Scala. Pero para el futuro, echaría un vistazo a Fortress. La primera implementación de la especificación se lanzó el 1 de abril de 2008. Y no, eso no es una broma. Las características clave son:

  • Tipo estático, pero mucha inferencia de tipos para evitar el desorden
  • Representación Unicode y 2D de funciones matemáticas
  • Diseñado para ejecución paralela (para cada valor predeterminado)
  • Fuerte soporte para bibliotecas personalizadas (influencia de Guy Steele)
  • Sobrecarga del operador, incluido el operador de yuxtaposición

Más información en el sitio web de Project Fortress Community y la Wikipedia Fortress page .

Podría decirse que ninguno porque la JVM carece de llamadas de cola y están obligados a hacer que casi todo el código funcional sea robusto con respecto al consumo de pila.

Lo más parecido a las implementaciones de lenguaje funcional en la JVM son Clojure , Scala y el OCaml-Java proyecto. Aunque existen soluciones para la falta de llamadas de cola (por ejemplo, trampolining), ninguna de estas implementaciones de lenguaje hace esto porque las soluciones introducen problemas aún más graves, por ejemplo rendimiento paralizante y depuración completamente ofuscante.

Sun ha estado hablando de llamadas de cola durante años y, más recientemente, han indicado que tienen la intención de implementarlas inminentemente. Tan pronto como se haga eso, estoy seguro de que veremos mucha más diversidad de lenguaje en la JVM y, en particular, algunas implementaciones de lenguaje funcional con calidad de producción. Hasta entonces, considero todos estos idiomas como juguetes.

Saludos, Jon Harrop.

Hay una buena lista de lenguajes de programación para JVM, incluido el paradigma de programación funcional y otros lenguajes de paradigma en:

  • es.wikipedia.org/wiki/List_of_JVM_languages ??

Mi primera elección es Scala (multi-paradigma; OO & amp; FP), pasé más de 5 meses estudiando Scala en 2009, y creé una hoja de referencia rápida: bchiprog.blogspot.com/2009/05/scala-cheat -sheet.html

Noté que hay otros paradigmas de programación que son interesantes, otros enfoques en el procesamiento paralelo como X10, Fortress y Chapel. X10 se implementa sobre Scala - http: // www. scala-lang.org/sites/default/files/odersky/scalaliftoff2009.pdf

Realmente se basa en el problema que necesita resolver y luego elija el idioma que mejor pueda resolverlo. Creo que es el deseo de los desarrolladores que haya un lenguaje que pueda resolver cualquier tipo de problema fácilmente y hacerlo de manera simple.

@Marc Gravell: los lenguajes funcionales se utilizan cada vez más en las entrañas de los sistemas financieros de nivel empresarial. Usamos muchas funciones (puras o semi-puras) en el banco para el que trabajo ...

Mientras tanto, existe Frege , un lenguaje puramente funcional y no estricto en el espíritu de Haskell que compila a Java, que luego se compila aún más con javac o el compilador eclipse, dependiendo del entorno (línea de comandos o eclipse).

En realidad, podría estar equivocado, pero no espero que F # sea tan convencional como los otros lenguajes .NET; útil en algunos círculos (académicos, compiladores, algunos otros escenarios); sin embargo, no olvide que C # ofrece uso de FP, y mejora cada vez: C # 1.2 tiene delegados; C # 2.0 tiene métodos anónimos y capturas / cierres; C # 3.0 tiene lambdas para simplificar y Expression para abstracción. Los tipos anónimos (C # 3.0) comparten alguna similitud con las tuplas (en términos de conveniencia), pero obviamente son bestias muy diferentes, por lo que definitivamente no es una comparación de igual a igual.

Quizás no tan optimizado como F #, pero para la mayoría de los casos de uso de FP diarios, más que suficiente.

También está bastante claro que un mejor soporte para la inmutabilidad (especialmente para el enhebrado) está en la mente del equipo del lenguaje C # para su consideración futura.

Mi dinero está en C # mejorando en FP, y siendo la oferta de .NET FP para la mayoría de los propósitos del día a día. Por supuesto, habrá algún uso de F #, pero (puramente subjetivo) simplemente no veo que haya una gran migración.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top