33 votes

Le compilateur ne compile-t-il que le code qui peut être exécuté ?

J'ai une bibliothèque de classes et je n'en utilise qu'une partie. Est-il nécessaire de supprimer ce qui n'est pas utilisé afin de réduire la taille du code créé (en configuration release) ?

D'après ce que j'ai vu, le compilateur s'en occupe et la suppression du code ne modifie pas la taille du fichier EXE. Cela sera-t-il toujours le cas ? Supprimer tout le code inutile prendrait beaucoup de temps, je veux donc savoir si c'est nécessaire.

Plus d'informations : il existe des méthodes et des classes dans la bibliothèque de classes qui ne sont pas appelées par le code en cours d'exécution, mais qui sont référencées par d'autres parties de code dans la bibliothèque de classes (qui elles-mêmes ne sont jamais appelées).

36voto

Tim S. Points 30377

Non, le compilateur inclut également le code "mort". Une raison simple à cela est qu'il n'est pas toujours possible de savoir exactement quel code sera ou ne sera pas exécuté. Par exemple, même une méthode privée qui n'est jamais référencée peut être appelée par réflexion, et les méthodes publiques peuvent être référencées par des assemblages externes.

Vous pouvez utiliser un outil qui vous aidera à trouver et à supprimer les méthodes inutilisées (y compris celles qui ne sont appelées que par d'autres méthodes inutilisées). Essayez Quels outils et techniques utilisez-vous pour trouver du code mort ? y Trouver un code inutilisé pour vous aider à démarrer.

6voto

nmaait Points 1081

Tout est compilé. Qu'il soit appelé ou non. Le code peut être appelé par une bibliothèque externe.

La seule façon de faire en sorte que le compilateur ignore du code est d'utiliser les directives du préprocesseur du compilateur. Plus d'informations sur ces directives ici .

0voto

Keith Douglas Points 102

Déterminer tout et seulement le code mort est (si on fait l'idéalisation que l'on a un "monde mathématique" comme le langage) récursivement indécidable, dans la plupart des langages. (Quelques rares, comme le langage Blaise, sont décidables).

0voto

Nandun Points 314

À la question de savoir s'il est "nécessaire de supprimer ce qui n'est pas utilisé afin de réduire la taille du code créé" : je pense que cela ne serait utile que pour économiser la bande passante du réseau. la suppression du code inutilisé est cruciale dans les applications web pour améliorer la vitesse de chargement, etc.

si votre code est un exe ou une bibliothèque, la seule raison que je vois pour supprimer le code mort, est d'améliorer la qualité de votre code. pour que quelqu'un qui regarde votre code dans 2 ans ne se gratte pas la tête en se demandant ce qu'il fait.

0voto

Nicolas Repiquet Points 4411

Je doute que le compilateur supprime quoi que ce soit. Le fait est que le compilateur ne peut pas dire ce qui est utilisé et ce qui ne l'est pas, puisque les types peuvent être instanciés et les méthodes appelées par leur nom, grâce à la réflexion.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X