Gugelhupf, j'ai l'impression que tu t'énerves tout seul parce que tu compares C++ à des langages qui ne sont pas comparables
Tout d'abord, Java ou Python ne sont pas des standards internationaux. Donc ce sont des mauvais exemples pour donner les leçons au comité C++. Et puis d'ailleurs, Python 3 est loin d'avoir fait l'unanimité à sa sortie au point d'avoir douté si cette version du langage était une erreur. En comparaison, l'adoption de C++11 par l'industrie a été extrêmement rapide. Et on a eu les lambdas bien avant Java, comme quoi chez Python / Java les choses ne sont pas roses non plus !
Ensuite, le comité C++ c'est pas comme une assemblée de politiciens que l'on paye de notre poche pour rendre notre vie meilleure. Ce sont des personnes / entreprises qui payent elles-mêmes non seulement leurs frais de participation mais aussi leur droit de vote si c'est le cas. Par exemple chez nous, pour que l'AFNOR dise "ok c'est bon tu peux défendre les intérêts de la France" tu dois lui payer chaque année plusieurs milliers d'euros. Donc quand une boîte investit pendant des années pour ajouter une fonctionnalité à C++, elle a en général une bonne raison de le faire. Et il vaut mieux pour elle, car elle doit en convaincre
des dizaines d'autres d'accepter sa proposition. C'est la raison pour laquelle beaucoup de propositions sont
rejetées : parce qu'il faut une sérieuse argumentation pour que ça passe.
Il faut donc faire preuve de prudence avec les termes tels que "les choses les plus demandées", ou encore "pas très utile", parce qu'une des premières choses qu'on apprend quand on fréquente le comité c'est qu'il y a beaucoup d'utilisateurs du langage qui ont des usages
très différents des nôtres, et que par conséquent les termes "utile" ou "évident" sont à proscrire. Par exemple, il y a des personnes pour qui les modules relèvent du "nice to have" parce qu'ils savent très bien vivre sans depuis longtemps et que leurs priorités sont ailleurs.
Enfin, il faut comprendre le segment sur lequel C++ se positionne. Ce n'est pas un langage "clé en main" du style boite de LEGO prête à l'emploi. Visual Basic faisait très bien cela. C'est fou combien un programmeur VB était plus productif qu'un programmeur C++. Et pourtant, VB [d'avant .Net] a disparu ! C++ est un langage qui permet de construire soit-même ses propres briques en fonction de ses besoins. Car un développeur embarqué n'a pas les mêmes contraintes qu'un développeur de jeux vidéo ou un autre HPC. C++ vise à fournir le maximum d'outils utiles à tous ces différents profils pour qu'ils puissent créer la plateforme logicielle qui convient le mieux à leur contexte.
Du coup, on obtient une boite à outils très large. Et
ce n'est pas parce que la caisse à outil contient beaucoup d'outils que je dois tous les utiliser. B. Stroustrup exprime très bien cela dans les premières minutes de la vidéo : "quand je me tape sur la tête avec un marteau ça fait mal !". A quoi ça rime de dresser la liste de toutes les combinaisons possibles de passage de paramètre ?
Les principes stipulés dans les core guidelines
sont simples à ce propos.
[*]Pourquoi la STL "offre" des API toujours plus complexe ? Je vous donne un exemple standard un peu WTF pour récupérer le timestamp dans un type entier (cadeau
) :
1 2 3
| int64_t nbMillis = duration_cast<std::chrono::milliseconds>(
system_clock::now().time_since_epoch()
).count(); |
Tu es *peut-être* trop orienté bas niveau. As-tu absolument besoin de manipuler des int64 ? Car la lib met à ta disposition des abstractions pour te
simplifier la gestion du temps :
1 2 3 4 5 6
| int64_t nbMillis = getTimestampFromExternalCode();
auto timestamp = chrono::milliseconds{nbMillis}; // sécurisé contre les comparaisons accidentelles avec d'autres unités de temps
if (timestamp > system_clock::now().time_since_epoch()) {
// oops!
} |
c'est sûr que si on est habitué à tout gérer à la main soit-même, ça déstabilise. Mais si on comprend que la lib s'occupe d'abstraire pour nous certains concepts, alors ça devient autre chose. Combiné aux littéraux utilisateurs, ça devient même assez sexy:
1 2 3 4 5
| chrono::milliseconds getTimestamp() { return 1500ms; }
if (getTimestamp() > 1s) {
// expiré
} |
8 |
0 |