je crois par la conception des GC implementors, vous ne pouvez pas accélérer GC avec l'annulation. Je suis sûr qu'ils préféreraient que vous ne vous inquiétiez pas avec comment/quand le GC fonctionne - traitez-le comme ceci omniprésent Etre en protégeant et en veillant sur vous ... (les arcs la tête en bas, lève le poing vers le ciel) ...
Personnellement, je définis souvent explicitement les variables comme nulles quand j'en ai fini avec elles comme une forme de documentation autonome. Je ne déclare pas, n'utilise pas, puis mets à null plus tard - je les annule immédiatement après qu'ils ne sont plus nécessaires. Je dis, explicitement, "j'en ai officiellement fini avec vous ... être parti ..."
Est-il nécessaire d'annuler dans une langue GC'd? Non. Est-ce utile pour le GC? Peut-être que oui, peut-être non, je ne sais pas, par conception, je ne peux vraiment pas le contrôler, et indépendamment de la réponse d'aujourd'hui avec cette version ou cela, les futures implémentations GC pourraient changer la réponse au-delà de mon contrôle. De plus, si/quand l'annulation est optimisée, c'est un peu plus qu'un simple commentaire si vous voulez. Je pense que si cela rend mon intention plus claire pour le prochain imbécile qui suit mes traces, et si cela peut potentiellement aider le GC parfois, alors ça vaut le coup pour moi. La plupart du temps, je me sens bien rangé et clair, et Mongo aime se sentir bien rangé et clair. :)
Je le vois comme ceci: Les langages de programmation existent pour permettre aux gens de donner aux autres une idée de l'intention et un compilateur une demande de travail pour quoi faire - le compilateur convertit cette requête dans une langue différente (parfois plusieurs) pour un CPU - le CPU (s) pourrait donner un hoot quelle langue vous avez utilisé, vos paramètres de tabulation, commentaires, accents stylistiques, noms de variables, etc - un CPU tout sur le flux de bits qui lui dit ce registres et opcodes et les emplacements de mémoire à tourner. Beaucoup de choses écrites en code ne se convertissent pas en ce qui est consommé par le CPU dans la séquence que nous avons spécifiée. Notre C, C++, C#, Lisp, Babel, assembleur ou quoi que ce soit est la théorie plutôt que la réalité, écrit comme une déclaration de travail. Ce que vous voyez n'est pas ce que vous obtenez, oui, même en langage assembleur.
Je comprends l'état d'esprit des "choses inutiles" (comme les lignes vides) "ne sont rien d'autre que le bruit et le code de fouillis." C'était moi plus tôt dans ma carrière; Je comprends tout à fait cela. À ce stade, je penche vers ce qui rend le code plus clair. Ce n'est pas comme si j'ajoutais même 50 lignes de "bruit" à mes programmes - c'est quelques lignes ici ou là.
Il existe des exceptions à toute règle. Dans des scénarios avec de la mémoire volatile, de la mémoire statique, des conditions de course, des singletons, l'utilisation de données "périmées" et tout ce genre de pourriture, vous devez gérer votre propre mémoire, verrouiller et annuler à cause de la mémoire. l'univers GC'd - j'espère que tout le monde comprend cela. Le reste du temps avec les langages GC'd est une question de style plutôt que de nécessité ou de garantie de performance. À la fin de la journée, assurez-vous de comprendre ce qui est admissible au GC et ce qui ne l'est pas; verrouiller, éliminer et annuler de manière appropriée; cirer, enlever la cire; Inspire, expire; et pour tout ce que je dis: si cela fait du bien, faites-le. Votre kilométrage peut varier ... comme il se doit ...
+1 bonne question. Est-ce que quelqu'un sait une circonstance sous laquelle le compilateur optimisera complètement la cession? c'est-à-dire que quelqu'un a regardé MSIL dans des circonstances différentes et a noté IL pour mettre un objet à zéro (ou l'absence de celui-ci). –