Citation:
Or, le seul moyen de demander au compilateur de laisser ce message à l'éditeur de liens, c'est de passer par une fonction inline.
A ma connaissance, les seuls éditeurs de liens qui ont une notion d'inline sont ceux qui sont capables de faire l'optimisation correspondante. Pour jeter les définitions dupliquées de fonctions inlines ou d'instances de templates, le compilateur communique en utilisant d'autres concepts, les mêmes qui leur permettent aussi de fusionner les common en Fortran ou les définitions de variables sans initialisations et vraisemblablement de faire d'autres choses pour d'autres langages.
Citation:
Car, jusqu'à preuve du contraire, tous les compilateurs que je connais "oublient" ce qu'ils ont généré dans une unité de compilation lorsqu'ils passent à une autre (ce qui fait que, en pratique, un modèle de compilation qui utiliserait une db d'une manière ou d'une autre n'est pas applicable "en l'état")
Je t'assure que le compilateur C++ de Sun était (ça fait des années depuis la dernière fois que j'ai regardé) avait une db contenant les instanciations de templates déjà faites. Ce qui avait des avantages mais apportait son lot de problèmes quand il fallait utiliser des outils conçus en ignorant cette possibilité. Visual age d'IBM (je ne l'ai pas utilisé dans ce mode) était aussi capables d'utiliser une db me semble-t'il (pour d'autres choses -- dont de l'inline entre CU --, avec d'autres problèmes). Et si on sort du C et de C++, les compilateurs Ada -- je crois que GNAT est le premier à faire autrement -- utilisaient aussi des DB et je parie que c'est le cas pour d'autres langages (SmallTalk est le premier que je regarderai s'il faut en citer d'autres).