¿Por qué lenguajes funcionales? [cerrado]
Veo que se habla mucho aquí sobre lenguajes funcionales y esas cosas. ¿Por qué usarías uno en lugar de un idioma "tradicional"? ¿Qué hacen mejor? ¿En qué son peores? ¿Cuál es la aplicación de programación funcional ideal?
Los lenguajes funcionales utilizan un paradigma diferente al de los lenguajes imperativos y orientados a objetos. Utilizan funciones libres de efectos secundarios como elemento básico del lenguaje. Esto permite muchas cosas y hace que muchas cosas sean más difíciles (o, en la mayoría de los casos, diferentes de lo que la gente está acostumbrada).
Una de las mayores ventajas de la programación funcional es que el orden de ejecución de las funciones libres de efectos secundarios no es importante. Por ejemplo, en Erlang esto se usa para habilitar la concurrencia de una manera muy transparente.
Y debido a que las funciones en los lenguajes funcionales se comportan de manera muy similar a las funciones matemáticas, es fácil traducirlas a lenguajes funcionales. En algunos casos, esto puede hacer que el código sea más legible.
Tradicionalmente, una de las grandes desventajas de la programación funcional era también la falta de efectos secundarios. Es muy difícil escribir software útil sin E/S, pero la E/S es difícil de implementar sin efectos secundarios en las funciones. Por lo tanto, la mayoría de la gente nunca sacó más provecho de la programación funcional que calcular una única salida a partir de una única entrada. En lenguajes modernos de paradigma mixto como F# o Scala esto es más fácil.
Muchos lenguajes modernos tienen elementos de lenguajes de programación funcionales. C# 3.0 tiene muchas características de programación funcional y también puedes realizar programación funcional en Python. Creo que las razones de la popularidad de la programación funcional se deben principalmente a dos razones: la concurrencia se está convirtiendo en un problema real en la programación normal, porque cada vez tenemos más computadoras multiprocesador; y los idiomas son cada vez más accesibles.
No creo que haya ninguna duda acerca de que el enfoque funcional de la programación "se ponga de moda", porque ha estado en uso (como estilo de programación) durante aproximadamente 40 años. Siempre que un programador de OO escribe código limpio que favorece los objetos inmutables, ese código toma prestados conceptos funcionales.
Sin embargo, los lenguajes que imponen un estilo funcional están recibiendo mucha tinta virtual en estos días, y si esos lenguajes se volverán dominantes en el futuro es una pregunta abierta. Mi propia sospecha es que los lenguajes híbridos y multiparadigmas como Scala u OCaml probablemente dominarán sobre los lenguajes funcionales "puristas" de la misma manera que el lenguaje OO puro (Smalltalk, Beta, etc.) ha influido en la programación convencional pero no ha terminado. como las notaciones más utilizadas.
Finalmente, no puedo resistirme a señalar que sus comentarios sobre FP son muy paralelos a los comentarios que escuché de programadores de procedimientos no hace muchos años:
- El programador "promedio" (mítico, en mi humilde opinión) no lo entiende.
- No se enseña ampliamente.
- Cualquier programa que puedas escribir con él se puede escribir de otra manera con las técnicas actuales.
Así como las interfaces gráficas de usuario y el "código como modelo de negocio" fueron conceptos que ayudaron a que OO fuera más apreciado, creo que un mayor uso de la inmutabilidad y un paralelismo más simple (masivo) ayudará a que más programadores vean los beneficios que ofrece el enfoque funcional. . Pero por mucho que hayamos aprendido en los últimos 50 años aproximadamente que conforman toda la historia de la programación informática digital, creo que todavía tenemos mucho que aprender. Dentro de veinte años, los programadores mirarán hacia atrás con asombro ante la naturaleza primitiva de las herramientas que utilizamos actualmente, incluidos los ahora populares lenguajes OO y FP.
La principal ventaja para mí es su paralelismo inherente, especialmente porque ahora nos estamos alejando de una frecuencia de reloj de CPU más alta y hacia más y más núcleos.
No creo que se convierta en el próximo paradigma de programación y reemplace completamente los métodos de tipo OO, pero sí creo que llegaremos al punto en el que necesitaremos escribir parte de nuestro código en un lenguaje funcional o nuestros lenguajes de propósito general lo harán. crecer para incluir construcciones más funcionales.