web-dev-qa-db-fra.com

Déprécation considérée comme nuisible?

Je viens de compiler une partie de mon propre code avec le drapeau -std=c++0x Dans GCC, car je tiens à suivre facilement ce que tous les jeunes gens font (à condition qu'ils restent de ma pelouse), et j'ai fini avec une charge d'avertissements sur auto_ptr être obsolète. Bien sûr, je savais que auto_ptr A été obsolète en C++ 0x, mais ...

N'est-ce pas une dépréciation une perte de temps et d'effort? Raisons de ne pas obstruer (avec Auto_PTR à titre d'exemple):

  • il y a un océan de code là-bas qui doit encore être soutenu, produisant des millions d'avertissements ne tentera que les gens de transformer des avertissements.

  • auto_ptr Est un peu naff, mais cela fait en réalité ce qu'il dit sur l'étain.

  • si nous voulons vraiment décomposer des choses, je propose une nomination printf(). Mais imaginez simplement les cris qui s'ensuivraient. auto_ptr N'a pas trop d'amis, mais dans au moins mon code C++, il est utilisé plus que printf, qui n'est pas utilisé du tout.

  • le comité a un mauvais record de l'obtention de ce droit - ils ont déprécié de statique à la portée des espaces de noms, et il semble maintenant que cela semble avoir été endommréé - je ne serais pas surpris si auto_ptr fait un retour similaire

  • enfin, quel que soit le comité, les responsables de la compilation les ignorent - ils ne peuvent tout simplement pas risquer de casser le code de leurs clients, tout ce qu'ils peuvent faire, c'est de lutter contre des avertissements irritants.

Donc, ma question - considérez-vous la dépréciation (de quoi que ce soit, pas seulement auto_ptrs, et pas seulement en C++) une bonne idée, et si oui, pourquoi?

27
Neil Butterworth

Motifs de la dépréciation (en général):

  • Il indique clairement aux personnes que quelque chose est une mauvaise pratique (et suggère d'une alternative).
  • La période de dépréciation donne aux gens une chance de changer de code avant que le compilateur ne le supprime.

Je suis également en désaccord sur le dernier point. Les compilateurs n'ignorent pas le comité et ils suppriment éventuellement des choses qui sont obsolètes (par exemple >?= Et <?= Dans GCC - ils ont été obsolètes puis supprimés *).

Je pense que le point important est: certaines choses devraient être supprimées, pour diverses raisons, et je pense que la dépréciation est la seule façon sain de le faire. Dans ce cas spécifique, auto_ptr Doit être supprimé car il a été remplacé par unique_ptr. Le changement est assez facile et les gens auront beaucoup de temps pour le faire.

(*) Oui, je sais qu'ils sont des extensions et non de la norme, mais le but est que les vendeurs de compilateur suppriment éventuellement des choses une fois qu'ils entrent dans une dépréciation, si le code repose toujours sur eux ou non.

32
Peter Alexander

Toute API suffisamment compliquée aura probablement des défauts qui ne sont découverts qu'après avoir été utilisés pendant un moment. Nos options:

  • Laisser les choses comme elles sont. Cela signifie que l'API continuera de rassembler de plus en plus de cruft à mesure qu'elle évolue au fil du temps. Même si des versions nouvelles et améliorées sont ajoutées, les anciens devront également être conservés.
  • Supprimez-le sans avertissement. Ceci est susceptible de briser beaucoup de code.
  • Décapez-le et retirez-le dans une version ultérieure. Cela donne le temps de corriger le code existant, tout en veillant à ce que la quantité de cruft reste délimitée.

La dépréciation est le sanestement de ces alternatives.

25
hammar

si nous voulons vraiment déprécier des choses, je propose une nommation printf ()

printf est une fonction utile. Il permet de formater des choses des moyens plus courts que les iostreams. Et c'est une fonction c. La raison même C++ existe et est utilisée est parce qu'elle est compatible avec C. si déprécant printf semble moins utile.

Donc, quelqu'un d'autre pour une crusade anti-déprécation?

Le Comité est conscient de certains des problèmes de la signification actuelle supposée de déprécation. Voir le sens de la dépréciation .

11

Les langues et les API doivent avancer. Même s'il peut y avoir une tonne de code en fonction de certaines caractéristiques, il pourrait y avoir un nouveau moyen de faire quelque chose et le coût de soutien de l'ancienne caractéristique est trop important.

La dépréciation donne également un avertissement que, à l'avenir, la fonctionnalité sera supprimée. Cela donne à la mise à jour des développeurs pour mettre à jour leur code si elles suivent la nouvelle API. C'est beaucoup mieux que l'alternative: élimination pivotante. N'oubliez pas que l'amortissement est un avertissement, pas une erreur.

Et s'il s'agit d'un ancien programme que vous ne voulez pas mettre à jour, alors rien ne vous empêche d'utiliser l'ancienne API (ou dans ce cas compilateur).

5
TheLQ

La dépréciation n'est pas nocive si cela passe à une alternative peut être effectuée en 1 jour de travail: par exemple. Recherche simple/remplacement de l'ancienne fonction avec le nouveau ou une couche de compatibilité est facile à configurer.

Si vous avez besoin de réécrire de grandes parties du logiciel en raison de la dépréciation, il est nocif.

Un bon exemple serait probablement l'API MySQL de PHP, fondamentalement, vous devez simplement remplacer tout MySQL_ * avec MySQLI_ * et fournir un identifiant de lien et cela est fait.

Un mauvais exemple est la dépréciation et la suppression de GLBEGIN, GLEND et de tous les éléments de calcul de matrice de OpenGL, si vous souhaitez que votre code fonctionne sur OpenGL3 ou plus, vous devez réécrire le code de rendu complet pour utiliser des tampons de sommet.

0
Calmarius