He estado viendo mucho recientemente sobre programación funcional y Clojure parece particularmente interesante. Si bien "entiendo" la descripción básica de lo que es, no puedo imaginar cómo lo usaría en el día a día como desarrollador web, si es que puedo. Mucho de lo que he leído se centra en el lado matemático de la programación funcional en lugar de situaciones de programación típicas que se encuentran en OO regular.
¿Tengo el extremo equivocado del palo? ¿La programación funcional es totalmente ajena al desarrollo web? Si no es así, ¿hay algún ejemplo de que se utilice 'para la web'?
La programación funcional se adapta muy bien a las aplicaciones web. La aplicación web recibe una solicitud HTTP y produce un resultado HTML. Esto podría considerarse una función de las solicitudes a las páginas.
Compare con las aplicaciones de escritorio, donde normalmente tenemos un proceso de larga ejecución, una interfaz de usuario con estado y un flujo de datos en varias direcciones. Esto es más adecuado para OO, que se preocupa por los objetos con estado y paso de mensajes.
fuente
No veo por qué no, siempre que entregue HTML compatible con los estándares a los navegadores, a ellos no les importa lo que utilizó para producirlo, ya sea un lenguaje funcional, un lenguaje imperativo o monos entrenados.
fuente
Puro posible que la programación funcional no se corresponda muy bien con el entorno de programación web. Pero el principal impedimento es solo la falta de infraestructura (frameworks y API). Pasará mucho tiempo (probablemente nunca, sinceramente) antes de que un lenguaje funcional tenga un entorno de programación web tan rico como Java, Python o Ruby.
Dicho esto, hay algunas opciones.
No tengo ninguna experiencia con ninguno de estos. Quizás los comentaristas puedan opinar sobre lo que les ha funcionado bien.
fuente
Twitter reescribió su backend en Scala , un lenguaje JVM que admite tanto el paradigma orientado a objetos como el funcional.
Además, el marco web Lift está escrito en Scala.
fuente
Para Clojure, hay una startup interesante (TheDeadline) que se desarrolló usando Clojure y Google App Engine. Tienen un buen ppt en Slideshare y una entrevista en InfoQ.
Para una buena discusión sobre la implementación de Clojure con GAE: http://news.ycombinator.com/item?id=1239788
Hasta donde yo sé, Clojure tiene algunas bibliotecas de desarrollo web. Conjurar anillo Compojure
Espero que esto responda a algunas de tus preguntas =) (Yo también estoy comenzando ...)
Mejor, Ryan
fuente
No es totalmente ajeno al desarrollo web. La aplicación que se encuentra en el servidor puede aprovechar características funcionales como cierres, funciones de orden superior, inmutabilidad, transparencia referencial ... por ejemplo, seguro que tienes colecciones que necesitas transformar o manipular de cualquier forma. La programación funcional ayuda aquí, y es por una razón que sus modismos están penetrando en los lenguajes convencionales. Las características funcionales ayudan en la concisión, la capacidad de prueba, la paralelización y también pueden proporcionar soluciones nativas a problemas que de otro modo resolvería con patrones.
Actualización: también hay marcos web para lenguajes funcionales. Weblocks para Common Lisp, Lift para Scala. Estos son los que he escuchado, puede haber más ... sin embargo, no necesariamente tiene que ser puramente funcional; por ejemplo, Scala no es puro y debería funcionar con cualquier marco de Java, aún podría utilizar programación funcional para la capa empresarial, etc.
fuente
Consulte Ur / Web . Es muy rápido y su sistema de tipo estático sabe cosas como HTML y SQL, por lo que puede garantizar todo tipo de cosas buenas sobre seguridad.
fuente
Erlang parece estar obteniendo un gran uso en parte de la infraestructura para aplicaciones web escalables. las bases de datos CouchDB y Riak están escritas principalmente en Erlang, al igual que el servidor de cola de mensajes RabbitMQ. Una de las claves de su éxito es que maneja la simultaneidad a través del paso de mensajes, sin un estado mutable compartido. Es esta forma de pensar acerca de los problemas lo que es útil, más que cualquier lenguaje de programación funcional en particular.
O mira MapReduce. Es una forma muy funcional de ver la computación, incluso si su mapa y las funciones de reducción resultan ser internamente con estado, y por esa razón, se adapta muy bien a la consulta de grandes conjuntos de datos de una manera distribuida tolerante a fallas.
Por supuesto, elija lo que le parezca más práctico. Pero mantenga siempre la programación funcional en el fondo de su mente, porque nunca sabe cuándo puede ser útil.
fuente
Están haciendo cosas muy interesantes en la Universidad de Edimburgo con programación funcional para la web.
fuente
El lenguaje y el paradigma no importan para las aplicaciones web, todas son igualmente buenas y malas. Si está buscando una razón para aprender un nuevo paradigma, simplemente sumérjase. Mi consejo sería analizar el problema que está tratando de resolver y seleccionar el conjunto de herramientas apropiado.
fuente
Javascript (el lenguaje de la parte FE de la web y cada vez más también el BE) no es funcional per se, pero las funciones son funcionales de primer orden
fuente
Acabamos de lanzar una hoja de cálculo en línea donde el backend está escrito completamente en Erlang.
http://hypernumbers.com
Según los estándares, esta es una de las aplicaciones web más complejas que puede crear con una GUI descomunal con complejidad mental.
fuente
Aquí hay una experiencia de desarrollador web en la creación de aplicaciones web con Haskell . Aunque los lenguajes funcionales son muy seguros para los tipos y tienen buena concurrencia, siempre les faltó lo mejor de las api de la raza, ya que ha sido el favorito de la academia desde hace mucho tiempo y aún no se ha adoptado con fuerza en el mundo real. Espero que no esté muy lejos. Erlang ya se había metido en eso.
fuente
La razón por la que la programación funcional es popular entre la programación web es que expresa el estado compartido y cambiante y permite al programador expresar las partes puramente funcionales como funciones puras. Las funciones puras tienen la ventaja de ser muy sencillas de ejecutar en paralelo, ya que no tienen efectos secundarios.
Al menos esa es mi razón.
fuente
Otra respuesta corta: http://www.mlstate.com - una plataforma de desarrollo web completa, basada en FP. La semántica limpia del lenguaje permite todo tipo de análisis, optimizaciones, etc. de seguridad automatizados.
Advertencia: trabajo allí.
fuente
Es posible que los lenguajes funcionales no sean directamente útiles para crear grandes aplicaciones, pero utilizamos el paradigma de programación funcional en gran medida para crear nuestras aplicaciones. La programación funcional pura pone la restricción de "no tener efectos secundarios". Esto asegura que las llamadas funcionales puras producirán el mismo resultado en cualquier orden en que se llamen. Esto no es ideal para el desarrollo web, pero si la programación funcional se combina con un sistema que cambia de estado, se puede construir una aplicación web robusta. Eche un vistazo a mi artículo para más detalles: Servidor FAST También estas diapositivas .
fuente
Sí, como la programación funcional se puede realizar en cualquier lenguaje, puedes usarla como desarrollador web en el día a día.
¿Deberías? depende del problema que esté resolviendo. La programación funcional es un paradigma de programación y dónde debe usarla depende del problema que esté resolviendo.
Para simplificar la decisión, piense si es más fácil resolver algún problema mediante el uso de conceptos de OOP, donde la encapsulación, el polimorfismo y las características similares a la herencia pueden hacer su vida más fácil.
Si es así, no vaya a la programación funcional allí y simplemente use OOP. Si su aplicación va a realizar cálculos / cálculos / lógica de negocios complejos y que implican un procesamiento muy concurrente, la programación funcional puede ofrecer muchas herramientas y ventajas en tales casos.
Estos son solo diferentes estilos para construir la estructura y los elementos de los programas, por lo que se trata de usar la herramienta adecuada para el trabajo correcto. Descanse, cualquier cosa se puede hacer usando cualquier cosa.
Programación funcional en desarrollo web:
JavaScript es compatible con la programación funcional y es de gran ayuda cuando estamos en el contexto del desarrollo web. El marco de trabajo React está muy influenciado por los principios de programación funcional y se utiliza en muchas aplicaciones web.
Además, puede encontrar muchas aplicaciones web creadas y ejecutándose con marcos desarrollados en lenguajes de programación funcionales que se enumeran a continuación:
• WebSharper (F #)
• Snap (Haskell)
• Ascensor (Scala)
• Ocsigen (OCaml)
• Chicago Boss, Zotonic (erLang)
Espero que mi respuesta ayude a cualquiera.
fuente
Probablemente no lo use y no debería usarlo, pero cuando dice que alguien siempre encontrará una excepción a la regla (Viaweb, etc.). Básicamente, no hay un "superlenguaje", solo hay líneas de código que funcionan, generalmente en "Blub". Incluso Paul Graham dice que el principal (de hecho, el único) beneficio de un Lisp es la capacidad de crear prototipos rápidamente.
Además, los "superlenguajes" suelen afectar en lugar de aumentar la legibilidad del código, lo que significa que el "genio" que lo escribió tiene que mantenerlo para siempre, ya que nadie más puede entenderlo, especialmente porque es probable que lo escriba en su propio dialecto modificado. Esto disminuye el alcance posible de cualquier proyecto, lo que significa que incluso si se pueden hacer cosas nuevas e innovadoras, no son extensibles y, por lo tanto, permanecen a una escala relativamente pequeña (como Hacker News en Arc).
Eso no quiere decir que alguien no pueda tener una idea genial e implementarla en un estilo incomprensible que luego pueda reescribirse en Blub y extenderse para que mucha gente pueda beneficiarse de ella. En realidad, eso es exactamente lo que ha sucedido en todas las historias de éxito de Lisp, sin mencionar a todos los filósofos famosos que han existido. Pero, por supuesto, si eres un "genio", es posible que también puedas crear un prototipo de tu producto de otra manera.
En cuanto a FP en la JVM, hay cosas limitadas pero interesantes posibles. Aunque personalmente lo usaría solo para la creación de prototipos, es posible que tenga un caso de uso (generalmente algo relacionado con subprocesos múltiples) donde brinde alguna mejora.
fuente