Estoy tratando de visualizar algunos sistemas físicos automáticos simples (cosas como péndulos, brazos robóticos, etc.) en Haskell. A menudo, esos sistemas pueden describirse mediante ecuaciones como
df/dt = c*f(t) + u(t)
donde u(t)
representa algún tipo de "control inteligente". Esos sistemas parecen encajar muy bien en el paradigma de programación reactiva funcional.
Así que tomé el libro "The Haskell School of Expression" de Paul Hudak y descubrí que el lenguaje específico del dominio "FAL" (para Functional Animation Language) que se presenta allí en realidad funciona bastante bien para mis sistemas de juguetes simples (aunque algunas funciones, en particular integrate
, parecía ser un poco perezoso para un uso eficiente, pero fácilmente reparable).
Mi pregunta es, ¿cuál es la alternativa más madura, actualizada, bien mantenida y ajustada al rendimiento para aplicaciones más avanzadas o incluso prácticas en la actualidad?
Esta página wiki enumera varias opciones para Haskell, pero no tengo claros los siguientes aspectos:
El estado de "reactivo", el proyecto de Conal Eliott que es (según tengo entendido) uno de los inventores de este paradigma de programación, parece un poco obsoleto. Me encanta su código, pero tal vez debería probar otras alternativas más actualizadas. ¿Cuál es la principal diferencia entre ellos, en términos de sintaxis / rendimiento / estabilidad en tiempo de ejecución?
Para citar una encuesta en 2011, Sección 6, " ... las implementaciones de FRP todavía no son lo suficientemente eficientes o predecibles en el rendimiento para ser utilizadas de manera efectiva en dominios que requieren garantías de latencia ... ". Aunque la encuesta sugiere algunas optimizaciones posibles interesantes, dado el hecho de que el FRP está ahí durante más de 15 años, tengo la impresión de que este problema de rendimiento podría ser algo muy o incluso inherentemente difícil de resolver al menos dentro de unos años. ¿Es esto cierto?
El mismo autor de la encuesta habla de "fugas de tiempo" en su blog . ¿El problema es exclusivo de FRP o es algo que generalmente tenemos cuando programamos en un lenguaje puro y no estricto? ¿Alguna vez le ha resultado demasiado difícil estabilizar un sistema basado en FRP a lo largo del tiempo, si no es lo suficientemente eficaz?
¿Sigue siendo un proyecto de nivel de investigación? ¿Las personas, como ingenieros de planta, ingenieros en robótica, ingenieros financieros, etc., las utilizan realmente (en cualquier idioma que se adapte a sus necesidades)?
Aunque personalmente prefiero una implementación de Haskell, estoy abierto a otras sugerencias. Por ejemplo, sería particularmente divertido tener una implementación de Erlang --- ¡entonces sería muy fácil tener un proceso de servidor inteligente, adaptable y de autoaprendizaje!