Nedosažitelný kód
Author
Albert FloresEclipse. Nedosažitelný kód je v programování část zdrojového kódu programu, která není nikdy vykonána, protože neexistuje žádná cesta, která by k ní vedla ze zbytku programu.
Nedosažitelný kód je někdy nesprávně označován jako mrtvý kód, avšak mrtvým kódem se rozumí kód, který je vykonán, ale jeho výsledek nemá žádný vliv na výstup programu.
Obecně je nedosažitelný kód považován za nežádoucí například z následujících důvodů:
* zbytečně zabírá paměť * způsobuje nadbytečné cachování instrukcí do instrukční cache CPU * z pohledu údržby programu může stát čas a peníze udržovat a dokumentovat kód který není nikdy vykonán a tudíž je zbytečný.
Příčiny
Vznik nedosažitelného kódu může mít mnoho různých důvodů, jako jsou:
* programátorská chyba v komplexním větvení programu. * důsledek vnitřních transformací provedených optimalizací. +more * nedokonalé testování nového, či modifikovaného programu, které neodhalilo přeskočený nedosažitelný kód. * zastaralý kód, který programátor zapomněl smazat. * nepoužitý kód, o kterém programátor rozhodl jej ponechat, protože byl zamíchaný s funkčním kódem. * část kódu užitečného kódu v podmíněném větvení nemusí být nikdy vykonána, pokud tomu neodpovídají vstupní data. * komplexní zastaralý kus kódu byl záměrně v programu ponechán, ale učiněn nedosažitelným, aby mohl být později v případě nutnosti opět navrácen. * ladící informace, které z programu teprve budou odebrány.
Analýza
Detekce nedosažitelného kódu je forma statické analýzy a zahrnuje provedení analýzy řídícího toku k nalezení částí, které nebyly nikdy dosaženy bez ohledu na hodnoty proměnných a jiných podmínek při běhu. V některých jazycích (např. +more Java) jsou určité formy nedosažitelného kódu explicitně zakázány. Optimalizace odstraňující nedosažitelný kód se nazývá eliminace nedosažitelného kódu.
Kód se může stát nedosažitelným v důsledku optimalizací provedených kompilátorem (např. eliminace společných podvýrazů). +more V praxi má na odhalování nedosažitelného kódu značný vliv míra důmyslnosti provedené analýzy. Například výpočet konstantních výrazů a jednoduchá analýza toku dat snadno odhalí, že volání funkce bar; je nedosažitelné.
int N = 2 + 1;
if (N == 4) { bar; }
Avšak mnohem komplexnější a důmyslnější analýzy musí být provedeny, aby odhalily nedosažitelné volání funkce bar; v tomto příkladu:
double X = sqrt(2);
if (X > 5) { bar; }
Technika eliminace nedosažitelného kódu je ve stejné třídě optimalizací jako eliminace mrtvého kódu a redundantního kódu.
Nedosažitelnost a profilování
V některých případech může být praktický přístup vyřešit snadná kritéria neodosažitelnosti a na komplexnější použít profiler. Profilování samo o sobě nedokazuje cokoli o nedosažitelnosti kusu kódu, ale může být dobrý vodítkem k potenciálně nedosažitelnému kódu. +more Když je ten nalezen, nedosažitelnost je třeba ověřit komplexnějším nástrojem nebo i ruční analýzou a rozhodnout, zdali je podezřelá část skutečně nedosažitelná.