Kiedy pisałem procedurę ‘serwera’ HTTP, to zauważyłem, że ciężko jest podzielić ją na mniejsze funkcje ze względu na to, że podczas jej wykonywania się powstawały zmienne pośrednie, które mogły być wykorzystywane później bez niepotrzebnego obliczania od nowa.
Występowało coś w rodzaju wartości ponownie używanych, jakie wykorzystuje kompilator podczas tworzenia kodu asemblera do optymalizacji programu. Jednak tutaj w kodzie wysokopoziomowym.
Natomiast nie wiem, pod jakie przekształcenie programu wysokopoziomowego ten sposób pisania programu podpada, by można było utworzyć mniejsze funkcje. Te wartości pośrednie można by trzymać w jakichś zmiennych stanu, ale wtedy musiałyby one być globalne... więc raczej nie.
Przykładowo:
‘Serwer’ otrzymuje blok danych, w którym są nagłówki żądania HTTP. Procedura ‘serwera’ sprawdza poprawność formatu tych nagłówków i od razu oznacza w zmiennych lokalnych, gdzie się znajdują te nagłówki w bloku danych, czyli ustawia sobie wskaźniki do bloku danych (ściśle to ustawia adres początku i końca danego nagłówka HTTP). To są właśnie niektóre z tych wartości pośrednich, ponownie używanych.
Później w tej procedurze ‘serwera’, gdy potrzeba skorzystać z tekstu nagłówków żądania HTTP, to od razu czytam z przechowywanych wskaźników (lub oczywiście w przypadku braku danych nagłówków — pomijam je).
Takie postępowanie powoduje unikanie ponownego przetwarzania tekstu i powstają wartości ponownie używane w wysokopoziomowym kodzie programu w postaci zmiennych lokalnych.
Jak przekształcić taki kod na taki, w którym możliwe będzie użycie mniejszych funkcji, a może podejście z ponownym użyciem wartości raz obliczonych jest błędne?