Što je optimizacija programa?

Optimizacija programa je proces modifikacije računalnog programa na način koji uzrokuje da se program brže izvršava, troši manje resursa ili općenito funkcionira s višom razinom učinkovitosti. Zadatak optimizacije mogu automatski izvesti neki prevoditelji programskih jezika, namjerno korištenjem programa za optimizaciju ili ručno programeri koji prolaze kroz izvorni kod i pokušavaju napraviti određena poboljšanja. Općenito, optimizacija programa se izvodi s određenim ciljem, jer postoji vrlo malo općih optimizacija koje se mogu napraviti na programu koje na neki način ne smanjuju optimizirano stanje drugog dijela programa, što znači da program obično može biti optimiziran za brzinu ili korištenje resursa, ali obično ne oboje. Jedna komplikacija koja se može pojaviti s nekim vrstama optimizacije jest da mnogi programski jezici visoke razine pružaju tako veliku razinu apstrakcije između izvornog koda i računalnog jezika da optimizaciju može biti teško ili nemoguće implementirati na svim platformama u svim situacijama, posebno s interpretirani jezici koji koriste kompilaciju upravo na vrijeme (JIT).

Važan koncept u optimizaciji programa je ideja da optimizacija obično dolazi s nekom vrstom cijene. Jedan primjer toga je da, kada je dio koda optimiziran za brži rad, povećanje brzine može doći po cijenu čitljivosti koda, korištenja memorije, fleksibilnosti programa ili niza drugih troškova. To znači da optimizacija programa mora biti ciljani proces, s namjerom da jedan aspekt programa radi na bolji način, dok je spreman žrtvovati učinkovitost drugih aspekata.

Različite vrste optimizacije programa mogu se izvesti u različitim fazama razvoja programa. Tijekom dizajna, široka optimizacija može se obaviti osiguravanjem da program izgleda učinkovito radi. Kada radite sa stvarnim izvornim kodom, optimizacije mogu uključivati ​​osiguranje da nema dodatnih naredbi, ponavljajućih poziva ili loše napisanih funkcija. Prilikom kompilacije mnoge optimizacije automatski izvodi prevodilac i programer ih može voditi korištenjem različitih sklopki ili direktiva kompajlera.

Automatske optimizacije, kao što se mogu dogoditi s kompajlerom ili programom za optimizaciju posvećenosti, često mogu uključivati ​​trikove koji su previše složeni da bi bili praktični za programere. To može uključivati ​​premještanje instrukcija u programu tako da se izvršavaju izvan redoslijeda izvorno napisanog, ali na učinkovitiji način za procesor. Također može uključivati ​​namjerno pomicanje resursa kao što su memorijski blokovi kako bi im se mogao brže pristupiti. Većina optimizacije programa događa se automatski na razini prevoditelja.

Jedna od komplikacija s ponavljanom ili agresivnom optimizacijom programa je da, nakon što je program izmijenjen radi učinkovitijeg rada, općenito postaje teže mijenjati ga u druge svrhe, kao što je dodavanje funkcionalnosti ili popravljanje bugova. To se može dogoditi kada optimizacije počnu zaključavati postavljena ponašanja programa koja se ne mogu lako promijeniti ili prilagoditi novom kodu bez potrebe da se sve optimizacije ponište. Veći problem je što u mnogim slučajevima optimizirani program postaje manje čitljiv, jer se koriste trikovi i prečaci umjesto samo sažetih naredbi i klasičnih upravljačkih struktura. Iz tih razloga često postoji razina optimizacije programa na kojoj je prihvatljivo zaustaviti se, iako bi drastične izmjene koda mogle učiniti da program radi nešto učinkovitije.