Noțiuni despre Java: Diferență între versiuni

De la WikiLabs
(Compilare vs. Interpretare)
(Interpretarea)
Linia 16: Linia 16:
  
 
<syntaxhighlight lang="Javascript">
 
<syntaxhighlight lang="Javascript">
    eval("x=10;y=20;document.write(x*y)");
+
eval("x=10;y=20;document.write(x*y)");
    document.write("<br />" + eval("2+2"));
+
document.write("<br />" + eval("2+2"));
    document.write("<br />" + eval(x+17));
+
document.write("<br />" + eval(x+17));
 
</syntaxhighlight>
 
</syntaxhighlight>
  

Versiunea de la data 17 iulie 2012 07:25

Java este un limbaj de programare dezvoltat de fosta companie Sun Microsystems (actual Oracle) și lansat în anul 1995. Bazându-se pe acest limbaj și pe ideea de mașină virtuală, în momentul actual au apărut nenumărate tehnologii pentru aplicații web și distribuite [1].

Compilare vs. Interpretare

Înainte de a prezenta mecanismul de mașină virtuală, trebuie să facem o scurtă descriere a metodelor de execuție a programelor pentru diferite limbaje de programare.

Procesorul unui calculator (sau a unei mașini de calcul în general) poate executa un număr fix de instrucțiuni cunoscute procesorului, numit set de instrucțiuni. Un program poate fi scris folosind direct aceste instrucțiuni (mnemonicile lor), adică în limbaj de asamblare, sau într-un limbaj de nivel înalt. Există avantaje și dezavantaje pentru ambele variante.

Un program scris în limbaj de asamblare nu este deloc portabil, deci nu poate fi executat decât pe mașina pentru care a fost scris, adică depinde de setul de instrucțiuni pe care procesorul știe să îl execute, de sistemul de operare care rulează pe mașină, de perifericele prezente, etc. Alt dezavantaj este că pentru o funcționalitate relativ simplă a programului, trebuie scrisă o cantitate mult mai mare de cod decât într-un limbaj de nivel înalt (cum ar fi C sau Java), lucru care face ca mentenanța codului, ca și posibilitățile de dezvoltare să fie mult limitate. Pe de altă parte, un programator cu experiență poate face cele mai bune optimizări în limbaj de asamblare, el având control absolut asupra tuturor resurselor disponibile.

Totuși, pentru aplicații foarte complexe, este necesar un compromis între performanță și dimensiunea/ complexitatea codului. Astfel au apărut limbaje formale, de nivel înalt, care sunt mult mai intuitive, mai ușor de învățat și de înțeles, și care abstractizează o mare parte din straturile de nivel jos ale unei mașini de calcul (setul de instrucțiuni, harta memoriei, structura stivei de execuție, alocarea memoriei, etc.). Avantajele sunt uriașe, începând cu simplitatea sintactică și semantică a unui program și terminând cu faptul că apare acum un anumit grad de portabilitate. Această portabilitate apare datorită faptului că limbajul în sine este unic și un algoritm este descris în același fel pentru orice mașină, dar astfel apare și problema: din moment ce un procesor nu știe să execute decât setul lui de instrucțiuni, cum se face tranziția de la un program scris într-un limbaj de nivel înalt generic, la limbajul de asamblare? Există două soluții: interpretarea și compilarea.

Interpretarea

Interpretarea unui program se face folosind un alt program, numit interpretor. Acesta parsează codul sursă al programului pe care doriți să-l executați și îl transformă în timpul rulării în cod mașină. Avantajul acestui sistem este că există posibilitatea generării de program dinamic, la runtime, adică la momentul rulării acestuia. Un exemplu de limbaj interpretat este Javascript. Acesta acceptă construcții de forma:

eval("x=10;y=20;document.write(x*y)");
document.write("<br />" + eval("2+2"));
document.write("<br />" + eval(x+17));

Se vede faptul că funcția eval ia ca argument un șir de caractere care este construit dinamic, și apoi evaluat ca o expresie a limbajului. Acest lucru nu este posibil în cazul programelor compilate. Dezavantajul major al programelor interpretate este viteza redusă de execuție (în timpul rulării se face translația de la limbajul de nivel înalt la codul mașină).

Compilarea