Attualmente sto testando Visual C ++ 10 su alcuni piccoli pezzi di codice. Ad esempio, come questo (preso da qui ):
int main()
{
int i;
clrscr();
for(i=0,i++,i<=5;i++,i<=2;i=0,i<=5,i+=3){
printf("%d ",i);
}
return 0;
}
Per il codice sopra il compilatore emette il codice macchina che in effetti fa questo:
clrscr();
printf("%d ",2);
return 0;
e questo mi rende felice. A volte il compilatore emette un codice veramente stupido e quindi registro un elemento di feedback di Microsoft Connect.
Ho la seguente preoccupazione. Vale la pena testare un compilatore su un codice banale?
Da un lato, vogliamo che il codice reale sia compilato nel miglior modo possibile, non alcuni stupidi frammenti di esempio.
D'altra parte, l'ottimizzazione del compilatore è ricorsiva nel senso che se il codice B segue il codice A e il compilatore può vedere che il codice B non fa nulla può eliminare il codice B ed eliminare qualsiasi cosa collegata A e B logicamente e quindi ottimizzare (e forse eliminare) codice A migliore. E se il compilatore non riesce a ottimizzare il codice B, probabilmente non sarà in grado di ottimizzare il codice A. Quindi ogni miglioramento del codice generato è importante - un codice migliore a un certo punto può significare un codice migliore altrove e questo è vantaggioso.
Vale la pena testare i compilatori su campioni banali o sono degni solo i test sul "codice reale"?