El código resultante de los lenguajes funcionales usa muchas funciones que se ven en distintos grados en idiomas no funcionales. La recolección de basura ha pasado a uso general. La optimización de llamada de cola es done in GCC and VC++.
Los cierres, sin embargo, son un sello distintivo de la programación funcional. No ves uno sin el otro. Si define "lenguajes funcionales" para referirse solo a lenguajes funcionales puros, los dos no son sinónimos, ya que encuentra cierres en lenguajes imperativos que soportan programación funcional (por ejemplo, Javascript y Scheme (que es técnicamente imperativo, aunque el paradigma funcional es usado)). Los cierres pueden implementarse con un spaghetti stack para la pila de llamadas, o copiando variables locales al salir de un marco de pila, o asignando variables locales en el montón y dejando que la recolección de basura se encargue de ellas.
Una vez que tiene cierres, las funciones anónimas son relativamente fáciles (con un intérprete, son realmente fáciles). Con un compilador, la función se convierte en bytecode en tiempo de compilación, y el bytecode (más bien, la dirección del punto de entrada) se asocia en tiempo de ejecución con el entorno actual.
La composición de la función puede confiar en la función anónima. Cuando un compilador encuentra un operador de composición de función f . g
, crea una función anónima que llama a los dos argumentos f
y g
, pasando el resultado de uno como argumento al otro.
Las mónadas se pueden implementar en idiomas OO, simplemente no son tan necesarias como en los lenguajes funcionales puros.Las mónadas de E/S no son demasiado especiales, solo se basan en el hecho de que la plataforma subyacente permite efectos secundarios.
Little nitpick only: No describiría FP como un "nuevo paradigma" ... (simplemente un poco más popular que antes quizás) –