Da, da. Aceasta este o altă întrebare despre diferența dintre compilator și interpret. Numai răspunsurile care mi se dau de obicei nu satisfac.
De obicei, ei spun că compilatorul traduce codul pe un anumit tip de kernel în executabil și, chiar și atunci când este executat, codul este imediat executat direct de către procesor. În cazul interpretului, în timpul executării programului, un interpret de program special citește codul sursă al liniei de program și execuie-l. Pas cu pas. Se spune că nu este atât de ușor să scriem compilatoare.
De fapt, întrebarea este asta. În cazul în care, ca urmare a programului se execută, ceea ce, de fapt, diferența este efectuată o dată codul mașinii, sau primul interpret este de a face ceva cu codul sursă, și apoi mai târziu executa - în cele din urmă, procesorul efectuează aceleași instrucțiuni mașină. Ce diferență atunci? Evident, nu în faptul că compilatorul stochează codul mașină într-un fișier în avans, și interpretetor nu) Ei bine, să spunem că înțeleg că programul interpret, dacă-i o parte poate niciodată să nu fi executat, și, prin urmare, nu traduse în cod mașină . Dar, apoi, din nou, probabil, nu problema că este dificil să se traducă toate în cazul în care-s în codul de calculator în avans, care este de a compila codul.
Pe scurt, care sunt diferențele și complicațiile implementării compilatorului, spre deosebire de interpret?
Interpretul nu generează codul mașinii. În schimb, solicită pentru fiecare comandă interpretată o funcție specială (care face parte din codul interpretului), care face toată munca.
Compilatorul (atât de obicei, cât și de JIT) generează mai întâi codul mașinii, care este apoi alimentat de procesor pentru execuția imediată.
Compilatorul efectuează o singură lucrare o singură dată (când construiește programul), iar interpretul face acest lucru de fiecare dată când citiți următoarea instrucțiune. Adică, atunci când compilarea timpului de execuție este mai mică, și, prin urmare, cu cât este mai mare viteza codului final.
Acum, despre complexitatea implementării compilatorului. Interpretul ia pur și simplu execută următoarea expresie a programului; și cum să efectueze - apoi uita despre el (desigur, după stocarea rezultatului). Compilatorul este forțat să se gândească mai mult la nivel global: există optimizare și inter-modulul de import / export entități (deoarece programul poate consta din mai multe fișiere de cod sursă). În plus, compilatorul trebuie să adere la anumite standarde și acorduri de interacțiune cu alte instrumente (linker, de exemplu); interpret ca un „lucru în sine“, face toată treaba singur.
"un compilator și un interpret" nu este o întrebare corectă. Lucrurile sunt complet diferite. Compiler - convertește codul sursă într-un executabil (mașină, care va fi executat de către un procesor, sau orice intermediar, care va rula mediul runtime virtual). Interpretul execută, de asemenea, codul sursă. Vedeți diferența. Compilatorul convertește (compilează), iar interpretul execută (interpretează). Poate că ați vrut să puneți întrebarea în mod diferit: care este diferența dintre yap-ul compilat și yap-ul interpretat. Diferența este evidentă: cea de-a doua poate fi executată așa cum este ea și nu sunt necesare alte instrumente pentru aceasta. Ei bine, în general, încerc să rezum: în cele din urmă, da, în cele din urmă, avem o schimbare a stării procesorului cu procesorul fizic real, iar acest lucru reduce performanța de orice program. Dar, de fapt, există diferențe: limbi 1) compilate necesita instrumente speciale (compilatoare), produsul final este parțial protejat și greu pentru a obține codul sursă, produsul final este mai compact. deoarece constă în instrucțiuni binare, și nu din cuvinte înțelese de om. Produsul final rulează mai repede - deoarece descrie instrucțiunile care sunt suportate direct de platforma țintă. 2) limba interpretată este executată așa cum este ea - nu necesită mai mult. instrumente pentru a aduce la starea finală, nu este protejat - oricine poate fura și schimba. Înțeleg că am scris lucruri evidente. Doar că nu înțeleg că vrei să auzi altceva.
Dacă este vorba despre complexitate, compilatorul și interpretul pot fi la fel de complexe în scris. Dacă limbajul este complex, atunci în orice caz va fi dificil să se analizeze lexemele, indiferent de scopul pentru executare sau compilare. Ei bine, doar în momentul în care, înainte de compilator, va fi întotdeauna sarcina de a aduce instrucțiuni unor forme canonice, nefiind inventate de voi