Metody realizacji języków programowania/MRJP Wykład 8: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Gorecki (dyskusja | edycje)
Gorecki (dyskusja | edycje)
Linia 36: Linia 36:
Często kod martwy powstaje po propagacji kopii lub po zwijaniu stałych.
Często kod martwy powstaje po propagacji kopii lub po zwijaniu stałych.


== ShowHide ==
== Zwijanie stałych ==
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Jak ukryć kawałek tekstu
<div class="mw-collapsible-content" style="display:none">Obejrzyj źródło</div>
</div>
<div class="mw-collapsible mw-made=collapsible mw-collapsed">


Uwaga: nie należy umieszczać ===nagłówków=== w tym środowisku, bo się to i owo rozjeżdża (spis treści, linki Edytuj itp).
Jest to proces upraszczania wyrażeń stałych. Przykład:


* adsdas
x = 30 * 2
* asda
 
  asdasdasdad</div>
można zastąpić przez
 
  x = 60
 
Zwijanie stałych czasem wykonuje się na wcześniejszych etapach kompilacji.

Wersja z 17:19, 14 lip 2006

Wprowadzenie

Przekształcenia poprawiające kod

Eliminacja wspólnych podwyrażeń

Wyrażenie E postaci XopY jest nazywane wspólnym podwyrażeniem jeśli występuje ono w kilku miejscach oraz wartości zmiennych X i Y użytych w kolejnych wystąpieniach E nie zmieniły się po poprzednim obliczeniu E. W takiej sytuacji można zastąpić kolejne wystąpienia E przez wartość wyliczoną za pierwszym razem.

Przykład:

a=4*i
b=4*i
c=a+b

Drugie wyliczenie 4*i można zastąpić przez b. Przekształcony blok:

a=4*i
b=a
c=a+b

Eliminację wspólnych podwyrażeń można stosować

  • lokalnie - gdy przeszukujemy jeden blok bazowy,
  • globalnie - dla całego grafu przepływu (trudniejsze z powodu pętli).

Usuwanie martwego kodu

Zmienną nazywamy żywą w danym miejscu programu, jeżeli jej wartość może zostać użyta. W pozostałych przypadkach nazywamy zmienną martwą w tym miejscu. Analogicznie definiujemy kod martwy, tzn. taki który oblicza wartości bezużyteczne. Na przykład wyliczenie wartości dla zmiennej martwej lub instrukcja postaci

if (false) ...

to kod martwy.

W oczywisty sposób kod martwy usuwamy.

Często kod martwy powstaje po propagacji kopii lub po zwijaniu stałych.

Zwijanie stałych

Jest to proces upraszczania wyrażeń stałych. Przykład:

x = 30 * 2

można zastąpić przez

x = 60

Zwijanie stałych czasem wykonuje się na wcześniejszych etapach kompilacji.