¿Es la programación funcional relevante para el desarrollo web? [cerrado]

88

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'?

Odia_
fuente

Respuestas:

31

Algunos ejemplos en la parte superior de mi cabeza:

  • Yahoo! La tienda funciona con Lisp (originalmente llamado Viaweb antes de la adquisición)
  • Reddit fue completamente prototipado en Lisp, aunque cambiaron a Python en 2005
  • Hacker News está escrito completamente en Arc (un dialecto Lisp)
Greg caso
fuente
7
Yahoo! Store se reescribió en c ++ hace unos años.
APG
5
lenguaje! = paradigma de programación.
phkahler
58
Extraña elección de ejemplos ... Yahoo! Store fue escrito por Paul Graham, quien es un gran defensor de Lisp. También escribió Hacker News, que es, efectivamente, un clon de Reddit. Presumiblemente, HN se escribió algo en respuesta al cambio de Reddit de Lisp a Python, mientras que los chicos de Reddit eran parte de YCombinator: un programa de aceleración que está dirigido por Paul Graham. Contaría esto como UN ejemplo, no como tres.
Brandon Bloom
La configuración del servidor de @ShermPendley, la configuración de la red y el acceso a la base de datos también son factores importantes en el rendimiento. Los tiempos de ejecución de secuencias de comandos de las aplicaciones web suelen ser una pequeña fracción del costo total.
AgmLauncher
62

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.

JacquesB
fuente
20

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.

Sherm Pendley
fuente
20

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.

Chris Conway
fuente
4

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

Ryan Teo
fuente
3

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.

Alemán
fuente
3

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.

Cyrus Omar
fuente
3

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.

Peter Scott
fuente
2

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.

Chuck McKnight
fuente
2

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

Marcus Westin
fuente
2

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.

Gordon Guthrie
fuente
2

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.

A_Var
fuente
1

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.

rbanffy
fuente
1

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í.

Yoric
fuente
1

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 .

gopi
fuente
0

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.

Amit Agrawal
fuente
-2

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.

Joel
fuente
1
En realidad, Paul Graham dice que la gran ventaja de Lisps es que es el lenguaje "más poderoso" disponible. Él apoya su argumento diciendo que algo así como una cuarta parte de viaweb (por líneas) eran macros Lisp. La metaprogramación en la mayoría de los lenguajes (particularmente los disponibles a mediados de los 90) es difícil. No es un prototipo si se envía al servidor de producción.
nmichaels