J'essaie de visualiser quelques systèmes physiques automatiques simples (tels que le pendule, les bras de robot, etc.) dans Haskell. Souvent, ces systèmes peuvent être décrits par des équations comme
df/dt = c*f(t) + u(t)
où u(t)
représente une sorte de «contrôle intelligent». Ces systèmes semblent s'intégrer très bien dans le paradigme de la programmation réactive fonctionnelle.
J'ai donc attrapé le livre "The Haskell School of Expression" de Paul Hudak, et j'ai trouvé que le langage spécifique au domaine "FAL" (pour Functional Animation Language) présenté ici fonctionne en fait assez bien pour mes systèmes de jouets simples (bien que certaines fonctions, notamment integrate
, semblait un peu trop paresseux pour une utilisation efficace, mais facilement réparable).
Ma question est la suivante: quelle est l'alternative la plus mature, à jour, bien entretenue et optimisée pour les applications plus avancées ou même pratiques aujourd'hui?
Cette page wiki répertorie plusieurs options pour Haskell, mais je ne suis pas clair sur les points suivants:
Le statut de «réactif», le projet de Conal Eliott qui est (si je comprends bien) l'un des inventeurs de ce paradigme de programmation, semble un peu dépassé. J'adore son code, mais je devrais peut-être essayer d'autres alternatives plus récentes? Quelle est la principale différence entre eux, en termes de syntaxe / performances / stabilité à l'exécution?
Pour citer une enquête de 2011, section 6, " ... les implémentations de FRP ne sont toujours pas suffisamment efficaces ou suffisamment prévisibles en termes de performances pour être utilisées efficacement dans des domaines qui nécessitent des garanties de latence ... ". Bien que l'enquête suggère quelques optimisations possibles intéressantes, étant donné que FRP est là depuis plus de 15 ans, j'ai l'impression que ce problème de performance pourrait être quelque chose de très ou même intrinsèquement difficile à résoudre au moins dans quelques années. Est-ce vrai?
Le même auteur de l'enquête évoque les "fuites de temps" dans son blog . Le problème est-il propre à FRP, ou quelque chose que nous rencontrons généralement lors de la programmation dans un langage pur et non strict? Avez-vous déjà trouvé trop difficile de stabiliser un système à base de FRP au fil du temps, sinon assez performant?
Est-ce toujours un projet de niveau recherche? Les gens comme les ingénieurs d'usine, les ingénieurs en robotique, les ingénieurs financiers, etc. les utilisent-ils réellement (dans le langage qui correspond à leurs besoins)?
Bien que je préfère personnellement une implémentation Haskell, je suis ouvert à d'autres suggestions. Par exemple, il serait particulièrement amusant d'avoir une implémentation Erlang - il serait alors très facile d'avoir un processus serveur intelligent, adaptatif et auto-apprenant!