Překladová jednotka

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 23. května 2018; ověření vyžaduje 1 úpravu .

V programovacích jazycích je překladová jednotka  maximálním blokem zdrojového textu , který lze fyzicky přeložit (převést na interní strojovou reprezentaci; zejména zkompilovat ). Důležitý koncept jazyků C a C++ .

Pojem „překladová jednotka“ se objevil s prvními interaktivními počítači: v té době byl nedostatek paměti takový, že počítač v ní nemohl udržet kompilátor, text velkého programu a výsledný kód současně. . Musel jsem zkompilovat po částech a pak použít speciální program - linker - k sestavení spustitelného souboru  z kompilovaných modulů .

Nyní je text rozdělen do překladových jednotek primárně kvůli opětovnému použití kódu . A moderní optimalizační kompilátory jsou často tak pomalé, že přestavba velkého programu může trvat desítky minut.

V C a C++

V programovacích jazycích C a C ++ je překladová jednotka zdrojový text dodávaný na vstup kompilátoru (soubor s příponou nebo ) se všemi soubory v něm obsaženými . .c.cpp

Na rozdíl od mnoha jiných programovacích jazyků ( Pascal , Java , C# ) jsou v C překladové jednotky kompilovány samostatně bez překrývání. "Dokování" jednotek do programu je monitorováno výhradně linkerem . Existují dvě technologie pro psaní programů v jazyce C: „mnoho překladových jednotek“ a „jednotka překladu“.

Sada překladových jednotek

Tradiční technikou je ckompilace každého -souboru samostatně, načež jsou objektové soubory sestaveny do spustitelného souboru linkerem.

Jedna překladová jednotka

Technika, kde se více csouborů nekombinuje pomocí linkeru, ale pomocí #include. Například:

// kompilujte_me.cpp #include "foo.cpp" #include "bar.cpp" // foo.cpp #include <iostream> // Velké standardní záhlaví #include "bar.hpp" // Záhlaví funkce 'bar' int main () { bar (); } // bar.cpp #include <iostream> // Stále stejně velké záhlaví (nebude zahrnuto podruhé!) voidbar ( ) { ... }

Výhody takové konstrukce: urychluje se úplná montáž, rozšiřuje se rozsah možných optimalizací . Zjednodušuje adaptaci cizích knihoven pro exotické kompilátory (například Embarcadero C++ Builder v režimu __fastcall) [1] . Mínus - s malými změnami v kódu je celý program překompilován.

Velké knihovny s otevřeným zdrojovým kódem (jako je SQLite ) jsou často vydávány jako jediná překladatelská jednotka. Zároveň jsou naprogramovány "po staru", s obrovským počtem jednotek a jsou přenášeny z jednoho typu na druhý pomocí jednoduchého preprocesoru.

V jiných jazycích

  • Fortran : Překladová jednotka je jedna programová jednotka (hlavní program, podprogram nebo funkce) nebo modul spolu se zahrnutými soubory. Že. Ve Fortranu může jeden soubor obsahovat několik překladových jednotek.
  • Pascal : Jednotkou překladu je program nebo modul.
  • PHP , Perl : žádné překladové jednotky, lze přeložit pouze celý program.
  • Java : Jednotkou překladu je třída .

Viz také

Poznámky

  1. XE2 musí zakázat varování a #includezabalit standardní knihovnu do konvence volání __cdecl .