Ca și în articolul precedent al acestei serii, vreau să atrag atenția asupra principiilor cheie ale programării, care afectează tot ceea ce facem, dar ne sunt rareori confruntate în mod direct și, prin urmare, nu le înțeleg pe deplin. Tema articolului de astăzi - compilate și interpretate de limbi.
Ca dezvoltatori, suntem adesea confruntă cu concepte, cum ar fi compilator și interpretul, dar eu cred că mulți nu înțeleg ce înseamnă acestea. Între timp, compilare și interpretare - este fundamentul tuturor limbaje de programare. Să aruncăm o privire la modul în care a aranjat de fapt, aceste concepte.
intrare
Ne bazăm pe instrumente, cum ar fi elaborarea și interpretarea, pentru a converti codul nostru într-o formă care un computer înțelege. Codul poate fi executat în sistemul nativ de operare după conversie la nativ (prin compilare) sau linie executate de către un alt program care face acest lucru în loc de sistem de operare (interpret).
limbaj compilat - este o limbă pe care programul a fost compilat, conține instrucțiuni ale mașinii țintă; Acest cod mașină nu este clar oamenilor. Interpretat aceeași limbă - este una în care instrucțiunile nu sunt executate de către mașina țintă, și a citit și executat de către un alt program (care este de obicei scrisă în limba mașinii țintă). La momentul compilării, iar în interpretarea are argumente pro și contra, și aceasta este ceea ce vom discuta.
Înainte de a continua, este de remarcat faptul că multe limbaje de programare au atât compilate și versiunea interpretată, astfel încât este dificil să le clasifica. Cu toate acestea, pentru a nu complica în viitor, voi fi de partajare compilate și interpretate de limbi.
limbi compilate
Principalul avantaj al unui limbaj compilat - este viteza de execuție. Deoarece acestea sunt convertite în cod nativ, care lucrează mult mai rapid și mai eficient decât interpretat, mai ales atunci când ia în considerare complexitatea revendicărilor de un limbaj de scripting moderne interpretat.
Limbile de nivel scăzut sunt, de obicei compilate, deoarece eficiența este de obicei plasat deasupra cross-platform. În plus, limbile compilate dau dezvoltator mult mai multă flexibilitate în ceea ce privește hardware-ul de control, cum ar fi memoria și CPU managementul de utilizare. Exemple sunt compilate limbajul C. C ++. Erlang, Haskell și mai multe limbi moderne, cum ar fi Rust and Go.
Probleme de limbi compilate, în general, sunt evidente. Pentru a rula programul, scris într-un limbaj compilat, acesta trebuie mai întâi să fie compilate. Nu este doar un pas in plus, dar complicatie semnificativa a depanare, deoarece pentru a testa orice modificări în program trebuie să fie compilate din nou. În plus, limbile compilate sunt dependente de platforma, deoarece codul mașinii depinde de masina pe care programul este compilat și executat.
limbi interpretate
Spre deosebire de limbajele compilate, nu interpretate nevoie de un cod mașină pentru executarea programului; In schimb, programul va efectua o linie de interpreți. Anterior, procesul de interpretare a luat foarte mult timp, dar odată cu apariția de tehnologii, cum ar fi JIT-compilare. decalajul dintre limbajele compilate și interpretate este în scădere. Exemple de limbaje interpretate sunt PHP. Perl. Ruby și Python. Iată câteva dintre conceptele care au devenit mai ușor datorită unui limbaj interpretat:
Principalul dezavantaj al unui limbaj interpretat este viteza lor scăzută de execuție. Cu toate acestea, JIT-compilare vă permite să accelereze procesul din cauza traducerii secvențelor utilizate în mod obișnuit de instrucțiuni în cod mașină.
Bonus: bytecode-limbi
Bytecode-language - acestea sunt limbile care sunt utilizate pentru a executa cod ca elaborarea și interpretarea. Cadrul Java și .NET - este un exemplu tipic, limbi bytecode. De fapt, Java Virtual Machine (JVM) - este atât de popular mașină virtuală pentru a interpreta bytecode că folosește punerea în aplicare a mai multor limbi. Apropo, recent a devenit cunoscut. că, în noua versiune de Java va fi, de asemenea, sprijinite și compilare statice.
Limba-bytecode vine prima compilare a limbii bytecode programului chelovekochitaemogo. Bytecode - un set de instrucțiuni destinate pentru executarea eficientă a interpretului și constă dintr-un compact numerice coduri, constante și referințele la memorie. De atunci bytecode este trecut la mașina virtuală, care interpretează apoi codul precum și un interpret convențional.
Când compilați codul pentru a bytecode este o întârziere, dar viteza de execuție este în continuare mult crescută datorită optimizării bytecode. În plus, bytecode-limbi sunt independente de platformă, depășind astfel interpretată pentru viteză. Acestea sunt, de asemenea, disponibile la JIT-compilării.
concluzie
Multe limbi astăzi au atât compilate și interpretate de punere în aplicare, reducând diferența dintre ele nu este. Fiecare tip de execuție cod are avantaje și dezavantaje.
Pe scurt, limbajele compilate sunt cele mai eficiente, deoarece acestea sunt executate ca un cod nativ și să permită utilizarea hardware-ului sistemului. Cu toate acestea, acest lucru introduce restricții suplimentare cu privire la scrierea de cod și făcându-l o platformă dependentă. limbi Interpretat nu sunt dependente de platformă și să permită utilizarea unor astfel de tehnici de programare dinamică metaprogramarea. Cu toate acestea, în viteza de execuție sunt semnificativ inferioare limbajele compilate.
limbi bytecode, la rândul său, încercați să utilizați punctele forte ale ambelor tipuri de limbi, iar ei au destul de bine.