• [^] # Re: Expressivité

    Posté par (Mastodon) . En réponse au journal Les 7 étapes pour devenir un programmeur Go.. Évalué à 10.

    C++, c'est pas le langage où quand on veut faire une classe copiable, il faut définir 4 méthodes différentes ? Mais pas de boiler-plate hein ?
    Les constructions nouvelles du langage apportées dans C++11 et consorts sont certainement bien pratiques, mais dans les faits, elles sont très récentes dans l'histoire du langage (si on prend 1985 comme date de première visibilité, on est à 34 ans d'existence alors que le C++11 n'est là que depuis 8 ans). Elles restent encore peu connues, apportent leurs propres problèmes de lisibilité et de compréhension. Côté lisibilité, on repassera. Ça ajoute en plus énormément à la complexité du langage.

    Tu nous fais un bel homme de paille. Les gens sérieux qui font du C++ utilisent tous C++11 de nos jours (GCC utilise par défaut C++14, tout comme Clang, et même MSVC utilise du C++ moderne par défaut). Les nouvelles fonctionnalités apportent non seulement de la lisibilité, mais également des constructions nécessaire pour faire du code performant (comme la sémantique de déplacement). Tu peux refuser de les considérer mais tu passes à côté de l'essentiel quand tu fais du C++.

    Et en C++11, pour qu'une classe soit copiable, il faut définir... bah rien ! Ça s'appelle la «rule of zero» qui dit qu'hormis les cas très particuliers de classes qui gèrent des ressources (et donc, qui doivent gérer à la main des problèmes d'«ownership»), les autres (95%) n'ont strictement rien à faire pour avoir les constructeurs par copie/déplacement et les opérateurs d'affectation par copie/déplacement et le destructeur gratos.