Fordító egység

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2018. május 23-án felülvizsgált verziótól ; az ellenőrzéshez 1 szerkesztés szükséges .

A programozási nyelvekben a fordítási egység a forrásszöveg  azon maximális blokkja , amely fizikailag lefordítható (belső gépi reprezentációvá alakítható; különösen lefordítható ). A C és C++ nyelv fontos fogalma .

A "fordítóegység" fogalma az első interaktív számítógépeknél jelent meg: akkoriban a memória hiánya olyan volt, hogy a számítógép nem tudta egyszerre tartani a fordítót, egy nagy program szövegét és a kapott kódot. . Részekre kellett fordítanom, majd egy speciális programmal - egy linkerrel - futtatható fájlt kellett összeállítani  a lefordított modulokból .

Most a szöveg fordítási egységekre van osztva elsősorban a kód újrafelhasználása érdekében . A modern optimalizáló fordítók pedig gyakran olyan lassúak, hogy egy nagy program újraépítése több tíz percig is eltarthat.

C és C ++ nyelven

A C és C++ programozási nyelvekben a fordítási egység egy forrásszöveg, amelyet a fordító bemenetére ( vagy kiterjesztésű fájlra ) adunk az összes benne lévő fájllal együtt. .c.cpp

Sok más programozási nyelvtől eltérően ( Pascal , Java , C# ) a C nyelvben a fordítási egységek külön-külön, átfedés nélkül állnak össze. Az egységek programba való "dokkolását" kizárólag a linker figyeli . Két technológia létezik a C programok írására: „sok fordítási egység” és „egy fordítási egység”.

A fordítási egységek halmaza

A hagyományos technika az, chogy minden -fájlt külön fordítanak le, majd az objektumfájlokat a linker összeállítja végrehajtható fájllá.

Egy fordítási egység

Olyan technika, amelyben több cfájlt nem a linker, hanem a #include. Például:

// compile_me.cpp #include "foo.cpp" #include "bar.cpp" // foo.cpp #include <iostream> // Nagy szabványos fejléc #include "bar.hpp" // Függvényfejléc 'bar' int main () { bár (); } // bar.cpp #include <iostream> // Továbbra is ugyanaz a nagy fejléc (másodszor nem kerül bele!) üres sáv ( ) { ... }

Egy ilyen szerkezet előnyei: felgyorsul a teljes összeszerelés, bővül a lehetséges optimalizációk köre . Leegyszerűsíti a külföldi könyvtárak adaptálását egzotikus fordítók számára (például az Embarcadero C++ Builder módban __fastcall) [1] . Mínusz - kis változtatásokkal a kódban a teljes program újrafordításra kerül.

A nagy nyílt forráskódú könyvtárakat (például az SQLite -t ) gyakran egyetlen fordítási egységként adják ki. Ugyanakkor "régi módon" programozzák őket, hatalmas számú egységgel, és egy egyszerű előfeldolgozóval átviszik egyik típusból a másikba.

Más nyelveken

  • Fortran : A fordítási egység egyetlen programegység (főprogram, szubrutin vagy függvény) vagy modul, a mellékelt fájlokkal együtt. Hogy. A Fortranban egy fájl több fordítási egységet is tartalmazhat.
  • Pascal : A fordítás egysége egy program vagy modul.
  • PHP , Perl : nincsenek fordítási egységek, csak a teljes program fordítható.
  • Java : A fordítás egysége az osztály .

Lásd még

Jegyzetek

  1. Az XE2-nek le kell tiltania a figyelmeztetéseket , és #includea szabványos könyvtárat hívási konvencióba __cdecl kell csomagolnia .