Kompiliavimas programuojant: kas tai yra ir kaip tai veikia

Paskutiniai pakeitimai: kovo 10 d. 2025 m.
  • Kompiliuojant šaltinio kodas paverčiamas vykdomuoju mašinos kodu.
  • Kompiliatorius atlieka leksinę, sintaksinę ir semantinę analizę.
  • Yra AOT, JIT, kryžminiai kompiliatoriai ir transpilatoriai.
  • Sukompiliuotas kodas yra greitesnis nei interpretuotas kodas.

Kompiliavimo procesas

Jei esate pasinėrę į programavimo pasaulį, tikriausiai esate girdėję terminą „ kompiliuoti “. Ši sąvoka yra esminė programinės įrangos kūrime, nes ji apibrėžia procesą, kurio metu programavimo kalba parašytas šaltinio kodas yra transformuojamas į formatą, kurį gali vykdyti kompiuteris.

Suprasti, ką reiškia kompiliuoti ir kaip veikia kompiliatorius, būtina kiekvienam programuotojui, norinčiam optimizuoti savo kodą ir geriau suprasti, kaip veikia programavimo kalbos. Žemiau mes išsamiai paaiškiname, ką reiškia šis procesas, esamų kompiliatorių tipus ir pagrindinius skirtumus tarp sudaryto ir interpretuoto kodo.

Kas yra kompiliavimas?

Kompiliavimas yra aukšto lygio programavimo kalbos (pvz., C++, Java arba Rust) šaltinio kodo vertimo į dvejetainį arba mašininį kodą procesas , kurį kompiuterio procesorius gali tiesiogiai vykdyti.

Šaltinio kodas parašytas kalba, kurią žmonės gali skaityti ir suprasti, tačiau kompiuteriai gali interpretuoti tik dvejetainį kodą. Todėl norint konvertuoti šaltinio kodą į vykdomąjį kodą, reikia specialios programos, vadinamos kompiliatoriumi . Jei norite sužinoti daugiau šia tema, galite peržiūrėti mūsų vadovą apie kompiliatorių ir interpretatorių sąvokas ir skirtumus.

Kas yra kompiliatorius ir kaip jis veikia?

Kompiliatorius yra programa , kuri specializuojasi šaltinio kodo transformavime į objektinį arba vykdomąjį kodą. Šis konvertavimo procesas susideda iš kelių etapų:

  Lua ir Bash: praktinis vadovas, pavyzdžiai ir realaus pasaulio kriterijai

1. Išankstinis apdorojimas

Prieš kompiliuojant šaltinio kodas praeina išankstinio apdorojimo fazę, kai išplečiamos makrokomandos, įtraukiami būtini failai ir atliekami kiti pakeitimai prieš generuojant kodą, kuris iš tikrųjų yra sukompiliuotas.

2. Leksinė analizė

Kompiliatorius nuskaito šaltinio kodą ir padalija jį į žetonus (tokenus) , kurie yra mažiausi programavimo kalbos reikšmės vienetai, tokie kaip raktiniai žodžiai, identifikatoriai ir operatoriai.

3. Sintaksinė analizė

Šiame etape patikrinama, ar kodo struktūra yra teisinga pagal programavimo kalbos gramatiką. Jei yra sintaksės klaidų, kompiliatorius jas aptiks ir praneš programuotojui, kur jos yra, kad būtų galima jas ištaisyti.

4. Semantinė analizė

Kompiliatorius patikrina, ar kodo operacijos ir išraiškos yra logiškos. Jis patikrina, ar kintamieji ir funkcijos yra gerai apibrėžti ir ar atliekamos galiojančios operacijos. Tai labai svarbu norint užtikrinti, kad jūsų kodas būtų kompiliuojamas be problemų.

5. Tarpinis kodo generavimas

Patikrinęs kodo sintaksę ir semantiką, kompiliatorius sugeneruoja tarpinį kodą – supaprastintą vaizdavimą, kurį galima optimizuoti prieš galutinį vertimą į mašininį kodą.

6. Kodo optimizavimas

Šiame etape kompiliatorius patobulina sugeneruotą kodą, kad jis taptų efektyvesnis ir sumažintų atminties sunaudojimą bei apdorojimo laiką.

7. Mašininio kodo generavimas

Galiausiai tarpinis kodas konvertuojamas į kompiuterio procesoriaus architektūrai būdingas mašininio kodo instrukcijas . Ši proceso dalis yra gyvybiškai svarbi siekiant užtikrinti, kad programa tinkamai veiktų aparatinėje įrangoje.

8. Susiejimas

Sugeneruotas objekto kodas sujungiamas su bibliotekomis ir kitais moduliais, reikalingais galutiniam vykdomajam failui sukurti. Įdomu, kaip šios bibliotekos yra tvarkomos, ir tam gali būti naudingas specializuotas kompiliatorius, pavyzdžiui, tuos, kuriuos galite rasti mūsų skyriuje apie C kalbos kompiliatorius.

  Išsamus „Keras“ vadovas: kas tai yra ir kaip jis veikia

Kompiliatorių tipai

Yra įvairių tipų kompiliatoriai, priklausomai nuo jų veikimo ir paskirties:

  • AOT (Ahead-Of-Time) kompiliatoriai: Jie sukompiliuoja visą kodą prieš jį vykdydami. Pavyzdžiai: GCC, Clang.
  • JIT (Just-In-Time) kompiliatoriai: Vykdymo metu jie sukompiliuoja kodą, kad pagerintų našumą. Pavyzdžiai: JVM, skirta „Java“, V8, skirta „JavaScript“. Norėdami geriau suprasti šį tipą, siūlome mūsų vadovą „Just-In-Time“ kompiliatoriai.
  • Kryžminiai kompiliatoriai: jie generuoja vykdomąjį kodą kitai platformai nei ta, kurią naudoja. Jei susidomėjote, galite paskaityti apie Kryžminiai kompiliatoriai išsamiai.
  • Transpileriai: jie konvertuoja kodą iš vienos aukšto lygio kalbos į kitą, pvz., „TypeScript“ į „JavaScript“.

Sukompiliuotas kodas prieš interpretuotą kodą

Vienas iš pagrindinių programos vykdymo skirtumų yra tai, ar kodas yra kompiliuojamas , ar interpretuojamas :

  • Sukompiliuotas kodas: Jis yra visiškai išverstas prieš paleidžiant ir paprastai yra greitesnis. Pavyzdys: C, C++.
  • Interpretuojamas kodas: verčiama eilutė po eilutės vykdymo metu, palengvinant perkeliamumą, bet sumažinant našumą. Pavyzdys: Python, JavaScript.

Praktinis kompiliavimo pavyzdys

Tarkime, kad rašote programą C:

#įtraukti int main() { printf("Sveikas, pasauli!\n"); grąžinti 0; }

Norėdami sukompiliuoti šį kodą su GCC terminale, paleiskite:

gcc programa.c -o programa

Visame straipsnyje mes nuodugniai ištyrėme kompiliavimo procesą, nuo jo apibrėžimo iki svarbos kuriant programinę įrangą. Nors interpretuojamos kalbos siūlo lankstumą, kompiliuotos kalbos išsiskiria savo efektyvumu. Norint tobulinti mūsų, kaip programuotojų, įgūdžius, labai svarbu suprasti, kaip veikia kompiliatorius ir proceso etapai.

Įvadas į C kalbą
Susijęs straipsnis:
C kalbos įvadas – galutinis vadovas