IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez C++ Discussion :

Les lambdas de C++0x


Sujet :

Contribuez C++

  1. #1
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut Les lambdas de C++0x
    Salut tout le monde,

    Vous le savez probablement, il y aura pas mal de nouveautés dans C++0x (mais pas les concepts), dont une que l'on appelle les lambda expressions. Il s'agit simplement de pouvoir écrire des fonctions anonymes (le nom provient du lambda calcul).

    Voici, entre autres, un exemple de code utilisant cette nouvelle possibilité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::find_if(employees.begin(), employees.end(),
    [&](const employee& e) { return e.salary() >= min salary && e.salary() < u limit; });
    Cela permettra de définir à la volée des fonctions afin d'écrire plus lisiblement, facilement et intuitivement des traitements sur des conteneurs standard, par exemple.

    Ceci pourrait intéresser pas mal de personnes : un petit guide sur les lambdas de C++0x.
    http://software.intel.com/en-us/blog...-lambdas-in-c/

    N'hésitez pas à poster en enfilade d'autres liens sur le sujet.

    Bonne lecture

  2. #2
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Désolé si cela a déjà été mentionné:
    http://blogs.msdn.com/vcblog/archive...10-part-1.aspx
    Un autre exellent article sur les lambdas

  3. #3
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Quand j'aurai un peu de temps, j'essayerai d'en rédiger un, aussi complet que possible. J'attends 1/ d'avoir le temps 2/ de voir s'ils vont intégrer les poly-lambdas

    Bon Intel bassine pas mal les gens en disant que ça sera pratique pour les créations de threads en une ligne, ou les parallel_for etc... mais il n'y a pas que ça. Pouvoir créer une fonction à la volée comme ça c'est bien sympa

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par Alp Voir le message
    Quand j'aurai un peu de temps, j'essayerai d'en rédiger un, aussi complet que possible. J'attends 1/ d'avoir le temps 2/ de voir s'ils vont intégrer les poly-lambdas
    J'avais en tête qu'il était déjà commencé, non

    Ou peut-être est-ce florian qui l'avait entamé

    Quoi qu'il en soit, il est effectivement plus intéressant d'attendre le moment où nous saurons effectivement de manière certaine ce qui sera intégré...

    Car, si c'est pour lancer un article maintenant et le mettre à jour dans trois mois lorsque les discussions sur le sujet seront closes (mais avant la sortie "officielle" de la norme, cela ne vaut peut être pas tout à fait la peine, surtout si tu es "over booké"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,J'avais en tête qu'il était déjà commencé, non

    Ou peut-être est-ce florian qui l'avait entamé
    Non, rien n'a été entamé pour le moment sur les lambdas.

    Mais avec le report de l'intégration des concepts (sur lesquels un article avait été commencé ), ça va peut-être laisser de la place pour des nouvelles choses, comme les polymorphic lambdas... Et ça, ça serait top.

    Au passage, pour tous les lecteurs, voici la dernière version de la proposition concernant les lambda expressions : http://www.open-std.org/JTC1/SC22/WG...2009/n2903.pdf

    Une version révisée devrait être publiée d'ici peu;

  6. #6
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Avez-vous essayé les premières implémentations des lambdas ? GCC a une branche lambda que je n'ai pas essayé.

  7. #7
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Citation Envoyé par metagoto Voir le message
    Avez-vous essayé les premières implémentations des lambdas ? GCC a une branche lambda que je n'ai pas essayé.
    Pas encore pour ma part, mais ça ne saurait tarder.
    Mais j'attends avec une énorme impatience qu'ils les rendent polymorphes, comme sur boost.lambda.

  8. #8
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    J'ai un article sous le coude (écrit par ma pomme hein) sur les lambda... J'attends de voir si ça bouge encore. (notamment sur les polymorphic lambda, faudra que je me forme plus).
    Pour avoir des output moi j'utilise VS 2010 bêta.
    Pour la branch de gcc qui les supporte j'ai jamais tenté le coup.
    Par contre ouai c'est vraiment une feature bien sympas (les foncteurs c'est lourd à force).
    Par contre reste que la syntaxe est assez déroutante au début, et je trouve que devoir utiliser le mot clef mutable c'est assez disgracieux là. (mais bon whatever c'est de l'ordre du détail).
    par contre j'aimerais pas être à la place des dev de compilo... avec l'utilisation de [] ça doit être un vrai casse tête de s'en sortir je pense.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  9. #9
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Avant les lambda, je trouve que la feature la plus importante est l'introduction des rvalue references.

    Je ne savais pas qu'on peut se procurer VS2010. Faut que je regarde ça.

  10. #10
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Oui mais avec le mattraquage de Microsoft et Intel entre autres sur leurs bouts de code qui écrivent des parallel_for ou autre avec des lambdas, ils se sont dépêchés d'implémenter ça !

    En tout cas, n'hésite pas à nous contacter si tu veux publier ton article sur Developpez, une fois qu'on sera sûr que ça bougera plus (je le répète, j'ai 3/4 d'un article sur les concepts qui ... est remis à dans 5 ans peut-être ).

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Parle aussi de leur avantage par rapport aux macros (à savoir qu'avec une macro on ne peut créer une fonction lambda que dans un énoncé, pas dans une expression).
    Boost ftw

  12. #12
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 764
    Points
    764
    Par défaut
    J'entends beaucoup parler des lambdas polymorphiques, et j'ai lu quelques lignes dessus (ça devait être un draft), mais je n'en ai pas saisi le sens...
    Quelqu'un pourrait m'expliquer ?

  13. #13
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Pareil, j'ai pas bien compris la différence avec les polymorphiques, juste que Boost.Lambda (ou une autre lib qui doit être fusionnée avec celle ci si j'ai bien compris) permet ça. Une explication serai bienvenue.


    Sinon j'ai fais joujou avec les lambda a la sortie de la Beta1 de VS2010, juste pour tester et pratiquer la syntaxe (que je trouve assez simple étrangement).

  14. #14
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Lorsqu'on écrit des lambdas telles que décrites dans le draft actuel, on spécifie tous les types de tous les arguments, etc.

    Les lambdas polymorphiques, ça permettrait de se passer de ça, et que l'on ne se base que sur les contraintes syntaxiques imposées aux arguments de la lambda. Un peu comme avec les templates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template <typename T>
    void call_f(const T& t)
    {
      t.f();
    }
    Pour qu'un appel à call_f compile, il faut que le type T possède une fonction membre const nommée f et qui n'a pas d'arguments. Mais rien d'autre !

  15. #15
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 764
    Points
    764
    Par défaut
    Hum je vois. Du coup on pourrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    auto call_f = <> (t) { t.f(); };
    ... puis ensuite appeler call_f avec n'importe quel type d'objet pour t (pourvu qu'il ait une fonction membre f).

    PS : la syntaxe provient de ce lien (page 10).

  16. #16
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Citation Envoyé par Kalith Voir le message
    Hum je vois. Du coup on pourrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    auto call_f = <> (t) { t.f(); };
    ... puis ensuite appeler call_f avec n'importe quel type d'objet pour t (pourvu qu'il ait une fonction membre f).

    PS : la syntaxe provient de ce lien (page 10).
    C'est l'idée oui

  17. #17
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    J'ai installé gcc 4.5 branche lambda. Pas mal de choses sont déjà implémentées (pour les monomorphiques), ça fait plaisir!
    Les lambda récursives fonctionnent. Elles doivent être référencées avec un std::function car l'ex-reference_closure à disparu des proposals.
    La tests suite:
    http://gcc.gnu.org/viewcvs/branches/.../cpp0x/lambda/

  18. #18
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    std::function ça fait de la type erasure, c'est un truc indépendant...
    Boost ftw

Discussions similaires

  1. Java 8 - Question sur les lambdas
    Par joel.drigo dans le forum Général Java
    Réponses: 2
    Dernier message: 24/11/2013, 19h27
  2. [Débutant] Peut on introduire une variable avec Linq et les lambda expressions?
    Par takinelinfo dans le forum C#
    Réponses: 2
    Dernier message: 24/10/2011, 18h13
  3. Je n'arrive pas à utiliser les Lambda Expressions
    Par Tiber_le_vrai dans le forum C#
    Réponses: 7
    Dernier message: 21/12/2009, 14h41
  4. [Lambda]Problèmes avec les lambdas expressions
    Par sarapis dans le forum Général Dotnet
    Réponses: 8
    Dernier message: 25/06/2008, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo