Käännösyksikkö

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 23. toukokuuta 2018 tarkistetusta versiosta . vahvistus vaatii 1 muokkauksen .

Ohjelmointikielissä käännösyksikkö  on suurin lähdetekstin lohko, joka voidaan fyysisesti kääntää (muuntaa sisäiseksi koneesitukseksi; erityisesti käännetty ). Tärkeä käsite C- ja C++-kielissä .

"Käännösyksikön" käsite ilmestyi ensimmäisten vuorovaikutteisten tietokoneiden yhteydessä: siihen aikaan muistin puute oli sellainen, että tietokone ei voinut pitää siinä kääntäjää, suuren ohjelman tekstiä ja tuloksena olevaa koodia samanaikaisesti. . Minun piti kääntää osissa ja sitten käyttää erityistä ohjelmaa - linkittäjä - koota suoritettava tiedosto  käännetyistä moduuleista .

Nyt teksti on jaettu käännösyksiköihin ensisijaisesti koodin uudelleenkäytön vuoksi . Ja nykyaikaiset optimoivat kääntäjät ovat usein niin hitaita, että suuren ohjelman uudelleenrakentaminen voi viedä kymmeniä minuutteja.

C : ssä ja C++:ssa

C- ja C++ - ohjelmointikielissä käännösyksikkö on kääntäjän syötteeseen syötetty lähdeteksti (tiedosto, jonka tunniste on tai )  ja kaikki siihen sisältyvät tiedostot ..c.cpp

Toisin kuin monet muut ohjelmointikielet ( Pascal , Java , C# ), C:ssä käännösyksiköt käännetään erikseen ilman päällekkäisyyttä. Yksiköiden "telakoitumista" ohjelmaan valvoo yksinomaan linkkeri . C-ohjelmien kirjoittamiseen on kaksi tekniikkaa: "monet käännösyksiköt" ja "yksi käännösyksikkö".

Käännösyksiköiden joukko

Perinteinen tekniikka on ckääntää kukin -tiedosto erikseen, minkä jälkeen linkkeri kokoaa objektitiedostot suoritettavaksi tiedostoksi.

Yksi käännösyksikkö

Tekniikka, jossa useita ctiedostoja ei yhdistetä linkittäjä vaan #include. Esimerkiksi:

// compile_me.cpp #include "foo.cpp" #include "bar.cpp" // foo.cpp #include <iostream> // Suuri vakiootsikko #include "bar.hpp" // Toiminnon otsikko "bar" int main () { baari (); } // bar.cpp #include <iostream> // Edelleen sama iso otsikko (ei sisällytetä toista kertaa!) voidbar ( ) { ... }

Tällaisen rakenteen edut: koko kokoonpano nopeutuu, mahdollisten optimointien valikoima laajenee . Se yksinkertaistaa ulkomaisten kirjastojen mukauttamista eksoottisille kääntäjille (esimerkiksi Embarcadero C++ Builder -tilassa __fastcall) [1] . Miinus - pienillä muutoksilla koodissa koko ohjelma käännetään uudelleen.

Suuret avoimen lähdekoodin kirjastot (kuten SQLite ) julkaistaan ​​usein yhtenä käännösyksikkönä. Samalla ne ohjelmoidaan "vanhanaikaiseen tapaan", valtavalla määrällä yksiköitä, ja ne siirretään tyypistä toiseen yksinkertaisella esiprosessorilla.

Muilla kielillä

  • Fortran : Käännösyksikkö on yksittäinen ohjelmayksikkö (pääohjelma, alirutiini tai toiminto) tai moduuli mukana toimitettujen tiedostojen kanssa. Että. Fortranissa yksi tiedosto voi sisältää useita käännösyksiköitä.
  • Pascal : Käännösyksikkö on ohjelma tai moduuli.
  • PHP , Perl : ei käännösyksiköitä, vain koko ohjelma voidaan kääntää.
  • Java : Käännösyksikkö on luokka .

Katso myös

Muistiinpanot

  1. XE2:n on poistettava varoitukset käytöstä ja #includekäärittävä vakiokirjasto kutsumiskäytäntöön __cdecl .