optimisations controversées
Citation:
Envoyé par
droggo
Je ne vois pas quel pourrait être le problème dû à une optimisation : si on met des données dans une union, qui est une variable comme une autre, et qu'elles ne sont plus valides lorqu'on veut s'en servir, il faudra sérieusement penser à changer de compilateur.
Si tu mets ta donnée dans un membre de l'union et que te relis ce même membre tout ira bien (une variable comme une autre).
Si tu te sers d'une union pour éviter d'écrire reinterpret_cast, c'est à dire si tu mets ta donnée dans un membre, et que lis un autre membre (en l'occurrence, d'un autre type), tu n'utilises pas une union pour ce pour quoi elle est faite, et, selon la structure précise de ton code et le compilateur, tu pourrais ne pas obtenir ce que veux.
Citation:
Envoyé par
droggo
Si les concepteurs de compilateurs en arrivent à faire de telles "optimisations", qui compromettent le fonctionnement d'un programme, il faudra également penser à leur expliquer qu'optimiser, c'est bien, mais qu'il faut réfléchir un peu avant de se permettre certaines choses.
Quand gcc a commencé a simplifier agressivement les expressions arithmétiques, pour simplifier certains tests :
Code:
1 2 3 4
| void foo (int a) {
if (a + 1000 < a)
overflow ();
} |
Quand gcc a décidé que a + 1000 n'était pas strictement inférieur à a, par définition, et que donc la fonction foo ne faisait jamais rien, certaines personnes ont essayé d'expliquer qu'"optimiser c'était bien", mais que là ça allait trop loin, tout ça.
Ce à quoi il leur a été répondu qu'ils n'avaient qu'à apprendre à programmer correctement. (Avec quand même une distinction faite entre le vieux code hérité de quelqu'un d'autre, et le fait d'écrire de telles choses.)
Au final, gcc optimise de telles expressions, entre autres choses.
Et les protestations du genre "il faut réfléchir un peu avant de se permettre certaines choses" ne risquent pas d'impressionner beaucoup les développeurs du compilateur. Si tu veux défendre ton point de vue, tu as intérêt à développer des arguments autrement mieux étayés.