Attention: ce n'est pas aussi une réponse qu'une critique de la conversation à laquelle "utilisateur inconnu" était associé dans sa réponse.
Son premier point principal est le (soi-disant) "standard en constante évolution". En réalité, les exemples qu'il cite tous concernent des modifications de C ++ avant la standardisation. Depuis 1998 (date à laquelle la première norme C ++ a été finalisée), les modifications apportées au langage ont été plutôt minimes. En fait, nombreux sont ceux qui affirment que le vrai problème est que davantage de modifications auraient dû être apportées. Je suis raisonnablement certain que tout le code conforme à la norme C ++ d'origine reste conforme à la norme actuelle. Bien que ce soit un peu moins certain, à moins que quelque chose ne change rapidement (et de façon tout à fait inattendue), il en ira de même pour le prochain standard C ++ (en théorie, tout le code utiliséexport
va casser, mais pratiquement aucun n'existe; d’un point de vue pratique, ce n’est pas un problème). Je peux penser à quelques autres langages, systèmes d’exploitation (ou beaucoup d’autres éléments liés à l’informatique) pouvant prétendre à une telle affirmation.
Il se lance ensuite dans des "styles en constante évolution". Encore une fois, la plupart de ses points sont assez proches du non-sens. Il essaie de caractériser for (int i=0; i<n;i++)
comme "vieux et éclaté" et for (int i(0); i!=n;++i)
"nouvelle chaleur". La réalité est que, même s’il existe certains types pour lesquels de tels changements pourraient avoir un sens, int
cela ne fait aucune différence - et même lorsque vous pouvez gagner quelque chose, il est rarement nécessaire de rédiger du code correct ou correct. Même au mieux, il fabrique une montagne à partir d'une taupinière.
Son affirmation suivante est que C ++ "optimise dans la mauvaise direction" - en particulier, alors qu'il admet que l'utilisation de bonnes bibliothèques est facile, il affirme que C ++ "rend l'écriture de bonnes bibliothèques presque impossible." Je pense que c’est l’une de ses erreurs les plus fondamentales. En réalité, écrire de bonnes bibliothèques pour presque toutes les langues est extrêmement difficile. Au minimum, écrire une bonne bibliothèque nécessite de bien comprendre un domaine problématique afin que votre code fonctionne pour une multitude d'applications possibles dans ce domaine (ou en relation avec celui-ci). La plupart de ce que C ++ fait réellement est de "relever le niveau" - après avoir constaté à quel point une bibliothèque peut être meilleure , les gens sont rarement disposés à revenir à écrire le genre de foutaises qu'ils auraient autrement.de très bons codeurs écrivent pas mal de bibliothèques, qui peuvent ensuite être utilisées (facilement, comme il le reconnaît) par "le reste d'entre nous". C'est vraiment un cas où "ce n'est pas un bug, c'est une fonctionnalité".
Je ne vais pas essayer de toucher chaque point dans l'ordre (cela prendrait des pages), mais aller directement à son point de clôture. Il cite Bjarne: "L'optimisation de tout un programme peut être utilisée pour éliminer les tables de fonctions virtuelles et les données RTTI inutilisées. Une telle analyse convient particulièrement aux programmes relativement petits qui n'utilisent pas de liaison dynamique."
Il critique cela en affirmant sans fondement que "c'est un problème vraiment difficile", allant même jusqu'à le comparer au problème de fond. En réalité, il n'en est rien - c'est l'éditeur de liens inclus dans Zortech C ++ (le premier compilateur C ++ pour MS-DOS dans les années 1980) qui l'a fait. Il est vrai qu’il est difficile d’être certain que toutes les données potentiellement superflues ont été éliminées, mais qu’il est tout à fait raisonnable de faire un travail plutôt équitable.
Indépendamment de cela, toutefois, le point le plus important est que cela n’est absolument pas pertinent pour la plupart des programmeurs. Comme le savent ceux d’entre nous qui ont désassemblé pas mal de code, à moins que vous n’écriviez un langage assembleur sans aucune bibliothèque, vos exécutables contiennent presque certainement une bonne quantité de «choses» (code et données, dans des cas typiques) que probablement pas même savoir, pour ne jamais mentionner réellement utiliser. Pour la plupart des gens, la plupart du temps, cela n'a pas d'importance - à moins que vous ne développiez des systèmes embarqués les plus minuscules, cette consommation de stockage supplémentaire n'a tout simplement pas d'importance.
En fin de compte, il est vrai que ce discours a un peu plus de substance que l'idiotie de Linus - mais cela lui donne exactement le poids de la louange qu'il mérite.
virtual
fonctions, non?