7
votes

Devrais-je utiliser c ++ 11 lambdas maintenant?

Voici mon dilemme: j'aime beaucoup Lambda et j'utilise Boost.Fusion et Phoenix beaucoup. Ils sont assez matures et jouent bien à de nombreux compilateurs.

Qu'en est-il de la C ++ 11 Lambdas? Ils sont vraiment sympas et beaucoup plus faciles à utiliser puis de booster les alternatives (plus de foncteurs!). Les compilateurs récents de la CPI et de la GCC les soutiennent. Mais il y a encore beaucoup d'ICC 9.x et de GCC 4.1 et ci-dessous des systèmes de ne pas mentionner les compilateurs XL et Sun. Les compilateurs offrent-ils des services de soutien Lambda?

J'ai tendance à penser que peut-être que j'attendrais peut-être attendre pour utiliser C ++ 11 caractéristiques de peur que les systèmes plus anciens rejetent le code. Qu'en penses-tu? Attendez que les compilateurs plus âgés disparaissent ou tout simplement le faire?


2 commentaires

@Jagannath - la standardisation jamais complète? Il y avait l'ancien "C ++ 0x est en hexagonie", mais comme je me suis bloqué dans des représailles auparavant, si le 0X est en hexagone, le 20 est donc implicite, de sorte que cela leur donne jusqu'à 8105. J'ai d'abord raconté cette blague il y a tout à fait.


@Steve: Nous devrions connaître le mois prochain après la réunion du comité à Madrid.


4 Réponses :


13
votes

Avez-vous besoin de pouvoir compiler votre code à l'aide d'un compilateur qui ne prend pas en charge C ++ 11 Lambdas?

Si oui, alors vous ne pouvez pas les utiliser (évidemment). Sinon, il n'y a vraiment pas beaucoup de raison pour ne pas les utiliser.

Il y a eu peu de modifications à la spécification des expressions de Lambda en C ++ 11, il n'ya donc guère de risque de les utiliser maintenant. Certainement, il y aura des bugs de compilation occasionnels, mais pour la plupart, ceux-ci sont rares entre eux.

La seule principale caractéristique liée à la Lambda dont je suis consciente qui n'est pas prise en charge par les dernières versions de plusieurs compilateurs prenant en charge les expressions Lambda, qui a été ajoutée en mars dernier, qui permet de convertir implicitement des lambdas de manière captulante en tant que pointeurs de fonction. Visual C ++ 2010 et Intel C ++ 11.1 NE Personne ne supporte pas cela (je n'ai pas une version ultérieure d'Intel C ++ avec laquelle tester, désolé). Visual C ++ 11 prend toutefois en charge la conversion implicite.


2 commentaires

En principe, oui, mais cela peut être 1 à partir de maintenant. De plus, cela pourrait nécessiter d'acheter un compilateur XL plus récent par exemple. Et je ne sais pas si IBM va mettre à niveau certains de leurs compilateurs spécialisés (par exemple, Bluegene)


@AAA: Ensuite, vous devez équilibrer le risque que vous devriez faire du code portant pour travailler sur un plus ancien compilateur demain contre la récompense d'utiliser des expressions Lambda dans votre code aujourd'hui. Je ne sais pas assez de votre situation pour savoir comment cela va travailler. En fin de compte, vous seul pouvez faire cette décision.



5
votes

Vous visez plusieurs compilateurs? Alors non. Si vous connaissez exactement quel (s) compilateur (s) que vous visez, et ils gèrent la syntaxe de la même manière, allez-y et utilisez les nouvelles fonctionnalités!


0 commentaires

1
votes

Dans votre propre code, absolument, allez-y. C'est une excellente idée, en fait.

Pour le travail, Stackoverflow n'est pas le bon endroit à poser. Sauf si vous êtes le décideur à votre lieu de travail et que votre compilateur sait de quoi vous parlez. Auquel cas je vous encourage à être génial.


0 commentaires

3
votes

Mon point de vue est que si vous travaillez sur le code de la bibliothèque, vous devriez probablement attendre. Je veux dire, si vous souhaitez regrouper une bibliothèque ensemble soit pour une distribution open-source ou une utilisation dans un package à plate-forme transversale commerciale, vous ne pouvez guère contrôler la prise en charge du compilateur pour Lambdas et comment elle se comportera. Heureusement, les expressions Lambda, aussi bien, sont surtout sur le sucre syntaxique. Ils n'offrent pas plus de fonctionnalités que les foncteurs traditionnels, ils le rendent simplement plus agréable et plus localisé (bien sûr, je me tromperai peut-être à ce sujet, ma connaissance des utilisations de Lambdas est assez superficielle). Mais, typiquement, une bibliothèque est destinée à cacher la laideur de la mise en œuvre. Et si vous devrez utiliser cette bibliothèque utilisable sur les compilateurs qui ne supportent pas la Lambdas, vous devrez fournir les implémentations alternatives et portables de toute façon. Ainsi, sauf si il y a un gain clair dans l'utilisation de Lambdas dans votre bibliothèque (soit en efficacité (temps de compilation ou temps d'exécution) ou dans l'expérience utilisateur (par exemple, si vous utilisez Lambdas pour faire utiliser votre bibliothèque plus facile ou plus claire ou plus intuitive) ), cela ne vaut probablement pas l'effort.

Toutefois, pour le code côté utilisateur, vous pouvez contrôler plus facilement les plates-formes cible et / ou les compilateurs de votre logiciel. Dans ce cas, si tous les compilateurs que vous prévoyez d'utiliser le support Lambdas .. Ensuite, allez des noix!

Maintenant le point philosophique, les normes sont là pour que les gens soient conformes à eux. Cela inclut bien sûr les personnes qui font les compilateurs, mais aussi les personnes qui les utilisent. Lorsque les gens commencent à écrire de belles bibliothèques et / ou de logiciels nécessitant un soutien de Lambda, les personnes qui souhaitent les utiliser commenceront à se plaindre aux fabricants de compilateurs pour ajouter le support, ce qui motivera à son tour les gens à utiliser Lambdas .. et aussi la balle Obtenez du roulement.

Enfin, en jugant le montant de Buzz que cette nouvelle norme relève et l'enthousiasme qui a construit tout en attendant sa libération, je pense que les programmeurs seront rapides à faire de cette norme "la norme" et les fabricants de compilateurs auront suivre la poursuite pour rester en vie.


1 commentaires

Oui, vous avez raison: les expressions Lambda sont entièrement syntaxiques.