Le C peut le faire ?? Je me coucherai moins bête ce soir !
C’est imprécis mais c’est pas faux. Dans les langages fonctionnel la récursion terminal est dans la norme car sans elle tu ne peux rien faire ; je doute fortement qu’elle soit dans une norme C ou C++... Donc tu ne peux pas vraiment te baser dessus si tu veux faire un programme portable.
— Le C, ok pour certain compilateur avec certaine option s’optimisation
— Pour Java
Chaque vendeur de Java VM fait ce qu’il veut. La JVM fournie par Sun, qui est de fait l’implémentation de référence, n’effectue pas cette transformation
— Python ne le fait pas
— Ruby c’est pas dans la norme
— F# le fait (fonctionnel) mais
la plate-forme .NET ne sait pas, en général, optimiser correctement les tail calls.
Bref, à moins qu'un compilateur pour langage fonctionnel ait des mécanismes permettant de plus facilement convertir une récursion « normale » en récursion terminale1, il n'y a absolument aucun avantage en termes d'optimisation à choisir un langage fonctionnel plutôt qu'impératif.
Pour résumer l’optimisation est présentes chez tout les langages fonctionnelles dans la norme ; présent accessoirement chez quelque compilateur de certains langages impératifs et absent dans beaucoup d’autre.
Après personne ne dit qu’il faut utiliser des langages fonctionnel uniquement pour cette optimisation ; mais plutôt que sans cette optimisation tu ne peux pas vraiment faire de programmation fonctionnelle.
La programmation fonctionnel est intéressante davantage pour ses variables immutables, son système de type, ses facilité de parallélisation, etc.
[^] # Re: C'est pourtant évident.
Posté par Diagonale de Cantor (site web personnel) . En réponse à la dépêche Coder efficacement, bonnes pratiques et erreurs à éviter. Évalué à 5.
Le C peut le faire ?? Je me coucherai moins bête ce soir !
C’est imprécis mais c’est pas faux. Dans les langages fonctionnel la récursion terminal est dans la norme car sans elle tu ne peux rien faire ; je doute fortement qu’elle soit dans une norme C ou C++... Donc tu ne peux pas vraiment te baser dessus si tu veux faire un programme portable.
Si j’en croix le site http://blog.fastconnect.fr/?p=174 on a
— Le C, ok pour certain compilateur avec certaine option s’optimisation
— Pour Java
— Python ne le fait pas
— Ruby c’est pas dans la norme
— F# le fait (fonctionnel) mais
Pour résumer l’optimisation est présentes chez tout les langages fonctionnelles dans la norme ; présent accessoirement chez quelque compilateur de certains langages impératifs et absent dans beaucoup d’autre.
Après personne ne dit qu’il faut utiliser des langages fonctionnel uniquement pour cette optimisation ; mais plutôt que sans cette optimisation tu ne peux pas vraiment faire de programmation fonctionnelle.
La programmation fonctionnel est intéressante davantage pour ses variables immutables, son système de type, ses facilité de parallélisation, etc.