Nedosažitelný kód

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Eclipse. 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.

Příklad

Uvažujme následující část kódu v jazyce C:

int foo (int X, int Y) { return X + Y; int Z = X + Y; }

Deklarace int Z = X + Y; nebylo nikdy dosaženo, protože dříve nastal návrat z funkce. Deklarace proměnné Z proto může být odstraněna.

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á.

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top