Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!
Kompiliavimas
Kompiliavimas arba kompiliacija - tai tada, kai kokia tai programa, parašyta kokia nors žmonėms suprantama programavimo kalba, yra išverčiama į mašininį kodą, kuris jau suprantamas realiam procesoriui. O jau paskui tasai išverstas mašininis kodas gali būti vykdomas.
Kompiliavimas yra vienas iš dviejų esminių programų vykdymo būdų, kai kitas yra interpretavimas, kada programa yra vykdoma tiesiogiai, kaip parašyta.
Kadangi kompiliavimas reiškia, kad programa turi būti paverčiama į mašininį kodą, kuris savo logika gali gerokai skirtis nuo tos logikos, kuri yra programoje, tai atsiranda kai kurie reikalavimai programavimo kalboms. Kaip pvz., dėl šių priežasčių programa negali paprastu būdu skaityti savo pačios teksto, nes po kompiliacijos jo tiesiog nelieka. Yra ir kitų, visokių smulkesnių problemėlių. Dėl visų tų priežasčių atsiranda reikalavimai ir programavimo kalboms, kurios tiktų kompiliacijai. Tai atitinkamai ir būna išskiriamos kompiliuojamos kalbos, kurios tai kompiliacijai tinkamos. Kaip priešingybė tokioms kalboms - interpretuojamos kalbos, kurios kompiliacijai tinka prastai arba išvis netinka.
Dažniausiai kompiliatoriui reikia ne tik sutransliuoti tam tikras kalbos dalis į komandų sekas, bet ir išskirti vietą atminties kintamiesiems, o kartais dar ir daugiau visokių gudrumų prigalvoti.
Kadangi tasai kodas generuojasi ne itin tiesiogiai, tai kartais būna nemažai painiavos ir per vieną praėjimą (t.y., vieną perskaitymą, einant nuosekliai per programos teksto eilutes) sukompiliuoti nepavyksta. Kaip pvz., C kalba ir daugelis kitų iš Algol kilusių kalbų neleidžia visko padaryti per vieną praėjimą, todėl kompiliatoriai gaunasi gana lėti, o kompiliavimas ne toksai efektyvus, nes sunkiai kompiliuojamą programą sunku ir optimizuoti.
Kaip kontrastas, kai kurios programavimo kalbos nuo pat pradžių buvo konstruojamos, atsižvelgiant į jų kompiliavimą - kaip kad Pascal, o paskui Modula. Tai čia atsiranda dar papildomų reikalavimų programavimui (visų pirma, išankstinė naudojamų kintamųjų, procedūrų, funkcijų ir pan. deklaracija), bet užtat kompiliatoriai veikia keleriopai greičiau, o sukompiliuotos programos būna daug geriau optimizuotos, greitesnės.
Aišku, yra ir tarpinių variantų tarp kompiliacijos ir interpretavimo - pvz., Java kalbos atveju kompiliavimas būna į kodą, kuris skirtas virtualiai Java mašinai, o šioji jau tą kodą interpretuoja. Gana panašiai būdavo ir su senoviniais BASIC interpretatoriais - šieji turėdavo dvipusį kodą, kurį prireikus pertransliuodavo į redaguojamą programą, o prireikus išsaugoti ar vykdyti - paversdavo BASIC mašinos kodu, užimančiu mažiau vietos ir greičiau vykdomu.
Dar žr.
- Kroskompiliacija - čia toksai specifinis atvejis, kai ant vienos kompiuterio architektūros kompiliuojama kitai architektūrai
- Asembliavimas - čia išties panašiai į kompiliavimą, nes verčiama mašininiais kodais, bet tiesiogiai iš asemblerio kalbos, nieko gudraus neatliekant