Zdrojový kód

Zdrojový kód (též zdrojový text, slangově zdroják, ) je v informatice označení zápisu počítačového programu nebo jeho části v nějakém programovacím jazyce. Kompletní zdrojový kód softwarového projektu je obvykle uložen v jednom nebo více textových souborech. Zdrojový kód může být buď přímo prováděn (interpretován) interpretem nebo přeložen kompilátorem, který z něj vytvoří spustitelný soubor (případně doplněný knihovnami) obsahující strojový kód, který může operační systém zavést do paměti a spustit, takže je prováděn procesorem počítače. Běžný uživatel počítače obvykle se zdrojovým kódem nepřijde do styku.

Zápis zdrojového kódu 
Zdrojový kód obvykle programátor zapisuje pomocí textového editoru, ale může být též generován specializovaným programem. Textový editor může být součástí vývojového prostředí (IDE), které programátorovi tvorbu zdrojového kódu usnadňuje a poskytuje mu další podporu: zvýraznění syntaxe, vyznačení syntaktických chyb, nápověda, seznamy funkcí, příklady, přímý přístup k navazujícím nástrojům (vyvolání kompilátoru, možnost krokování a sledování průběhu programu pomocí debuggeru, vytváření souborů pro řízení překladu (Makefile), zpracování dokumentace a podobně).

V některých případech může být zdrojový kód vygenerován (viz automatické programování). Příkladem může být vytváření grafického uživatelského rozhraní k programu pomocí interaktivního nástroje, který na závěr vygeneruje kód v určitém programovacím jazyce. Také použití preprocesoru, podmíněného překladu nebo syntaktických maker může být považováno za jednoduchou metodu generování programu. Při použití generátorů kódu může být obtížné stanovit, co je skutečný zdrojový kód – obvykle se za něj považuje ten tvar, který je dále uchováván a upravován programátory.

Použití zdrojového kódu 
Samotný zdrojový kód nelze přímo využít. Je potřeba ho buď nechat přímo provádět interpreterem nebo je možné ho nejprve překladačem přeložit do cílového strojového kódu procesoru a poté ho nechat přímo procesorem vykonávat. Zdrojové kódy se obvykle s jednotlivými programy nedistribuují a běžný uživatel s nimi nepřijde do styku. Zvláštním případem je open source software, kde je dostupnost zdrojových kódů obvyklá. Umožňuje pokročilým uživatelům programy upravovat a zdrojové kódy přímo využívat (viz distribuce Linuxu a speciálně Gentoo Linux).

Interpret 
Při interpretaci je zdrojový kód průběžně převáděn do výkonného kódu procesoru, který zpracovává jednotlivé příkazy programu řádek po řádku. Tento způsob zpracování zdrojového textu za běhu programu je časově náročnější a běh programu může být relativně pomalý.

Překladač 
Překladač generuje strojový kód (souboru triviálních instrukcí procesoru) a provádí jeho optimalizace. Program může být následně proveden rychleji, než při interpretaci. Při překladu jsou obvykle nejprve vytvořeny objektové soubory a z nich pak linker vytvoří spustitelné binární soubory se strojovými instrukcemi procesoru. Změny v programu dělá programátor ve zdrojovém kódu. I když je možné dělat změny přímo v objektovém nebo strojovém kódu, není to obvyklé a je to velmi obtížné (zejména bez dostupných zdrojových kódů).

Pojem „překladač“ se používá i pro programy, které negenerují spustitelný strojový kód, ale bajtkód, který se dále interpretuje například virtuálním strojem.

Portování programu 
Dostupnost zdrojového kódu je rozhodujícím faktorem při portování software na jiné platformy, pro jiné operační systémy.

Opravy chyb 
Chyby v programech se opravují zpravidla přímo ve zdrojovém kódu. Není-li zdrojový kód k dispozici, je oprava programu velmi obtížná, ve větším rozsahu prakticky nemožná, protože je nutné zasahovat přímo do strojového kódu, kde je velmi obtížné najít souvislosti.

V takových případech se používá (aspoň) disassembler, který poskytne čitelnější kód.

Ostatní možnosti použití 
Zdrojový kód může sloužit jako popis software (viz UTSL) i jako výukový materiál pro začínající programátory, kteří si tak mohou osvojit různé obraty, postupy a metody. Využívá se také jako komunikační nástroj mezi zkušenými programátory, pro svoji krátkou a jednoznačnou interpretaci. Sdílení zdrojového kódu mezi vývojáři je velmi často považováno za rozhodující faktor ukazující na jejich programátorskou zručnost. Programátoři často využívají část zdrojového kódu z jednoho programu také v jiných projektech, což odpovídá konceptu softwarové znovupoužitelnosti ().

Dekompilace 

Zpětné vygenerování zdrojového kódu ze strojového kódu může umožňovat dekompilátor, který však obvykle není součástí vývojového prostředí a jehož účinnost závisí na různých faktorech. Lepší výsledky mohou poskytnout specializované dekompilátory pro různé překladače. Identifikátory (jména proměnných, funkcí a dalších objektů v programu), které mohou být velmi důležité pro pochopení funkce programu, nejsou ve strojovém kódu zpravidla obsaženy, takže dekompilátor vygeneruje vlastní identifikátory (dekompilátor často umožňuje jména zadat, takže při postupném pronikání do významu programu a jeho jednotlivých složek lze při opakovaném použití dekompilátoru výsledek vylepšovat). Dekompilace může být téměř nemožná, pokud překladač použil pokročilé optimalizace nebo pokud ji tvůrce programu záměrně ztížil. V takovém případě lze získat maximálně přepis strojového kódu do jazyka symbolických adres. Licence mnoha programů jejich dekompilaci zakazuje, v některých zemích může být zakázána zákonem.

Organizace zdrojového kódu 
Zdrojový kód má jeho tvůrce obvykle uložen na pevném disku svého počítače. Pokud je programátorů více, musí spolu nějakým vhodným způsobem komunikovat a udržovat své jednotlivé kopie zdrojového kódu aktuální (tj. aby obsahovaly změny, které provedl kolega). Pro popis změn slouží speciální formát (diff), který obsahuje jednotlivé změny a jejich kontext (okolní řádky programu). Jednotlivé změny popsané diffovými soubory označujeme jako záplaty (patch).

Protože je posílání změn pomocí jednotlivých záplat (včetně jejich začlenění do zdrojového kódu u příjemce) časově náročné, jsou tyto procesy obvykle automatizovány pomocí systému revizí (RCS, CVS, Git, Apache Subversion a další).

Zdrojový kód programu nemusí být celý vytvořen v jednom programovacím jazyce; např. je běžné, že program, který je napsán v programovacím jazyce C někdy obsahuje části napsané v jazyce symbolických adres z důvodu optimalizace nebo kvůli snadnějšímu programování vstupně-výstupních funkcí. Různé části programu mohou být napsány různých programovacích jazycích a teprve při překladu integrovány pomocí knihoven nebo speciálních rozhraní.

Větší projekty vyžadují obvykle kompilaci více souborů obsahujících zdrojový kód. Aby programátor nemusel neustále myslet na všechny závislosti a zadávat jednotlivé pokyny kompilátoru ručně, používají se specializované řídící soubory Makefile. Tento soubor obsahuje popis závislostí mezi jednotlivými částmi zdrojového kódu a postup překladu.

Licence 
Programy a jejich zdrojové kódy jsou obvykle chráněny licencí. Podle typu licence můžeme rozdělit software na svobodný software nebo proprietární software a dále na další podskupiny podle konkrétní použité licence. Všeobecně lze označit software za svobodný, jestliže je jeho zdrojový kód volně přístupný pro používání, distribuci, další úpravy a studium. U proprietárního software se neposkytuje veřejný přístup ke zdrojovým kódům a považuje se za soukromé vlastnictví, uplatňují se autorská práva a obchodní tajemství.

Styl zápisu programu 

Styl zápisu programu má přímou vazbu na snadnost jeho následné správy, úprav a rozšiřování. Existuje mnoho pravidel programovacího stylu, která jsou pro zápis zdrojového kódu uplatňována. Jejich cílem je obvykle čitelnost, přehlednost a jednotnost v rámci celého projektu. Styl může zahrnovat i požadavky na logickou strukturovanost zdrojového kódu, která jeho správu dále usnadňuje.

Odkazy

Reference

Literatura 
 VEW04) „Using a Decompiler for Real-World Source Recovery“, M. Van Emmerik a T. Waddington, the Working Conference on Reverse Engineering, Delft, Holandsko, 9–12. listopad 2004. .

Externí odkazy 
 

 
Počítačová terminologie