Il semble que, dans C ++ et D, les langues statiquement compilées et dans lesquelles des métaprogrammations de modèle sont une technique populaire, il existe une quantité décente de préoccupation concernant l'instanciation de gabarit. Il me semble principalement une préoccupation théorique, sauf sur des systèmes embarqués très contraignants. En dehors de l'espace intégré, je n'ai pas encore entendu parler d'un exemple de quelqu'un de pouvoir démontrer que c'était un problème dans la pratique. P>
Quelqu'un peut-il offrir un exemple en dehors des systèmes embarqués sévèrement limités de ressources de l'instanciation de gabarits BLOAT Compatible dans la pratique forte> et avait
5 Réponses :
Je pense que vous devrez trouver un plus ancien compilateur pour voir le code de modèle de gonflement dans la pratique. Les compilateurs C ++ modernes (et les liants) ont été en mesure de l'optimiser pendant un moment. P>
Je pense que c'est principalement mental mental. Le prochain programmeur pour travailler sur votre code devra d'abord comprendre quel sous-ensemble compter cela. P>
BLOFT MEMPLATEUR est Oui, il peut devenir grand. Mais quelle est l'alternative? Donc il n'y a pas de gonflement réel.
Vous pouvez écrire tout le code vous-même manuellement (une fois pour chaque type). Pensez-vous l'écriture manuellement le rendra plus petit. Le compilateur instanciate uniquement les versions dont il a besoin et que la liaison éliminera plusieurs copies réparties sur les unités de compilation. P>
Il s'agit juste de construire ce que vous utilisez. Si vous utilisez beaucoup de types différents, vous devez écrire plus de code. P>
Ce n'est pas tout à fait vrai - le compilateur peut générer du code identique pour les différentes fonctions f
f
Idéalement, vous devez utiliser un compilateur / lieur qui reconnaît et supprime le code de montage généré en double. Visual Studio fait cela (comdat pliant).
Ceci est vrai si vous utilisez simplement des modèles comme génériques. Mais ce n'est pas vrai si vous faites des métaprogrammants avec des modèles. Les modèles utilisés dans la métaprogrammation peuvent instantifier toutes sortes de types intermédiaires fous que vous n'avez pas vraiment besoin. Je pense que le générateur d'analyseurs Spirit Spirit peut être un bon exemple.
Il y a peu de problème en C ++, car la quantité de modèle que vous peut em> faire en C ++ est limitée par leur complexité. P>
en D cependant ... avant la CTFE (évaluation de la fonction de compilation) existait, nous avons dû utiliser des modèles pour traitement de chaîne em>. C'est aussi la raison pour laquelle les grands symboles mutiles sont compressés dans DMD - les chaînes utilisées comme arguments de modèle font partie des noms de symboles mutilés, et lors de l'instanciation des modèles avec des segments plus longs de code (par exemple), les tailles de symboles résultantes explosent spectaculairement le format d'objet. . p>
C'est mieux aujourd'hui. Mais dans l'ensemble, des modèles causent toujours beaucoup de Blaite pour une raison simple - ils analysent plus rapidement et sont plus puissants que dans C ++, les gens les utilisent naturellement beaucoup plus (même dans les cas qui ne seraient techniquement pas besoin < / em> modèles). Je dois admettre que je suis l'un des délinquants principaux ici (jetez un coup d'œil à
Modèle d'instantion BLOAT est une question de pratique, car elle peut augmenter (beaucoup !!!) compiler et lier du temps. P>
I Personnaly pense que le problème C ++ n ° 1 est la compilation, et c'est principalement due à un modèle. P>
J'ai travaillé sur un projet avec environ 50 Libs. Nous avons eu notre propre système RTTI à l'aide de modèles. Je devais réécrire à cause du gallon de gallet p>
Voici quelques chiffres: P>
Cela ressemble à un "projet de jeu";) La plupart des jeux PC subissent ce problème, et souvent les développeurs repartissent le problème dans les modèles. Mais en réalité, le problème n'est que de General Code Bluoat et de jeter de plus en plus de plus en plus de libs. Le code de code généré par le code de modèle est généralement le bouc émissaire.