Idiome NVI & paramétrage par politique en C++

a marqué ce sujet comme résolu.

Tout le monde se secoue ! :D

J’ai commencé (il y a 3 minutes) la rédaction d’un tutoriel au doux nom de « Idiome NVI & paramétrage par politique en C++ » et j’ai dans l’objectif de proposer en validation un texte aux petits oignons. Je fais donc appel à votre bonté sans limite pour dénicher le moindre pépin, que ce soit à propos du fond ou de la forme. Vous pourrez consulter la bêta à votre guise à l’adresse suivante :

Merci !

Bel article!

Telles que j’avais lue la séparation des responsabilités, avec le NVI on adresse la fonction publique au code utilisateur (et aux développeurs concernés), et on adresse la fonction virtuelle au code "enfant" (et ses développeurs).

En général, on évite de préfixer par des tirets-bas, cf la FAQ de dvpz pour la règle exacte. Diverses coquilles aussi. On verra plus tard ;)

Un lien vers, ou un résumé rapide, du Fragile Base Class serait appréciable.

Le ThreadingModel n’est pas exception safe on dirait, et les mutexs ne sont jamais déverrouillés. Sinon, on n’a pas besoin d’un héritage avec les politiques. Ici cela n’apporte rien à part à essayer de rendre dynamisable un point de variation que l’on sait non dynamique par écriture du code. Bref, on va payer un appel virtuel pour rien. Même avec l’héritage (même si je n’en vois pas l’intérêt ici), on n’a pas besoin d’un appel à une fonction virtuelle. I.e. on peut avoir héritage pour le static_assert (si vraiment ça nous fait plaisir – si on a été pervertis par Java j’ai envie de dire) et 0 fonction virtuelle.

En ce qui me concerne, ce n’est pas parce que l’on hérite d’une classe que l’on respecte sa sémantique (même si c’est fortement conseillé). Ainsi travailler à un niveau concept me suffit, surtout sur un polymorphisme/point-de-variation statique (je me contente donc de "coin" et de pattes palmées pour décréter que c’est un canard).

En ce qui me concerne (bis), le point de variation pour décider si je veux vérifier le contrat ou pas, je l’ai déjà avec -DNDEBUG. Je n’ai pas besoin de l’enlever explicitement dans le code source avec AssertChecker. Je trouve même que c’est néfaste car ça permet au développeur de débrayer de rouler sans ceinture. Parenthèse: pour le coup, tu as lorgné du côté des Mixin classes, cf. la thèse et les articles de Yagnis Smaragdakis (écrit de mémoire presque 19 ans après, des fois le cerveau enregistre des trucs pas possibles) sur les Mixin Layers. Bien des années après, A.Alenxandrescu a publié un expérience avec les Mixin Layers/CRTP sur le CUJ si mes souvenirs sont bons. A propos d’allocateurs je crois…

Dernier pinaillage, le lexique du TC++PL de Stroustrup définit "méthode" comme "fonction membre virtuelle". Il est préférable d’éviter ce terme pour désigner des fonctions membres.

Telles que j’avais lue la séparation des responsabilités, avec le NVI on adresse la fonction publique au code utilisateur (et aux développeurs concernés), et on adresse la fonction virtuelle au code "enfant" (et ses développeurs).

Il y a une petite imprecision dans la formulation qui m’a ete remontee sur un chanel Slack, ce qui fait avec la tienne, la seconde !

En général, on évite de préfixer par des tirets-bas, cf la FAQ de dvpz pour la règle exacte. Diverses coquilles aussi. On verra plus tard ;)

La regle en question se trouve ici.

En ce qui me concerne, ce n’est pas parce que l’on hérite d’une classe que l’on respecte sa sémantique (même si c’est fortement conseillé). Ainsi travailler à un niveau concept me suffit, surtout sur un polymorphisme/point-de-variation statique (je me contente donc de "coin" et de pattes palmées pour décréter que c’est un canard).

Totalement d’accord, et si le premier commentaire plus haut etait a destination de l’autre article importe de PDP, elle n’en reste pas moins vraie: l’article a un peu vieilli et vu que les concepts s’emule bien plus facilement en C++14/17 avec des traits, il faudra reformuler.

En ce qui me concerne (bis), le point de variation pour décider si je veux vérifier le contrat ou pas, je l’ai déjà avec -DNDEBUG. Je n’ai pas besoin de l’enlever explicitement dans le code source avec AssertChecker. Je trouve même que c’est néfaste car ça permet au développeur de débrayer de rouler sans ceinture.

Je suis d’accord dans l’absolu mais je suis sur que l’on peut trouver localement des contre-exemples ou des situations ou c’est utile. Maintenant, le but c’etait de toute maniere de presenter les deux facons qui ne sont pas incompatibles.

Parenthèse: pour le coup, tu as lorgné du côté des Mixin classes, cf. la thèse et les articles de Yagnis Smaragdakis (écrit de mémoire presque 19 ans après, des fois le cerveau enregistre des trucs pas possibles) sur les Mixin Layers. Bien des années après, A.Alenxandrescu a publié un expérience avec les Mixin Layers/CRTP sur le CUJ si mes souvenirs sont bons. A propos d’allocateurs je crois…

Sans du tout le savoir, le concept m’etant inconnu. Du coup cela vaut egalement peut-etre le coup que je me penche sur le sujet et que je reformule l’article pour integrer ces notions de manieres plus distinctes.

Merci de ta relecture. Pour les parties que je n’ai pas citees, c’est simplement en TODO.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte