Je regarde les nouvelles fonctionnalités de C ++ 11 et on dirait vraiment qu'il sera possible de programmer dans un style de programmation très fonctionnel en l'utilisant. J'ai été utilisé pour utiliser la liste des types, SEQ, la matrice en F # et je ne vois aucune raison pour que leurs membres ne puissent pas être portés dans une sorte de modèle C ++ 11. Quels problèmes ou quels avantages voyez-vous dans l'utilisation de C ++ 11 vs quelque chose comme F # pour un style de programmation fonctionnel mixte? Peut-être que les gars de boost feront un nouveau fonctionnel code> une fois C ++ 11 sort. P>
5 Réponses :
J'imagine que ce serait ... Intéressant ... Pour mettre en œuvre certaines optimisations communes aux langues fonctionnelles de C ++ 0x (comme une élimination commune de subexpression). P>
La plupart des compilateurs C et C ++ font CSE et GCSE. Ce n'est pas le problème. Le problème implique une application de fonction partielle et une récursion de la queue.
Le plus gros problème d'essayer de programmer dans un style fonctionnel en C ++ est qu'il ne prend pas en charge la récursion de la queue. Dans une langue fonctionnelle, vous n'avez pas à vous soucier de l'explosion de la pile lorsque vous avez la queue recueille correctement, mais en C ++, vous devez toujours vous inquiéter de cela. Par conséquent, de nombreux algorithmes de type "fonctionnels" seront maladroits ou lourds. P>
Pas tout à fait vrai. Les compilateurs C ++ les plus populaires d'aujourd'hui manipuleront correctement la récursion de la queue, bien que vous souhaitions à spécifier des drapeaux d'optimisation supplémentaires tels que «-O2».
C'est vrai. Indépendamment de ce qu'un compilateur peut faire comme une optimisation, la langue ne fournit pas d'installations pour cette fonctionnalité. Selon elle est dangereuse.
Le problème est que Raii n'est pas compatible avec l'optimisation des appels de queue. Le même problème existe dans F # avec essayer ... Enfin, mais il est plus évident en raison de la explicite de la construction.
Pas vrai. Le compilateur convertit un appel queue en boucle et les boucles fonctionnent bien avec Raii. Vous devez exercer un jugement, mais c'est vrai de chaque langue.
Vous pourriez trouver cela intéressant: p>
http://smellegantcode.wordpress.com/2009/ 01/26 / LINQ-TO-C0X / P>
Merci! Un point de départ pour une mise en œuvre complète serait la gamme de Boost et les bibliothèques d'itérateurs, une combinaison des deux.
Quels problèmes d'avantages voyez-vous à utiliser C ++ 0x vs quelque chose comme F # pour un style de programmation fonctionnel mixte? P> blockQuote>
Le Problème de Funarg ascendant , qui a été débattu dans le contexte de Lisp il y a 40 ans ! p>
Voici quelques-uns des problèmes que j'ai rencontrés en essayant d'écrire du code fonctionnel dans C #, mélangé à quelques friandises de mon temps lorsque j'utilisais toujours C ++: P>
Cela ne me surprendrait pas si plusieurs de ces points étaient réellement possibles en C ++ en utilisant un modèle et un préprocesseur magique, mais vous ne pouvez pas vraiment les utiliser dans un environnement de production, à moins que vous n'ayez de collègues très aventureux et tolérants. p>
J'étais un passionné de Die-Hard C ++ avant. Ensuite, j'ai commencé à utiliser des programmations génériques avec des modèles et des fonctions d'ordre supérieur à l'aide d'objets de fonction. Il était juste trop fatigant d'écrire. Après avoir essayé une langue fonctionnelle, je n'ai jamais regardé en arrière. P>
La référence que vous indiquez (l'algorithme STL, qui n'est pas une classe BTW) concerne une en-tête déjà présente et standard en C ++. C'est-à-dire rien de nouveau. La nouvelle norme C ++ facilite simplement la création des foncteurs passés aux algorithmes déjà existants.