Computerele digitale nu înțeleg limbajele pe care le vorbesc oamenii. În schimb, ele folosesc un limbaj binar numit cod mașină sau limbaj de mașină. codul mașină constă într-o secvență de instrucțiuni simple de calculator, fiecare instrucțiune fiind exprimată sub forma unui șir de cifre binare sau de biți (adică 1 și 0). În mod normal, diferite calculatoare „vorbesc” sau „înțeleg” diferite limbaje de mașină. De exemplu, un calculator poate reprezenta operația ADD ca 10011111, în timp ce un altul poate reprezenta aceleași operații ca 000110. Nu numai că modelele de biți sunt de obicei diferite de la un tip de calculator la altul, dar chiar și numărul de biți folosiți pentru a reprezenta o operație poate fi diferit.

În plus, atunci când un program rulează, sistemul de operare (de exemplu, Windows, Linux, OS X etc.) acționează ca un mediu gazdă care oferă servicii programului.Aceste servicii includ suportul esențial, cum ar fi accesul la tastatură, ecran și hard disk-uri. Din păcate, modul în care programul accesează aceste servicii este de asemenea diferit de la un sistem de operare la altul. Ca urmare a diferențelor dintre limbajele de mașină și cerințele sistemului de operare, programele scrise în limbaj de mașină se concentrează mai mult pe sistemul care rulează programul decât pe modul în care programul rezolvă o problemă. În plus, aceasta înseamnă, de asemenea, că nu este posibilă mutarea codului mașină între diferite calculatoare fără a furniza un fel de serviciu de traducere – de obicei sub forma unei mașini virtuale.

Scrierea programelor în limbaj mașină este lentă, plictisitoare și predispusă la erori. Soluția a fost dezvoltarea unor limbaje de programare de nivel superior care să se concentreze mai mult asupra problemei și mai puțin asupra sistemului (hardware și sistem de operare) care rulează programul (a se vedea figura 2). Dar, de obicei, computerele nu execută programe scrise în limbaje de nivel înalt, așa că trebuie să existe o modalitate de a traduce un program scris într-un limbaj de nivel înalt în limbaj de mașină. Două tipuri de programe de calculator realizează traducerea necesară: compilatoare și interpretoare.

Un compilator este un program care traduce alte programe scrise într-un limbaj de programare de nivel înalt, cum ar fi C sau C++, în cod mașină sau limbaj de mașină.Alte limbaje, cum ar fi Java și C#, urmează o cale diferită: Programele scrise în aceste limbaje sunt compilate într-o reprezentare intermediară (o reprezentare care se află undeva între limbajul de nivel înalt și limbajul mașină) care este adesea numită cod mașină virtual. Codul mașinii virtuale devine apoi o intrare pentru un alt program numit interpretor sau mașină virtuală (VM, un program care simulează un procesor hardware). Unele limbaje, cum ar fi Javascript și Perl, sunt complet interpretate, adică nu sunt compilate, ci sunt interpretate direct.

O ilustrație care arată un compilator citind un fișier de cod sursă C++, traducând codul C++ în cod mașină și scriind codul mașină într-un fișier executabil.
Traducerea sau conversia unui program scris într-un limbaj compilat în cod mașină. Compilatorul citește codul sursă C++ dintr-un fișier care se termină cu .cpp și produce un fișier de cod mașină care esteexecutabil. Pe computerele Windows, fișierele executabile produse de compilatorul C++ se termină cu .exe; alte sisteme de operare urmează convenții de denumire diferite. Sistemele de operare sunt capabile să ruleze fișiere executabile fără prelucrări ulterioare.
O ilustrație a unui compilator care citește un fișier de cod sursă Java și traduce codul Java în cod mașină virtuală, care este salvat într-un nou fișier. Mașina virtuală, un alt program, citește codul mașinii virtuale din noul fișier și îl interpretează pentru a efectua operațiile specificate de codul mașinii virtuale.
Compilarea și rularea unui program scris într-un limbaj care produce cod de mașină virtuală. Limbaje precum Java și C# sunt mai întâi compilate în cod de mașină virtuală, adică într-un cod de mașină pentru un calculator virtual – un calculator care nu există în realitate. După ce codul sursă este compilat, un program numit mașină virtuală (VM) execută codul simulând acțiunile unui calculator real. Sistemul de operare rulează VM.
Imaginea ilustrează un fișier de cod sursă Javascript care este citit și procesat de un interpretor.
Executarea unui program scris într-un limbaj pur interpretat. Limbaje precum Javascript și Perl nu sunt compilate deloc. Un program numit interpretor citește fișierul de cod sursă, instrucțiune cu instrucțiune și execută sau interpretează fiecare instrucțiune pe măsură ce este citită, fără să o traducă în alt limbaj. Interpretul Javascript este încorporat în majoritatea browserelor web, pe care le rulează sistemul de operare. Pentru alte limbaje interpretate, sistemul de operare rulează interpretorul ca program de aplicație.

Care abordare a rulării unui program scris într-un limbaj de programare de nivel înalt are avantaje și dezavantaje. Programele scrise în limbaje complet compilate (de exemplu, C și C++) se execută mai repede decât programele scrise în limbaje parțial compilate (de exemplu, Java și C#) și se execută mult mai repede decât programele scrise în limbaje complet interpretate (de exemplu, Javascript și Perl). Pentru a ne face o idee despre diferența de performanță, să spunem că un program C++, odată compilat, se execută în timp 1.0. Un program echivalent scris într-un limbaj care este compilat și apoi interpretat se va executa, în general, în timp de 3 până la 10. Același program executat într-un limbaj pur interpretat se va executa într-un timp de aproximativ 100. Implementările contemporane ale VM-urilor Java și C# utilizează un interpretor just in time (JIT) care compilează o parte din codul virtual în cod mașină în timp ce îl procesează. Procesoarele JIT reduc timpul de execuție la aproximativ 1,5 ori mai mare decât cel al sistemelor cu limbaj pur compilat. Limbajul de programare Python este puțin diferit: partea principală a unui program Python este interpretată, dar este relativ mică și, prin urmare, are un impact minim asupra timpului total de execuție. Majoritatea bibliotecilor Python, în care programul își petrece cea mai mare parte a timpului, sunt scrise în C, astfel încât programele Python rulează aproape la fel de repede ca un program echivalent în C.

Pe de altă parte, programele executabile produse de un compilator pur nu pot fi transferate între platforme diferite (de exemplu, nu puteți rula un program Windows pe un calculator Apple), în timp ce programele scrise în limbaje interpretate sunt mai ușor de mutat între diferite calculatoare. Această portabilitate se realizează prin furnizarea unei VM sau a unui interpretor pentru fiecare platformă (combinație de hardware și sistem de operare). Interpretările și VM-urile sunt programe scrise în limbaje pur compilate, deci nu sunt portabile, dar programele pe care le procesează sunt.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.