> Enfin comme quoi c'est possible de s'en passer de ces goto, c'est souvent plus verbeux mais on ne perd rien en duplication et pas grand chose en perfs.
Il faut voir aussi, dans l'exemple de code de copy_process() ci-dessus, que l'utilisation des goto permet de placer une quantité de code ~négligeable pour la gestion des erreurs ("goto xxx", instruction normalement jamais exécutée). Ainsi, le cache d'instructions cpu ne se remplit pas avec du code ~jamais exécuté : on gagne effectivement en performances.
Il est d'ailleurs prévu de pouvoir aider le compilateur en lui donnant le résultat probable du test, avec les macros "likely" ou "unlikely". Et ainsi le code s'exécute "tout droit" (mais ce n'est pas fait ici).
Linus encourage le goto dans les normes de codage du noyau. Mais bon, un noyau, c'est pas du code "normal", l'exemple est peut-être un peu mal choisi.
Pour en revenir au débat, je pense qu'un bon goto n'a pas son pareil, mais qu'il doit être utilisé avec parcimonie. De fait, à part le traitement des erreurs, je n'ai pas d'exemple où un goto est nécessaire.
[^] # Re: Hmm :/
Posté par Laurent Morel . En réponse au journal Entretient du noyau Linux. Évalué à 1.
Il faut voir aussi, dans l'exemple de code de copy_process() ci-dessus, que l'utilisation des goto permet de placer une quantité de code ~négligeable pour la gestion des erreurs ("goto xxx", instruction normalement jamais exécutée). Ainsi, le cache d'instructions cpu ne se remplit pas avec du code ~jamais exécuté : on gagne effectivement en performances.
Il est d'ailleurs prévu de pouvoir aider le compilateur en lui donnant le résultat probable du test, avec les macros "likely" ou "unlikely". Et ainsi le code s'exécute "tout droit" (mais ce n'est pas fait ici).
Linus encourage le goto dans les normes de codage du noyau. Mais bon, un noyau, c'est pas du code "normal", l'exemple est peut-être un peu mal choisi.
Pour en revenir au débat, je pense qu'un bon goto n'a pas son pareil, mais qu'il doit être utilisé avec parcimonie. De fait, à part le traitement des erreurs, je n'ai pas d'exemple où un goto est nécessaire.