Lenguajes funcionales: qué son, hacia dónde van

Incluso cuando algunos discuten exactamente qué es, la programación funcional sigue atrayendo a los desarrolladores. Y tres de los lenguajes funcionales más populares, Clojure, F # y Scala, están disponibles para mejoras.

La programación funcional tiene un atractivo central para algunos desarrolladores, dice el fundador de Scala, Martin Odersky: "A los programadores en ese segmento les gusta la programación funcional porque hace que el código sea más claro, mejor estructurado y previene muchas clases de errores". Pero algunos argumentan que la programación funcional conduce a un software menos eficiente.

La programación funcional también requiere pensar en la programación de una manera nueva, dice David Stephens, administrador de programas de Microsoft para .Net y portavoz de F #. Las abstracciones pueden ser un problema: "Cuando hace que el código sea más abstracto, cuando se aleja más de la manipulación de bits y pasa explícitamente por bucles, puede llevar más tiempo comprender estas abstracciones".

¿Qué es un lenguaje funcional exactamente?

En sus términos más básicos, la programación funcional se trata de tratar la computación como funciones matemáticas. Además de los lenguajes considerados funcionales desde el principio, Java y C # se han vuelto más funcionales al agregar soporte para expresiones lambda.

Pero una definición precisa de programación funcional puede ser difícil de precisar. El blog Clojurefun cita varias definiciones que cree que son incorrectas, incluida la definición de programación funcional como la habilitación de un estilo funcional con funciones de orden superior o un lenguaje compatible con lambdas. Dice que la definición correcta es un lenguaje que enfatiza funciones y datos inmutables.

Pero la definición preferida del blog de Clojure no es necesariamente correcta, dicen otros. "El autor elige uno que, por cierto, se ajusta mejor a Clojure; no es de extrañar, este es un blog de Clojure", dice Odersky de Scala. "Tengo una interpretación cercana a la suya, pero no igual".

Una función, dice Odersky, es un fragmento de código que asigna entradas a salidas y no tiene otros efectos más allá de eso. "Es la definición matemática de función que estamos usando aquí. A veces, estas funciones se llaman 'puras', para distinguirlas de, digamos, funciones en C." Un lenguaje funcional se enfoca en la programación con funciones puras, lo que lo hace fácil y poderoso, dice Odersky, quien fundó Typesafe, el proveedor de la plataforma de desarrollo de aplicaciones Typesafe JVM.

La programación funcional se puede combinar con otros paradigmas, señala. "Por ejemplo, funcional va muy bien con la orientación a objetos. Scala es un lenguaje funcional en ese sentido. Estoy de acuerdo en que tener lambdas no hace que un lenguaje sea funcional; es necesario pero no suficiente".

El desarrollador de Clojure, Rich Hickey, quien también es CTO en el desarrollador de sistemas Cognitect, está de acuerdo con un argumento principal del blog de Clojure. "El artículo señala correctamente que las funciones de primera clase o de orden superior no son de lo que se trata la programación funcional. La programación funcional consiste en hacer que la programación se parezca más a las matemáticas", dice. Eso dice, todavía queda un espectro de definiciones para la programación funcional, dice Hickey.

Stephens de Microsoft considera que las capacidades funcionales se extienden más allá de los idiomas. "El lenguaje de programación funcional más popular del mundo es Excel", dice. Una simple hoja de cálculo de Excel puede tener una columna con un montón de valores, como A1 X 2. "Esa es una función pura en A1 y A1 no cambia, por lo que está calculando valores a partir de los datos existentes".

La tecnología Language-Integrated Query (Linq) de Microsoft también proporciona programación funcional, dice. "Casi todos los lenguajes de programación ahora están adoptando características de lenguajes funcionales".

Stephens cita los datos inmutables como críticos para la programación funcional. La concurrencia (programas con múltiples subprocesos que operan en datos simultáneamente) también se beneficia de los datos inmutables, señala. "Llamamos a [F #] un primer idioma funcional porque proviene de una herencia de otros idiomas". También es compatible con la programación orientada a objetos y funciona con C # y Visual Basic, dice.

Hickey de Clojure ve la adopción de lenguajes funcionales como una respuesta a la creciente presión a la que se enfrentan los desarrolladores, que tienen que afrontar problemas mayores en estos días. "Para hacerlo, deben reducir la complejidad incidental de sus programas. Ahora se reconoce ampliamente que el estado generalizado y los efectos secundarios son una fuente primaria de complejidad y errores en los programas", dice Hickey. "Si bien es posible reducir la cantidad de estado en programas escritos en lenguajes no funcionales, es dramáticamente más fácil y rápido hacerlo en un lenguaje que hace que la programación funcional sea idiomática y predeterminada".

¿Qué sigue para los tres principales lenguajes funcionales?

Scala, de 13 años, es un idioma principal en la ciencia de datos, dice el fundador de Scala, Odersky. Soportado en la JVM, tiene un estimado de 400,000 a 500,000 usuarios. Los planes a corto plazo exigen que se optimice para Java 8, en el que las instrucciones de código de bytes de la última actualización estándar de Java permitirían a Scala generar código más eficiente.

A largo plazo, Scala obtendrá un sistema de tipo limpio, macros más seguras y más soporte de plataforma, con un backend del compilador LLVM bajo consideración. Se planean más mejoras para mejorar la usabilidad de Scala.js, para compilar Scala en JavaScript.

El Clojure de nueve años, también basado en JVM, se ha utilizado en finanzas, comercio minorista, software y entretenimiento, dice Hickey. "Se ha aplicado en diversas áreas de aplicación, como procesamiento y análisis de transacciones, big data, operaciones de red, análisis predictivo, búsqueda, seguridad y ofertas para el consumidor".

El F # de 11 años fue fundado por Microsoft Research por Don Syme y es supervisado por la Fundación F #. Se utiliza en una amplia gama de aplicaciones y se ejecuta en Linux, OS X, Android, iOS, Windows y navegadores. "En lo que estamos trabajando ahora es en hacerlo funcionar con .Net Core", una versión modular multiplataforma de código abierto de .Net Framework, dice Stephens. La interpolación de cadenas, que facilita la escritura de cadenas, está en la mesa de dibujo.