programming functional scala haskell f# functional-programming erlang

functional - Lenguajes funcionales(Erlang, F#, Haskell, Scala)



haskell functional programming (10)

  1. Sí, el nitrógeno es un buen ejemplo de un marco web funcional. También se escala.

http://nitrogenproject.com/

1) ¿Son los lenguajes funcionales adecuados para el desarrollo de aplicaciones web?

2) ¿Son los idiomas funcionales adecuados para el tipo de aplicaciones de negocios / ERP / CRM ?


Los lenguajes funcionales proporcionan nuevos tipos de abstracciones que pueden usarse para el desarrollo web. Los servidores web basados ​​en la continuación son, por ejemplo, populares entre los lenguajes funcionales. El servidor web PLT Scheme es compatible con este tipo de desarrollo de aplicaciones web. Puede leer más sobre las continuaciones y su uso en el desarrollo web en wikipedia


Si bien no diría que ningún lenguaje funcional en particular está diseñado para hacer desarrollo web, tampoco diría que no se puede hacer desarrollo web con un lenguaje funcional. Creo que eso depende completamente de los marcos web disponibles para el idioma que elijas y de si hay algún servidor web compatible con el idioma.

Por ejemplo, estoy seguro de que puede usar F # junto con ASP.Net en IIS para realizar el desarrollo web. Dudo que haya soporte para F # en el motor de plantillas, pero definitivamente puedes escribir lógica de negocios en F #.

Del mismo modo, hay mod_haskell para Apache, lo que debería hacer que sea relativamente fácil tener salida dinámica con haskell. Aunque, nunca lo he usado personalmente. Al mismo tiempo, si hay un mod_(erlang or scala) para Apache, sería igualmente fácil para esos idiomas.

En definitiva, creo que la naturaleza apátrida de los lenguajes funcionales debería hacerla adecuada para un marco web de estilo MVC sin estado. Sin embargo, creo que realmente se trata de qué herramientas y marcos están disponibles para facilitarle la vida cuando trabaja con estos idiomas. Por ejemplo, Ruby no era muy popular para el desarrollo web hasta que los rieles se volvieron populares, y realmente no me gustaba hacer nada webby con Python hasta que encontré django.


Una de las mayores ventajas de los defensores de los lenguajes funcionales es que hacen que sea más fácil escribir programas que se pueden ejecutar en paralelo. Pero las aplicaciones web generalmente no tienen problemas con el paralelismo. Normalmente, el servidor web / servidor de aplicaciones mantiene un conjunto de hilos, y cada solicitud de usuario se asigna a un hilo diferente, que puede ejecutarse en un procesador físico diferente. Por lo tanto, puede aprovechar múltiples procesadores sin demasiados problemas. El truco es que las aplicaciones web se caracterizan por un gran número de solicitudes pequeñas, y los hilos y lenguajes imperativos funcionan bien allí. Donde los idiomas imperativos comienzan a descomponerse es cuando tiene un pequeño número de solicitudes computacionalmente costosas.

Otra gran ventaja de los lenguajes funcionales es que, dado que las funciones no tienen efectos secundarios, las pruebas son más fáciles. Probas cada función de forma aislada en algunas de sus entradas, y sabes que el sistema funcionará. Pero, hay una trampa. Si su operación implica entrada o salida, usa una mónada en lugar de una función, y pierde este beneficio de prueba para esa parte de su código.

Pero, por lo general, las aplicaciones web implican leer información de una solicitud, realizar solicitudes a una base de datos, leer la respuesta de la base de datos y formatear una respuesta. Eso es mucho y mucho IO, o mónadas, y muy poca oportunidad para las funciones.

Dadas estas características de las aplicaciones web, ¿qué beneficios aportan los lenguajes funcionales a la programación de aplicaciones web?


La mayoría de los lenguajes funcionales, es decir, los que ha incluido, se consideran lenguajes de propósito general. Para el desarrollo web, consideraría profundamente usar Clojure o Scala. Ambos tienen muy buenos frameworks web, y ambos se ejecutan en JVM. Puedo recomendar totalmente Clojure y Scala, pero no tanto para los demás.

Haskell tiene un marco web, pero nunca lo he usado.

¿Aplicaciones de negocios? Seguro Por qué no. Los lenguajes funcionales son geniales para casi cualquier cosa.


Los lenguajes funcionales son buenos para cualquier cosa que desee usarlos.

Sin embargo, desarrollar aplicaciones en estos días no es tan simple como usar un lenguaje de programación. La ventaja de Java, C #, etc. es que vienen con grandes bibliotecas y otras características del entorno que son absolutamente necesarias al crear software comercial. La mayoría de los lenguajes funcionales no tienen ese gran soporte (¿todavía?).

F # podría ser prometedor ya que está en el entorno .NET y puede aprovechar las herramientas disponibles allí (corrígeme si me equivoco).

Este artículo describe cómo se utilizó Lisp, un lenguaje funcional temprano, para crear una aplicación basada en web con éxito.


Los lenguajes funcionales son muy adecuados para el desarrollo de aplicaciones web, Scala en particular.

Eche un vistazo al marco Lift para obtener más información.


Yaws es un fantástico servidor web para Erlang.


2) ¿Son los idiomas funcionales adecuados para el tipo de aplicaciones de negocios / ERP / CRM?

Para abordar el segundo punto sobre las aplicaciones de negocios / ERP / CRM: personalmente no implementaría estos en un lenguaje funcional "puro" como Haskell, o un lenguaje funcional dinámico como Clojure. Por otro lado, actualmente estoy implementando un ERP en Scala, que por supuesto es OOP / FP híbrido y compilado estáticamente.

La razón por la que digo esto es que una aplicación empresarial como un ERP está fundamentalmente orientada a registros: hay un esquema de datos que expresa los diferentes tipos de registros y la lógica de la aplicación se diseña casi totalmente CRUZANDO esos registros y aplicando flujos de trabajo de negocios personalizados. Y, fundamentalmente, no creo que este tipo de aplicaciones comerciales centradas en datos sean una excelente opción para el modelo funcional.

Las personas pueden hablar sobre el desajuste relacional OOP todo lo que les gusta, pero en última instancia tanto OOP como bases de datos están orientadas a registros: un lenguaje OOP con un buen ORM le permite mapear esos diferentes modelos de datos en su código y luego adjuntar el código para manejar cada uno de los modelos. Y tener este tipo estáticamente (idealmente con un ORM fuertemente tipado como squeryl de Scala) reduce enormemente las posibilidades de un error de tiempo de ejecución o, por ejemplo, un cambio en uno de los modelos de datos que no se aplica correctamente a través del código.

No me malinterpreten: soy un gran admirador de FP (estoy haciendo más y más de la programación de mi sistema en Haskell), pero para mí el enfoque orientado a registros de OOP tiene más sentido que el enfoque orientado a funciones de FP para disputar los objetos de datos de un ERP empresarial o similar. (Scala es una buena excepción a la regla porque puede usar el paradigma de OOP con ORM de calidad para la manipulación de registros, pero también la bondad de FP para su programación general de aplicaciones).


Los lenguajes funcionales del tipo que describe son lenguajes de programación de propósito general, se usan para todo tipo de cosas, incluidas aplicaciones web y aplicaciones comerciales. (Yo uso Haskell).

Como implica Gabor, en última instancia se trata de bibliotecas. Scala tiene un marco web: ascensor. Haskell tiene happstack , así como 2100 4400 (en 2010 2012) bibliotecas en Hackage para todo tipo de cosas.

Realmente no se trata tanto del lenguaje, como de la cadena de herramientas, cuando se consideran dominios especializados en particular.