Je viens de compiler une partie de mon propre code avec le -std=c++0x
drapeau dans GCC, car je veux suivre vaguement ce que font tous les jeunes (à condition qu'ils restent de ma pelouse), et je me suis retrouvé avec une charge d'avertissements d' auto_ptr
être obsolète. Bien sûr, je savais que auto_ptr
c'était obsolète en C ++ 0x, mais ...
La dépréciation n'est-elle pas une perte de temps et d'efforts? Raisons de ne pas déprécier (avec auto_ptr comme exemple):
il y a un océan de code qui doit encore être pris en charge, produire des millions d'avertissements ne fera que tenter les gens de désactiver les avertissements.
auto_ptr
est un peu désagréable, mais il fait vraiment ce qu'il dit sur l'étain.si nous voulons vraiment déprécier les choses, je propose
printf()
. Mais imaginez les cris qui en résulteraient.auto_ptr
n'a pas trop d'amis, mais dans au moins mon code C ++, il est utilisé plus queprintf
, ce qui n'est pas du tout utilisé.le comité a un mauvais dossier pour obtenir ce droit - ils ont déprécié l'électricité statique au niveau de l'espace de noms, et maintenant il semble que ce soit déprécié - je ne serais pas surpris s'il
auto_ptr
faisait un retour similaireenfin, quoi qu'en dise le comité, les implémenteurs du compilateur les ignorent - ils ne peuvent tout simplement pas risquer de casser le code de leurs clients, tout ce qu'ils peuvent faire, c'est émettre 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?
la source
auto_ptr
comme exemple.unique_ptr
et soyez plus heureux.Réponses:
Motifs de dépréciation (en général):
Je suis également en désaccord sur le dernier point. Les compilateurs n'ignorent pas le comité, et ils finissent par supprimer les éléments 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 sensée de le faire. Dans ce cas spécifique,
auto_ptr
doit être supprimé car il a été remplacé parunique_ptr
. Le changement est assez facile et les gens auront amplement le temps de le faire.(*) Oui, je sais que ce sont des extensions et non standard, mais le fait est que les éditeurs de compilateurs finissent par supprimer les éléments une fois qu'ils sont obsolètes, que le code y repose toujours ou non.
la source
>?=
et les<?=
opérateurs?a >?= b;
ce qui était un raccourci pourif (a > b) a = b;
et de même pour<?=
.Toute API suffisamment compliquée aura probablement des défauts qui ne seront découverts qu'après avoir été utilisés pendant un certain temps. Nos options:
La dépréciation est la plus saine de ces alternatives.
la source
Non. La dépréciation peut être une très bonne chose. Il empêche les technologies de se retrouver avec de vieux bagages inutiles.
Juste dans l'arène C ++, je me souviens de la "fonctionnalité" de Microsoft de ne pas supporter correctement la déclaration de variable dans une instruction for. Cela a duré environ une décennie et a rendu beaucoup de code non portable. C'est une "fonctionnalité" dont je suis heureux qu'elle ait été dépréciée.
Plus généralement, Apple a pris l'habitude depuis les années 80 de marquer les anciennes API maladroites comme «obsolètes» pendant 5-7 ans avant de les arracher. Je parlais avec un ingénieur d'Apple à la WWDC de la dépréciation de certaines des anciennes API QuickTime C, et j'étais vraiment ravi d'entendre qu'ils le faisaient, car la prise en charge continue d'un modèle développé vers 1990 entravait complètement ce que l'on s'attendrait à pouvoir à faire sur les processeurs multicœurs 64 bits modernes.
En pratique, les rédacteurs du compilateur mettront longtemps à vider auto_ptr, et ils prendront probablement en charge un mode de compatibilité descendante pendant une décennie ou deux, mais c'est une bonne chose imo.
la source
printf
est une fonction utile. Il permet de formater les choses de manière plus courte que les iostreams. Et c'est une fonction C. La raison même pour laquelle C ++ existe et est utilisé est parce qu'il est compatible avec C. Ainsi, la dépréciationprintf
semble moins utile.Le comité est conscient de certains des problèmes liés à la prétendue signification actuelle de la dépréciation. Voir le sens de la dépréciation .
la source
Les langages et les API doivent avancer. Même s'il peut y avoir une tonne de code en fonction d'une ancienne fonctionnalité, il peut y avoir une nouvelle et meilleure façon de faire quelque chose et le coût de la prise en charge de l'ancienne fonctionnalité est tout simplement trop élevé.
La dépréciation avertit également qu'à l'avenir, la fonctionnalité sera supprimée. Cela donne aux développeurs le temps de mettre à jour leur code s'ils suivent la nouvelle API. C'est bien mieux que l'alternative: la suppression pure et simple. N'oubliez pas que l'amortissement est un avertissement et non 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 le compilateur).
la source
À l'heure actuelle, la dépréciation a au moins deux significations.
Je pense que l'électricité statique tombe dans cette dernière catégorie, mais seul le temps nous dira si auto_ptr mérite vraiment d'être supprimé ou s'il vaut mieux le conserver dans la langue.
la source
La dépréciation n'est pas nocive si le passage à une alternative peut être effectué en une journée de travail: par exemple simple recherche / remplacement de l'ancienne fonction par la nouvelle, ou une couche de compatibilité est facile à mettre en place.
Si vous avez besoin de réécrire de grandes parties du logiciel à cause de la dépréciation, c'est dangereux.
Un bon exemple serait probablement l'API mysql de PHP, il vous suffit simplement de remplacer tous mysql_ * par mysqli_ * et de leur fournir un identifiant de lien et c'est fait.
Un mauvais exemple est la dépréciation et la suppression de glBegin, glEnd et de tout le matériel de calcul matriciel d'OpenGL, si vous voulez que votre code fonctionne sur OpenGL3 ou supérieur, vous devrez réécrire tout le code de rendu pour utiliser des tampons de vertex.
la source
Je pense que c'est un bon moyen de faire savoir aux gens qu'il existe un meilleur moyen. Je préfère de loin une belle dépréciation plutôt qu'une fonction qui vient de disparaître.
la source