• [^] # Re: La programmation clusterisée à la porte de tous ? Un livre sur Erlang

    Posté par . En réponse à la dépêche La programmation clusterisée à la portée de tous ? Un livre sur Erlang. Évalué à 6.

    > Dans ce type de langages (langages fonctionnels ou déclaratifs) la
    > récursivité est une méthode de programmation naturelle, ce qui ne rend
    > pas forcément la sémantique d'un programme très lisible - la plupart des
    > algorithmes n'étant pas intuitivement récursifs.

    Là, je ne suis pas d'accord. Cela paraît effectivement bizarre au premier abord de traiter la plupart des problèmes sous forme récursive. Seulement, lorsqu'on y a gouté et que l'on s'est imprégné du raisonnement, on finit par raisonner naturellement de cette manière. Les algorithmes sont en général plus concis.

    Un ami, qui a développé pendant un certain temps en Erlang, s'est mis à intégrer la récursivité dans son mode de raisonnement. Il a ensuite dû programmer en Python et trouvait que son programme ramait, occupaiut l'ensemble de la mémoire, etc. En fait, il avait utilisé la récursivité dans ses programmes Python, mais le langage n'est pas optimiser pour cela et on fait rapidement exploser son programme (Je ne sais pas si c'est encore le cas, mais Python ne proposait pas d'optimisation de la pile d'appel des programmes en cas d'appel de fonction récursif terminal. La récursivité terminale permet de programmer des fonctions récursives sans faire exploser la pile d'appel de fonctions).

    Tout cela pour dire que si la récursivité est peu employée, c'est surtout parce que traditionnellement, les langages ne sont pas prévus pour la supporter de manière efficace. Erlang, ou Lisp par exemple, permette d'utiliser la récursivité abondamment.

    Franchement, en essayant Erlang et en s'accrochant un peu, on a ensuite vraiment du mal à revenir à un autre langage.

    Dans les livres de programmation, on présente l'algorithme factoriel pour expliquer la récursivité et on s'en tient en général là. On a alors l'impression que la récursivité s'applique à des cas biens particuliers de traitement. En pratique, c'est un outil extrêmement puissant, qui me manque dans les autres langages.

    Dans le bouquin, j'explique que la récursivité permet notamment de faire des boucles dont le traitement peut être contrôlé bien plus finement que la simple boucle for. La récursivité est plus difficile à assimiler, mais c'est un outil extrêmement puissant, qui va au-delà du simple exemple universitaire classique.

    Mickaël