Limbajele de programare – design si implementare

Limbajele de programare – design si implementare

0 Shares
0
0
0

Un limbaj de programare este un limbaj formal care cuprinde un set de siruri de caractere ce produc diferite tipuri de iesire de cod masina. Limbajele de programare sunt un fel de limbaj de calculator si sunt folosite in programarea computerelor pentru a implementa algoritmi.

Majoritatea limbajelor de programare constau in instructiuni pentru computere. Exista masini programabile care folosesc un set de instructiuni specifice, mai degraba decat limbaje de programare generale. De la inceputul anilor 1800, programele au fost folosite pentru a directiona comportamentul masinilor, cum ar fi razboaiele jacquard, cutiile muzicale si pianele. Programele pentru aceste masini (cum ar fi pergamentele unui pian) nu au produs un comportament diferit ca raspuns la diferite intrari sau conditii.

Au fost create mii de limbaje de programare diferite si multe sunt create in fiecare an. Multe limbaje de programare sunt scrise intr-o forma imperativa (ca o secventa de operatii de efectuat), in timp ce alte limbaje folosesc forma declarativa (adica se specifica rezultatul dorit, nu cum se obtine acest rezultat).

Descrierea unui limbaj de programare este de obicei impartita in cele doua componente de sintaxa (forma) si semantica (sens). Unele limbi sunt definite printr-un document de specificatii (de exemplu, limbajul de programare C este specificat de un standard ISO), in timp ce alte limbaje (cum ar fi Perl) au o implementare dominanta care este tratata ca referinta. Unele limbaje au ambele caracteristici, limba de baza definita de un standard si extensiile preluate din implementarea dominanta fiind comune.

Teoria limbajului de programare este un subdomeniu al informaticii care se ocupa cu proiectarea, implementarea, analiza, caracterizarea si clasificarea limbajelor de programare.

Definitii

Un limbaj de programare este o notatie pentru scrierea programelor, care sunt specificatii ale unui calcul sau algoritm. Unii autori limiteaza termenul „limbaj de programare” la acele limbaje care pot exprima toti algoritmii posibili.

Functie si tinta

Un limbaj de programare pentru computer este un limbaj folosit pentru a scrie programe de calculator, care implica un computer ce efectueaza un fel de calcul sau un algoritm si, eventual, controleaza dispozitive externe, cum ar fi imprimante, unitati de disc, roboti si asa mai departe. De exemplu, programele PostScript sunt create frecvent de un alt program pentru a controla o imprimanta sau un ecran de computer. Mai general, un limbaj de programare poate descrie calculul pe o anumita masina, eventual abstracta.

Este in general acceptat ca o specificatie completa pentru un limbaj de programare include o descriere, eventual idealizata, a unei masini sau procesor pentru acel limbaj. In majoritatea contextelor practice, un limbaj de programare implica un computer; in consecinta, limbajele de programare sunt de obicei definite si studiate in acest fel.

Limbajele de programare difera de limbajele naturale prin aceea ca limbajele naturale sunt folosite doar pentru interactiunea dintre oameni, in timp ce limbajele de programare le permit oamenilor sa comunice instructiuni catre masini.

Abstractii

Limbajele de programare contin de obicei abstractii pentru definirea si manipularea structurilor de date sau controlul fluxului de executie. Necesitatea practica ca un limbaj de programare sa suporte abstractii adecvate este exprimata de principiul abstractiei. Acest principiu este uneori formulat ca o recomandare catre programator sa foloseasca in mod corespunzator astfel de abstractii.

Puterea expresiva

Teoria calculului clasifica limbajele dupa calculele pe care sunt capabile sa le exprime. Toate limbajele Turing complete, pot implementa acelasi set de algoritmi. ANSI/ISO SQL-92 si Charity sunt exemple de limbaje care nu sunt complete Turing, dar sunt adesea numite limbaje de programare.

Limbajele de marcare precum XML, HTML sau troff, care definesc datele structurate, nu sunt de obicei considerate limbaje de programare. Cu toate acestea, limbajele de programare pot impartasi sintaxa cu limbaje de marcare daca este definita o semantica de calcul. XSLT, de exemplu, este un limbaj complet Turing care utilizeaza in intregime sintaxa XML. Mai mult decat atat, LaTeX, care este folosit mai ales pentru structurarea documentelor, contine si un subset complet Turing.

Termenul limbaj de calculator este uneori folosit interschimbabil cu limbajul de programare. Cu toate acestea, utilizarea ambilor termeni variaza intre autori, inclusiv domeniul de aplicare exact al fiecaruia. O utilizare descrie limbajele de programare ca un subset de limbaje de calculator.

In mod similar, limbajele utilizate in calcul care au un scop diferit de exprimarea programelor de calculator sunt limbaje de calculator desemnate generic. De exemplu, limbajele de marcare sunt uneori denumite limbaje informatice pentru a sublinia faptul ca nu sunt menite sa fie folosite pentru programare.

O alta utilizare priveste limbajele de programare ca si constructe teoretice pentru programarea masinilor abstracte si limbajele computerizate ca subsetul acestora care ruleaza pe computere fizice, care au resurse hardware finite. John C. Reynolds subliniaza ca limbajele de specificatii formale sunt la fel de mult limbaje de programare ca si limbajele destinate executiei.

El sustine, de asemenea, ca formatele de intrare textuale si chiar grafice, care afecteaza comportamentul unui computer sunt limbaje de programare, in ciuda faptului ca de obicei nu sunt complete Turing, si remarca faptul ca ignorarea conceptelor limbajului de programare este motivul multor defecte in formatele de intrare.

developing-programmer-development-website-design-coding-technologies

Design si implementare

Limbajele de programare impartasesc proprietati cu limbajele naturale legate de scopul lor ca vehicule pentru comunicare, avand o forma sintactica separata de semantica si aratand familii de limbaje ale limbilor inrudite ramificate una de alta. Dar, ca si constructe artificiale, ele difera in moduri fundamentale de limbajele care au evoluat prin utilizare.

O diferenta semnificativa este ca un limbaj de programare poate fi descris pe deplin si studiat in intregime, deoarece are o definitie precisa si finita. In schimb, limbajele naturale au semnificatii in schimbare date de utilizatorii lor in diferite comunitati. In timp ce limbajele construite sunt, de asemenea, limbaje artificiale concepute de la zero cu un scop specific, le lipseste definitia semantica precisa si completa pe care o are un limbaj de programare.

Multe limbaje de programare au fost proiectate de la zero, modificate pentru a satisface noile nevoi si pentru a fi combinate cu alte limbaje. Desi au existat incercari de a proiecta un limbaj de programare „universal” care sa serveasca tuturor scopurilor, acestea nu au reusit sa fie acceptate in general ca indeplinind acest rol. Necesitatea unor limbaje de programare diverse apare din diversitatea contextelor in care sunt folosite limbajele:

  • Programele variaza de la scripturi minuscule scrise de pasionati individuali la sisteme uriase scrise de sute de programatori.
  • Programatorii variaza in expertiza, de la incepatori care au nevoie de simplitate mai presus de orice, pana la experti care se pot simti confortabil cu o complexitate considerabila.
  • Programele trebuie sa echilibreze viteza, dimensiunea si simplitatea pe sisteme, de la microcontrolere la supercomputere.
  • Programele pot fi scrise o singura data si nu se pot schimba din generatii in generatie sau pot suferi modificari continue.
  • Programatorii pot diferi pur si simplu in ceea ce priveste gusturile lor: pot fi obisnuiti sa discute probleme si sa le exprime intr-o anumita limba.

O tendinta comuna in dezvoltarea limbajelor de programare a fost de a adauga mai multa capacitate de a rezolva probleme folosind un nivel mai ridicat de abstractizare. Cele mai vechi limbaje de programare au fost foarte strans legate de hardware-ul de baza al computerului.

Pe masura ce s-au dezvoltat noi limbaje de programare, au fost adaugate caracteristici care le permit programatorilor sa exprime idei care sunt mai indepartate de simpla traducere in instructiuni hardware subiacente. Deoarece programatorii sunt mai putin legati de complexitatea computerului, programele lor pot face mai multe calcule cu mai putin efort din partea programatorului. Acest lucru le permite sa scrie mai multe functionalitati per unitatea de timp.

Programarea in limbaj natural a fost propusa ca o modalitate de a elimina necesitatea unui limbaj specializat pentru programare. Cu toate acestea, acest obiectiv ramane indepartat si beneficiile sale sunt deschise dezbaterii.

Edsger W. Dijkstra a sustinut ideea ca utilizarea unui limbaj formal este esentiala pentru a preveni introducerea de constructe lipsite de sens si a respins programarea in limbaj natural ca fiind „prostie”. In mod similar, Alan Perlis a respins aceasta idee. Abordari hibride au fost adoptate in engleza structurata si SQL.

Designerii si utilizatorii unui limbaj trebuie sa construiasca o serie de artefacte care guverneaza si permit practicarea programarii. Cele mai importante dintre aceste artefacte sunt specificarea si implementarea limbajului.

Specificatie

Specificatia unui limbaj de programare este un artefact pe care utilizatorii de limbaj si implementatorii il pot folosi pentru a conveni daca o bucata de cod sursa este un program valid in limbajul respectiv si, daca da, care va fi comportamentul acestuia.

O specificatie a limbajului de programare poate lua mai multe forme, inclusiv urmatoarele:

  • O definitie explicita a sintaxei, a semanticii statice si a semanticii de executie a limbajului. In timp ce sintaxa este de obicei specificata folosind o gramatica formala, definitiile semantice pot fi scrise in limbaj natural (de exemplu, ca in limbajul C) sau o semantica formala (de exemplu, ca in specificatiile Standard ML si Scheme).
  • O descriere a comportamentului unui traducator pentru limba (de exemplu, specificatiile C++ si Fortran). Sintaxa si semantica limbajului trebuie deduse din aceasta descriere, care poate fi scrisa intr-un limbaj natural sau formal.
  • O eferinta sau o implementare a modelului, uneori scrisa in limba specificata (de exemplu, Prolog sau ANSI REXX). Sintaxa si semantica limbajului sunt explicite in comportamentul implementarii de referinta.

Implementarea

O implementare a unui limbaj de programare ofera o modalitate de a scrie programe in limbajul respectiv si de a le executa pe una sau mai multe configuratii de hardware si software. Exista, in linii mari, doua abordari ale implementarii limbajului de programare: compilare si interpretare. In general, este posibil sa se implementeze un limbaj folosind oricare dintre tehnici.

Iesirea unui compilator poate fi executata de hardware sau de un program numit “interpret”. In unele implementari care folosesc abordarea interpretului, nu exista o limita distincta intre compilare si interpretare. De exemplu, unele implementari ale BASIC compileaza si apoi executa sursa pe rand.

Programele care sunt executate direct pe hardware ruleaza de obicei mult mai rapid decat cele care sunt interpretate in software.

O tehnica de imbunatatire a performantei programelor interpretate este compilarea just-in-time. Aici masina virtuala, chiar inainte de executie, traduce blocurile de bytecode care vor fi folosite in codul masinii, pentru executie directa pe hardware.

0 Shares
You May Also Like