Gli esempi nel documento a cui stai collegando sono (e sono destinati ad essere) esempi semplificati di un particolare tipo di ottimizzazione. Nel mondo reale, ovviamente, non è particolarmente probabile che uno sviluppatore scriva esplicitamente una dichiarazione come x = x * 1
, quindi non è particolarmente importante che un compilatore ottimizzi quella specifica affermazione. D'altra parte, ci sono molte trasformazioni più complesse di questo tipo che un compilatore può implementare che sarebbe molto più utile per i programmi reali.
L'articolo a cui si rimanda parla di come l'applicazione della semplificazione algebrica e della riassociazione viene spesso utilizzata per integrare altre ottimizzazioni. Può essere utilizzato per riorganizzare le espressioni al fine di implementare la riduzione della forza dell'operatore o il piegamento costante o il movimento del codice invariante il ciclo. Molte delle trasformazioni algebriche che il compilatore sta per applicare saranno con l'obiettivo di fare cose come raccogliere tutti i termini costanti di un'espressione insieme in modo che possano essere scomposti, raccogliendo tutti i termini invarianti del ciclo insieme in modo che possano essere spostati fuori dal ciclo, ecc.
Un bell'esempio di questo è la sezione "Semplificazioni algebriche delle espressioni di indirizzamento" in questa parola doc .
Se vuoi un esempio di un caso in cui verrebbe utilizzata una trasformazione molto semplice, immagina qualcosa come
[(4*(a + b))/ (4*a)] * c
facendo la semplificazione algebrica, ottieni
[(4*a + 4*b)/ (4*a)] * c
[(4*a)/(4*a) + (4*b)/(4*a)] * c
[1 + b/a] * c
(1*c) + (b/a)*c
c + (b*c)/a
La semplificazione 1*c = c
arriva verso la fine e solo dopo diverse altre semplificazioni algebriche e trasformazioni create quell'espressione. Generalmente, non sono gli sviluppatori umani che stanno scrivendo questo, è il compilatore che applica altre trasformazioni che alla fine si basano su semplici regole.