next up previous contents
Next: Insusiri Up: Facultatea de Calculatoare Proiect Previous: Plotter   Cuprins

Limbajul PLINT

Un limbaj este de fapt modelarea prin simboluri a unui sistem sau a unui alt model. Atata timp cat pentru cei care vehiculeaza simbolurile acestea reprezinta aceeasi entitate, ei ``se pot intelege'' in limbajul respectiv. Se stie ca stiinta gramaticii limbajelor de comunicarea dintre oameni este cea care se ocupa cu suprinderea unui manunchi de reguli fixe cu care se pot genera toate frazele posibile. Limbajul este multimea tuturor ``lexemelor'' -- frazelor -- posibile, dar de obicei se pot gasi reguli intr-un numar fix care pe baza unui alfabet sunt suficiente pentru a comprima descrierea in totalitate a unui limbaj.

Asemenea limbajului om-om, limbajul om-calculator sau limbajul de programare este de fapt o pereche alfabet-reguli; de-a lungul istoriei calculatoarelor s-a distins alfabetul ASCII, care cuprinde simbolurile literelor din alfabetul latin, semnele de punctuatie si ortografie, cifrele arabe si alte inca cateva simboluri. Bazat pe acest alfabet, intr-o serie de limbaje de programare aparute s-au distins de asemenea niste reguli mai des folosite, ca rezultat al definirii unor notiuni inerente programarii.
Arhitectura von Neumann bunaoara, defineste un sistem de calcul ca avand:

Nu se specifica nimic despre implementarea concreta a acestor entitati, reprezentand de fapt doar niste repere.
Functionarea unei asemenea masini este urmatoarea:
Unitatea de control citeste instructiuni din memorie (operatori, verbe, actiuni), le decodifica (identifica), mai citeste eventual date din memorie (operanzi, substantive, argumente) si dependent de tipul instructiunii le prelucreaza cu ajutorul UAL sau le transfera prin intermediul IIE. Deci o asemenea masina poate fi vazuta ca un sistem cu intrari si iesiri de date, care prelucreaza sau/si transfera datele dinspre intrare spre iesire, intr-un mod ce-l face sa fie folositor.
Memoria este comuna datelor si instructiunilor, ce reprezinta de fapt o unitate de memorie (byte) depinzand de interpretare.

Se poate spune ca sistemul de calcul incearca sa inteleaga ceea ce i se comunica, folosind ca reguli - instructiunile si ca alfabet - datele. Executia unui program pe o asemenea masina putem spune ca este asemanatoare rolului pe care il are un ascultator in procesul de comunicare cu un vorbitor; un program este de fapt o secventa de limbaj. Comunicarea poate avea ca motivatie pe ea insasi, insa de obicei rolul ei este sa determine actiuni din partea ascultatorului ca urmare a cererii vorbitorului; analog, cererea pe care o asculta un sistem de calcul sunt datele de intrare, iar actiunile sunt datele de iesire.

Limbajul uman fiind mai evoluat decat cel masina, este mult mai complex si redundant totodata; pe de alta parte, limita tehnologica a impus ca limbajul masina sa fie cat mai sintetic, pe deasupra folosind ca simboluri numerele 0 si 1, in baza 2; prin urmare, pentru ``a exprima'' cateva ``cuvinte'' din limbajul uman in limbaj masina, ca de exemplu:

``Rezolva ecuatia de gradul doi cu parametrii urmatori: a egal cu unu, b egal cu doi, c egal cu unu.''
necesita deprinderea de a manipula numere binare si un efort intelectual pentru codificarea in aceste numere a programului (secventa corespunzatoare in limbaj masina):
``10110100110101010101010110111101111010101010100111001011101010010010''
Intelege cineva ce este scris mai sus ?
``B4D555BDEAA9CBA92''
Dar mai sus ? Ba bine ca nu ! Motivul este ca interpretarea lor necesita ca premise existenta unui proces anterior de invatare si experimentare din partea programatorului intr-un limbaj masina oarecare; ori, interactivitatea cu calculatorul poate avea de celalalta parte orice persoana umana.

Mai usor ar fi ca masina de calcula sa inteleaga limbajul uman. De aici apare teoria limbajelor de programare de nivel inalt. Acestea sunt de fapt limbaje hibride, o imperechere intre limbajul uman si masina, pentru a usura efortul intelectual al omului si a ramane in limita tehnologica impusa de compromisul complexitate-rapiditate-pret. Cu cat compromisul devine din ce in ce mai flexibil, cu atat limbajele vor fi din ce in ce mai ``inalte'', tinzand spre vremea cand vom putea vorbi sau chiar gandi impreuna cu calculatorul, direct in limbajul nostru cel mai natural.

Revenind la gramatica unui limbaj de programare, aceasta trebuie sa ofere notiuni corespunzatoare celor patru repere ale unei masini von Neumann. Astfel organizare datelor corespunde notiunii de ``structura de date'' sau ``tip de date'', datele efective organizate care se vehiculeaza corespund ``variabilelor'', modul in care UC se foloseste de UAL in timp pentru a prelucra un set de date corespunde ``algoritmilor''. In mod normal, cursul unui program este liniar. Pentru a fi posibila implementarea oricarui algoritm, mai este nevoie de posibilitatea de a ``sparge'' liniaritatea, prin ``salturi'' spre alte zone de instructiuni; aceste salturi trebuie sa tina cont de valorile instantanee ale datelor, pentru a pastra ``generalitatea'' algoritmilor, fiind nevoie deci si de ``salturi conditionate''. Matematic, un algoritm este de fapt o functie definita pe domeniul datelor de intrare, punandu-le in corespondenta datele de iesire. Intr-un proces formal matematic, functiile au un rol doar calitativ. Din perspectiva informaticii, cantitativ ar fi nevoie de o memorie imensa pentru a definii o functie, alaturand fiecarei valori posibile a datelor de intrare, valoarea corespunzatoare din codomeniul functiei. Algoritmii sunt de fapt forma comprimata/codificata a acestei memorii.

Ideal, beneficiind de o memorie infinita, ar fi posibila suprinderea tuturor functiilor, nemaifiind necesari algoritmii; de fapt, in aceasta ipoteza n-ar mai fi necesar timpul, totul fiind ``inghetat'' in aceasta memorie infinita; in realitate insa, materia se modifica in timp, aceasta modificare putand fi intepretata ca o codificare a unei functii. De exemplu:

Se poate spune ca evolutia in timp a materiei (camp sau substanta) este revelarea entitatilor matematice, acestea fiind adevarata realitate.

Algoritmii complecsi corespund unor functii pentru care analogii ca cele de mai sus sunt mai greu de gasit. Totusi s-a demonstrat ca asigurarea unor premise intr-un sistem de calcul permite executia oricarui algoritm, intr-un timp finit. In cadrul unei masini, o functie (algoritm) este asociata evolutiei unei zone de memorie pe o perioada de timp finita; multimea tuturor bitilor de memorie, pentru fiecare moment discret de timp, intre anumite limite, este de fapt procesul de determinare a iesirii unui algoritm, pe baza datelor de intrare de la inceput; in situatia unei memorii infinite, timpul de determinare ar fi 0.

Anumite parti din aceasta zona de memorie raman nemodificate pe intreaga perioada de calcul, de fiecare data, independent de datele de intrare. Acestea reprezinta zona de program si constante, restul zona de variabile.

Daca in zona de program anumite patternuri se repeta, ele pot fi codificate si stocate o singura data, prin crearea unei conventii de folosire in locul in care se cere: e vorba de notiunea de subrutina, adica blocuri de cod reutilizabile; modalitate de codificare este atribuirea unui ``nume'' unic. Modul in care ele se utilizeaza poate fi unul prescurtat sau unul generalizat. In primul caz este vorba de situatia cand aceste subrutine accepta intotdeauna unul sau doua argumente ca date de intrare, ele fiind denumite ``operatori'' unari, respectiv binari, si sintaxa apelului lor face uz de simbolurile aritmetice plus (+), minus (-) etc. In al doilea caz, sintaxa prevede o modalitate de a descrie argumentele intr-o lista oricat de lunga, asociata cu numele (din litere si cifre) al subrutinei apelate; s-a inradacinat modul de apel cu numele functiei in fata (stanga), urmat de o lista separata prin virgule, incadrata intre paranteze rotunde.

Zona de date poate fi privita ca evolutia unei instante a unei structuri abstracte de date; se stie din matematica ca oricarei multimi numarabile i se poate asocia o functie bijectiva numita functie ``index'', ce pune in corespondenta elemente ale unei multimi index cu cele ale multimii initiale. Pentru programatori, este cunoscuta multimea index a numerelor intregi. O structura de data poate fi ``indexata'' insa si cu stringuri2.1, perechi de numere intregi etc. Limbajul plint foloseste notiunea de structura de date (SD) numarabila ce poate fi indexata prin:



Subsections
next up previous contents
Next: Insusiri Up: Facultatea de Calculatoare Proiect Previous: Plotter   Cuprins
Sebastian Glita 2002-06-19