Sondage : Le mot clé inline est-il encore d'actualité ?
Donnez votre avis

0PARTAGES

0  0 
Que pensez-vous du mot-clé inline aujourd'hui :
Bonjour,

En ce moment je passe des entretiens et donc des tests techniques C++, et j'ai eu droit à une question sur "virtual inline". J'en ai profité pour glisser mon avis personnel au sujet de inline qui est en gros : ce n'est plus utile de nos jours. Maintenant, je me demande dans quelle mesure mon affirmation est valide.

Je n'ai jamais été un grand fan de inline (explicite ou implicite), parce que de mon point de vue c'est une entorse aux bonnes pratiques (pas d'implémentation dans un header) du fait que, ben, on en avait besoin. Mais aujourd'hui - sans m'être sérieusement penché sur la question je l'avoue - j'estime que les compilateurs sont suffisamment évolués pour se débrouiller tout seuls, surtout avec l'apparition de l'optimisation guidée par profil (encore que j'ai eu des déceptions à ce sujet). Bref, je considère qu'inline relève de l'optimisation prématurée, pour ne pas dire de la pollution de code, et que c'est à oublier au même titre que register.

Vos avis / retours d'expérience ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Matthieu Brucher
Rédacteur https://www.developpez.com
Le 26/08/2009 à 20:19
Idem, le compilateur fait très bien son boulot, s'il voit que la fonction a un intérêt en terme de quantité d'instructions à être inlinée, elle le sera, même si elle est en double.
Ce qui est certain, c'est que quand mon code est inliné par le compilateur, je gagne un facteur 10 car tous les appels "simples" sont regroupés (c'était l'objectif au départ du programme).
0  0 
Avatar de Alp
Expert éminent sénior https://www.developpez.com
Le 26/08/2009 à 20:27
Citation Envoyé par Aurelien.Regat-Barrel Voir le message
Bref, je considère qu'inline relève de l'optimisation prématurée, pour ne pas dire de la pollution de code, et que c'est à oublier au même titre que register.
Ca résume très bien mon avis.

Les compilos que j'utilise (celui de VC et gcc), en particulier VC au boulot, gèrent très bien ça. Je ne m'en soucie pas et considère ne pas avoir à m'en soucier. Cela fait partie de ce que l'on est en droit d'exiger d'un compilateur de nos jours.

PS : ils comptaient vraiment t'avoir avec le coup du "virtual inline" ?
0  0 
Avatar de JolyLoic
Rédacteur/Modérateur https://www.developpez.com
Le 26/08/2009 à 20:36
J'aurais bien aimé une troisième réponse au sondage : C'est inutile en général, mais on ne sait jamais.

Tout ce que je sais, c'est que ça fait un bout de temps que je n'ai pas fait de micro-optimisations de code en général, car je n'en n'avait pas vraiment besoin. Inline rentre dans la catégorie micro-optimisation. Le jour où j'aurais à micro-optimiser, j'essayerai inline comme d'autre techniques, en mesurant le résultat. Je n'ai pas envie de le rejeter a priori, on ne sait jamais, mais il est clair que je ne l'utiliserais que de façon hyper ponctuelle...
0  0 
Avatar de koala01
Expert éminent sénior https://www.developpez.com
Le 26/08/2009 à 21:55
Salut,

à défaut d'une possibilité plus nuancée, j'ai voté que c'est obsolète et à oublier...

Surtout si l'idée est de créer... une fonction virtuelle

Mais même en dehors de ce cas "peau de banane", je trouve que cela fait vraiment partie des optimisations prématurées tant il y a de restrictions au niveau du compilateur qui nous empêchent d'avoir la certitude que tous les appels à une fonction seront bel et bien inlinés
0  0 
Avatar de metagoto
Membre éclairé https://www.developpez.com
Le 27/08/2009 à 8:24
inline peut servir à ne pas avoir de multiples définitions de templates.

Ca peut être utile aussi pour remplacer ce que l'on pourrait faire avec des macros. MACHIN(++x) --> machin(++x)

OK pour laisser le compilo décider d'inliner ou non, mais OK aussi pour laisser le développeur placer des keywords inline qui vont bien dans certains cas.
0  0 
Avatar de Matthieu Brucher
Rédacteur https://www.developpez.com
Le 27/08/2009 à 8:48
Citation Envoyé par metagoto Voir le message
Ca peut être utile aussi pour remplacer ce que l'on pourrait faire avec des macros. MACHIN(++x) --> machin(++x)
Le compilateur fait ça bien mieux que toi, je ne vois l'intérêt de lui forcer ça !
Pour les templates, c'est idem, il inline automatiquement quand c'est possible/intéressant pour ton processeur.
0  0 
Avatar de metagoto
Membre éclairé https://www.developpez.com
Le 27/08/2009 à 9:06
Citation Envoyé par Matthieu Brucher Voir le message
Le compilateur fait ça bien mieux que toi, je ne vois l'intérêt de lui forcer ça !
Pour les templates, c'est idem, il inline automatiquement quand c'est possible/intéressant pour ton processeur.
On est parfois obligé d'inliner des définitions de templates si on les places dans des fichiers headers.

Et pour le "remplacement de macro", même si le compilo fait ce qu'il veut, je trouve personnellement que de mettre inline exprime mieux l'intention du développeur
0  0 
Avatar de koala01
Expert éminent sénior https://www.developpez.com
Le 27/08/2009 à 9:07
Citation Envoyé par Matthieu Brucher Voir le message
Citation Envoyé par metagoto Voir le message
inline peut servir à ne pas avoir de multiples définitions de templates.

Ca peut être utile aussi pour remplacer ce que l'on pourrait faire avec des macros. MACHIN(++x) --> machin(++x)

OK pour laisser le compilo décider d'inliner ou non, mais OK aussi pour laisser le développeur placer des keywords inline qui vont bien dans certains cas.
Le compilateur fait ça bien mieux que toi, je ne vois l'intérêt de lui forcer ça !
Pour les templates, c'est idem, il inline automatiquement quand c'est possible/intéressant pour ton processeur.
D'autant plus que la seule restriction à l'utilisation des template est... que le compilateur dispose de l'implémentation des fonctions afin de pouvoir créer le code binaire correspondant une fois qu'il a déterminé le type de donnée manipulée...

Il est ainsi tout à fait possible d'envisager la création de fonctions virtuelles au sein de classes template alors que les fonctions virtuelles ne sont, par définition, jamais inlinées
0  0 
Avatar de CedricMocquillon
Membre averti https://www.developpez.com
Le 27/08/2009 à 9:20

On est parfois obligé d'inliner des définitions de templates si on les places dans des fichiers headers.

Et pour le "remplacement de macro", même si le compilo fait ce qu'il veut, je trouve personnellement que de mettre inline exprime mieux l'intention du développeur
C'est exactement le problème que j'avais eu dans ce post: http://www.developpez.net/forums/d58...tion-template/
Donc pour moi le mot clef inline est encore totalement d'actualité!
0  0 
Avatar de Matthieu Brucher
Rédacteur https://www.developpez.com
Le 27/08/2009 à 9:29
Je viens de répondre sur l'autre thread, inline ne fait que corriger des définitions multiples.
0  0 
Contacter le responsable de la rubrique C++

Partenaire : Hébergement Web