ventajas sobre programacion orientada objetos logica libros funcional desventajas caracteristicas clojure functional-programming

clojure - sobre - ¿La programación funcional es relevante para el desarrollo web?



programacion funcional vs orientada a objetos (18)

Recientemente he estado viendo mucho sobre programación funcional y Clojure parece particularmente interesante. Si bien ''entiendo'' la descripción básica de lo que es, no puedo entender cómo lo usaría día a día como desarrollador web, si es que puedo hacerlo. Mucho de lo que he leído se enfoca en el aspecto matemático de la programación funcional en lugar de las típicas situaciones de programación que se encuentran en OO regular.

¿Tengo el extremo equivocado del palo? ¿La programación funcional no está relacionada con el desarrollo web? Si no, ¿hay algún ejemplo de que se use ''para la web''?


Acabamos de lanzar una hoja de cálculo en línea donde el backend está escrito completamente en Erlang.

http://hypernumbers.com

De todos modos, esta es una de las aplicaciones web más complejas que puedes construir con una GUI descomunal con complejidad mental.


Algunos ejemplos fuera de mi cabeza:

  • Yahoo! La tienda funciona con Lisp (originalmente llamado Viaweb antes de la adquisición)
  • Reddit fue completamente prototipo en Lisp, aunque cambiaron a Python en 2005
  • Hacker News está escrito enteramente en Arc (un dialecto de Lisp)

Aquí hay una experiencia de desarrollador web en la creación de aplicaciones web utilizando Haskell . Aunque los lenguajes funcionales son muy seguros y tienen una buena concurrencia, siempre carecieron de la mejor API, ya que ha sido querida por la academia desde hace mucho tiempo y, sin embargo, ha sido fuertemente aceptada en el mundo real. Espero que no esté muy lejos. Erlang ya se había metido en eso.


Echa un vistazo a 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 la seguridad.


El lenguaje y el paradigma no importan para las aplicaciones web, 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 adecuado.


Erlang parece estar teniendo un gran uso en algunas infraestructuras para aplicaciones web escalables. las bases de datos de CouchDB y Riak están escritas principalmente en Erlang, al igual que el servidor de cola de mensajes de RabbitMQ. Una de las claves de su éxito es que maneja la concurrencia a través del envío de mensajes, sin estado mutable compartido. Es esta manera de pensar acerca de los problemas que es útil, más que cualquier lenguaje de programación funcional en particular.

O bien, mira MapReduce. Es una forma muy funcional de ver la computación, incluso si su mapa y sus funciones de reducción son internamente estables, y por esa razón, es una muy buena opción para consultar grandes conjuntos de datos de una manera tolerante y distribuida.

Por supuesto, ve con lo que te parezca más práctico. Pero siempre mantenga la programación funcional en el fondo de su mente, porque nunca se sabe cuándo podría ser útil.


Están haciendo Links con programación funcional para la web.


Javascript (el lenguaje de la parte FE de la web y cada vez más el BE) no es funcional per se pero las funciones son funcionales de primer orden


La programación funcional coincide muy bien con las aplicaciones web. La aplicación web recibe una solicitud HTTP y produce un resultado HTML. Esto podría considerarse una función de solicitudes a páginas.

Compare con las aplicaciones de escritorio, donde normalmente tenemos un proceso de larga ejecución, una IU con estado y 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.


La razón por la cual la programación funcional es popular entre la programación web es que explicita 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 simples de ejecutar en paralelo, ya que no tienen efectos secundarios.

Al menos esa es mi razón.


Los lenguajes funcionales pueden no ser directamente útiles para crear aplicaciones geniales, pero utilizamos un paradigma de programación funcional para construir nuestras aplicaciones. La programación funcional pura pone la restricción de "sin efectos secundarios". Esto asegura que las llamadas funcionales puras darán el mismo resultado en cualquier orden que se llamen. Esto no es ideal para el desarrollo web, pero si la programación funcional se combina con un sistema de cambio 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 slides .


No está totalmente relacionado con el desarrollo web. La aplicación que se encuentra en el servidor puede aprovechar funciones funcionales como cierres, funciones de orden superior, inmutabilidad, transparencia referencial ... por ejemplo, seguramente tiene colecciones que necesita 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 principales lenguajes. Las características funcionales ayudan en la concisión, la capacidad de prueba, la paralelización, y también pueden proporcionar soluciones nativas a los problemas que de otro modo resolvería con patrones.

Actualización: también hay frameworks web para lenguajes funcionales. Weblocks para Common Lisp, Lift for 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 framework Java, aún podría usar programación funcional para la capa de negocios, etc.


No veo por qué, siempre que entregue HTML compatible con los estándares a los navegadores, no les importa lo que solía producir, ya sea un lenguaje funcional, un lenguaje imperativo o monos entrenados.


Para Clojure, hay un inicio 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. Compojure Ring Conjure

Espero que esto responda algunas de tus preguntas =) (Estoy comenzando también ...)

Mejor, Ryan


Probablemente no lo use y no lo use, pero cuando diga que alguien siempre encontrará una excepción a la regla (Viaweb, etc.). Básicamente no hay un "súper lenguaje", solo hay líneas de código de trabajo, generalmente en "Blub". Incluso Paul Graham dice que el beneficio principal (de hecho) de un Lisp es la capacidad de prototipar rápidamente.

Además, los "superlenguajes" suelen afectar más que aumentar la legibilidad del código, lo que significa que el único "genio" que lo escribió debe 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, por lo que permanecen en 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 volver a escribirse en Blub y extenderse para que mucha gente pueda beneficiarse de ello. En realidad, eso es exactamente lo que sucedió en todas las historias de éxito de Lisp, sin mencionar a todos los filósofos famosos que hayan existido. Pero, por supuesto, si usted es un "genio", también podría prototipar su 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 el multi-threading) donde proporciona alguna mejora.



La programación funcional pura puede no corresponderse muy bien con el entorno de programación web. Pero el principal impedimento es solo la falta de infraestructura (marcos y API). Pasará mucho tiempo (probablemente nunca, honestamente) antes de que un lenguaje funcional tenga un entorno de programación web tan rico como Java, Python o Ruby.

Dicho eso, hay algunas opciones.

No tengo ninguna experiencia con ninguno de estos. Tal vez los comentaristas pueden opinar sobre lo que funcionó bien para ellos.


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 automatizados de seguridad y protección, optimizaciones, etc.

Advertencia: yo trabajo allí.