Există multe moduri de a distinge limbajele de programare. Pentru început, ele se încadrează în diferite paradigme: funcționale, orientate pe obiecte și multe altele.
De asemenea, puteți clasifica un limbaj de programare după metoda sa de traducere, ceva care are un efect major asupra performanței unui limbaj. Limbajele de programare compilate sunt de obicei mai rapide decât cele interpretate. Deci, în situații precum dezvoltarea de jocuri care necesită viteză, dezvoltatorii tind să folosească limbaje compilate.
Ce este traducerea?
Procesul de traducere convertește codul scris de un programator în cod de mașină pe care un computer îl poate executa. Codul mașinii este un tip de limbaj de nivel scăzut, care are unu și zerouri. Deci, ceea ce face traducătorul este să convertească codul de nivel înalt pe care îl creați într-un limbaj de programare în cod de mașină.
Fără traducători, ar trebui să codificați în limbajul mașinii. Fiecare limbaj de programare de nivel înalt pe care îl cunoașteți utilizează una dintre cele trei metode de traducere: un compilator, un interpret sau un hibrid dintre cele două.
Ce este un compilator?
Un compilator este un software care convertește codul sursă scris într-un limbaj de nivel înalt în cod de nivel scăzut pentru execuție.
Diagrama de mai sus reprezintă un compilator în forma sa cea mai de bază. Compilatorul are mai multe faze. Fiecare fază transformă codul dintr-o stare în alta. Scopul fiecărei etape a compilatorului este de a crea o ieșire care este mai ușor de manipulat pentru faza următoare. Structura generală a unui compilator este următoarea:
- Scanner: această fază preia un flux de caractere și le grupează în token-uri care reprezintă identificatori, literali șir și așa mai departe.
- Parser: această fază grupează token-urile pe baza gramaticii limbajului de programare sursă. Acesta creează un arbore de sintaxă abstractă care este o colecție de expresii care alcătuiesc programul.
- Semantică: această fază realizează o analiză semantică asupra arborelui de sintaxă abstractă (AST). Folosește regulile limbajului sursă pentru a adăuga semnificație prin atribuirea de tipuri expresiilor AST și verificarea validității acestora. AST devine apoi o reprezentare intermediară.
- Reprezentare intermediară (IR): această fază convertește codul sursă al programului original în cod mașină. Produce o versiune simplificată a codului de asamblare. IR folosește unul sau mai multe optimizatoare pentru a îmbunătăți codul IR și pentru a colecta informații pentru mașina pe care rulează. Un optimizator poate face un program mai eficient, mai rapid sau chiar mai mic.
- Generator de cod: această fază consumă codul IR optimizat și îl convertește în cod de mașină.
Ce limbaje de programare folosesc compilatoare?
Unele limbaje de programare compilate populare includ:
- C
- C++
- Merge
- Ada
- Fortran
- COBOL
- Lisp
- Obiectiv-C
- Rapid
Un avantaj al utilizării unui limbaj compilat este că identifică erorile în timpul compilării. Acest lucru vă permite să remediați astfel de erori și apoi să încercați din nou să compilați programul. Limbile compilate sunt mai puțin probabil să eșueze odată ce încep execuția. Aceste limbaje nu vor genera nici măcar un program pentru a rula dacă codul sursă are erori de sintaxă. Dar erorile semantice și alte forme de eroare de rulare vor trece peste ele.
Limbile compilate se execută, de asemenea, foarte repede după compilare.
Ce este un interpret?
Un interpret este un program care traduce și execută o singură linie de cod la un moment dat. Acest proces se repetă până când interpretul ajunge la linia finală de cod în programul sau scriptul dat.
După cum puteți vedea din diagrama de mai sus, un interpret are două intrări. În primul rând, este nevoie de întregul cod sursă (program). Apoi citește prima linie a programului (ca intrare), o traduce și o execută. Dacă acea linie se execută corect, se trece la următoarea linie din program sau script.
Spre deosebire de un compilator, un interpret nu traduce un program întreg în cod mașină. În schimb, parsează și analizează o anumită linie de cod înainte de a o executa. Un interpret ar trebui să înceapă să ruleze un program - în special unul mai mare - înainte ca un compilator să-l termine de traducere.
Ce limbaje de programare folosesc interpreți?
Unele limbaje de programare interpretate populare includ:
- Piton
- JavaScript
- Perl
- MATLAB
- DE BAZĂ
Deși un interpret începe să execute codul mai repede, va eșua dacă întâlnește o eroare. În calitate de programator, ar trebui să remediați o astfel de eroare și să reporniți programul. Acest eveniment are loc de fiecare dată când interpretul întâlnește o nouă eroare. Unele erori pot rămâne latente dacă se referă la un set rar de circumstanțe. În astfel de cazuri, testarea este mai importantă ca niciodată.
Interpreții sunt de obicei mai ușor de dezvoltat decât compilatoarele, iar programele lor sunt mai portabile prin design.
Ce este traducerea hibridă?
Traducerea hibridă folosește un compilator și un interpret. Traducerea hibridă compilează codul sursă de nivel înalt într-o formă de nivel inferior, cum ar fi bytecode. Apoi folosește un interpret pentru a rula acel bytecode.
Traducerea hibridă poate diferi de la un limbaj de programare la altul, dar va folosi această structură generală. Unul dintre cele mai populare limbaje de programare care utilizează traducerea hibridă este Java. Compilatorul Java își traduce codul sursă în Cod de octeți Java Virtual Machine (JVM).. Apoi interpretul traduce bytecode JVM în cod mașină.
Ce limbaje de programare folosesc traducerea hibridă?
Unele limbaje de programare hibride populare includ:
- Java
- C#
- Visual Basic
- Erlang
- F#
Cu traducerea hibridă, obțineți tot ce este mai bun din ambele lumi. Compilarea codului mai întâi vă permite să rezolvați erorile cât mai curând posibil. Codul de octet pe care îl creează compilatoarele hibride este mai ușor de interpretat decât un cod sursă de program de nivel înalt.
Valoarea cunoașterii diferitelor metode de traducere
Ar trebui să înțelegeți metoda de traducere specifică pe care o folosește o limbă, mai ales dacă o utilizați pentru un proiect nou. O metodă de traducere a limbajului este o parte majoră a identității unui limbaj de programare. Poate afecta modul în care distribuiți programul și modul în care îl vor rula utilizatorii.
Fiecare abordare a traducerii are propriile sale merite. Limbaje de programare de top precum C++, Python și Java folosesc toate metode de traducere diferite. Alături de paradigma unei limbi, metoda sa de traducere este una dintre cele mai importante trăsături de care ar trebui să fii conștient.
Există mai multe paradigme pe care le poate folosi un limbaj de programare. Majoritatea limbajelor de programare de top sunt limbaje multi-paradigma; ele susțin utilizarea a două sau mai multe paradigme distincte. Trei dintre cele mai populare paradigme sunt programarea imperativă, orientată pe obiecte și funcțională.