Showing posts with label compilatoare. Show all posts
Showing posts with label compilatoare. Show all posts

Wednesday, November 1, 2017

Tehnici de compilare

Tehnici de compilare sunt unele dintre cele mai frumoase lucruri din informatică din mai multe cauze dintre care enumăr:
- au teorie cât cuprinde;
- produsele cunt concrete;
- totul se verifică practic;
- generează evoluția;
- implementează mecanisme;
- dau expresie generalizărilor.
Despre compilatoare s-au scris tomuri întregi fie de teoreticieni, fie de practicieni, fie de teoreticieni care au stat în echipele de practicieni și au văzut cum pornind de la teorie se construiesc efectiv compilatoare. Mă laud că în vara anului 1970 am susștinut lucrarea de stat, cum este cea de licență acum intitulată Rutine interpretative și rutine compilative, sub îndrumarea marelui profesor de la Universitatea București, Dragoș VAIDA. După cei cinci ani de studenție  am devenit absolvent cu diplomă al Secției de Mecanizarea și Automatizarea Calculului Economic din facultatea de Calcul Economic și Cibernetică Economică.
Am urmărit cu deosebit interes literatura din zona compilatoarelor și când în 1988 lipsit de speranță am dus la topit documentația de vreo 300 kg, cel puțin 70% erau cărți fotocopiate și articole primite din străinătate pe probleme de compilatoare. Ca să văd cum stau lucrurile practic, prin 1973 am intrat în posesia unei documentații complete și cu scheme logice pentru un compilator de FORTRAN de la profesorul Csaba FABIAN și am mers la ITC București cu aprobări speciale am avut acces la documentația de bază a compilatorului COBOL inclusiv la nivel de scheme logice și diagrame, pe care le-am studiat câteva săptămâni în toate detaliile lor, deși dosarele m-au descurajat la început prin dimensiuni și prin numărul lor prea mare, mult prea mare. Torul se petrecea prin 1978, după ce citisem cartea lui Alfred V. AHO șiJeffrey D. ULLMAN intitulată Principles of Compiler Design, apărută în editura Addison-Wesley Publ. în anul 1977, destul de mare având 604 pagini și pe care am xeroxat-o pe la o centrală industrială unde aveam o intrare, cu un preț deloc neglijabil.
Am avut cărțile:
D. VAIDA - Limbaje formale și tehnici de compilare, Editura Universității, București, 1976,
D. VAIDA - Algoritmi de compilare, Editura Didactica si Pedagogica, București,  1971 ,
D. L. ȘERBĂNAȚI - Limbaje de programare si compilatoare, Editura Academiei RSR, București, 1987,
Dan SIMOVICI - Limbaje formale si tehnici de compilare, Editura Didactica si pedagogica, Bucuresti, 1978.
Mi-ar fi plăcut să știu că cei ce scriau cărți despre compilatoare fuseseră în echipe pe la mari companii care scriau compilatoare și nu doar adaptau sau doar traduceau mesaje, implementând limbaje noi de programare care deveniseră de succes între timp.
Ceva mai târziu am achiziționat cărți de construirea compilatoarelor însoțite de câte un CD unde se aflau compilatoare ce implementau subseturi ale unor limbaje de programare în vogă. Pe mine mă interesau lucruri foarte precise precum:
- implementarea recursivității;
- generalizare ciclurilor imbricate;
- asigurarea conversiitor de tip;
- transmiterea de parametri;
- operarea cu expresiile de pointeri;
- evalări de expresii complexe.
Cursurile despre compilatoare au în general o structură clasică și se referă la:
- gramatici;
- limbaje formale;
- descrieri;
- etape de compilare;
- compiarea de expresii aritmetice;
- alocarea de resurse;
- generarea de cod;
- secvențe de cod scrise în C++;
- evaluări de performanțe.
Concluzia la care am ajuns este că teoria e una, practica este alta și din start trebuie spus că ori se face un compilator ca lumea, ori nu se face nimic, pentru că atât timp cât în târg există compilatoare DOXA pentru limbajele C++, Java sau Pascal, este ridicol să se vină în 2017 să se propună un compilator pentru uz curent care implementează 20% dintr0un limbaj, numai pentru că este realizat în spațiul nostru cel mioritic, iar emfaza să fie elementul ce-i caracterizează pe cei care-l oferă. Cred că fără o echipă de cel puțin 50 de programatori de top nu ai cum să demarezi scrierea unui compilator adevărat, pentru un limbaj de programare adevărat, în cadrul unui proiect adevărat pe o perioadă de 2 - 3 ani cel puțin dacă se pornește nu chiar de la zero, iar managerul are în spate câțiva ani prin America la un mare constructor de compilatoare, pe care nu-l numesc să nu-i fac reclamă, vorba ălora penibili de la tv.
Tehnicile de compilare sunt un miracol care trebuie studiat și aprofundat cu evlavie, respect și credința că totul este posibil, real și aici lângă noi cei care ne dăm programatori.







(01 noiembrie 2017)

Friday, October 27, 2017

Bazele informaticii

La foarte multe facultăți se predau cursuri de inițiere în informatică, uitând lumea că acum în anul 2017 nu mai este ca acum 30 de ani când accesul la calculator era o problemă chiar și pentru programatorii cu experiență. Acum lumea se duelează între puterea laptopurilor sau capacitatea discurilor sau uneori în plăcile grafice.
M-am uitat și eu pe niște parograme analitice adică niște curricula cum se zice acum de când am intrat în UE și nu m-a cuprins entuziasmul câtuși de puțin, fiind impresionat neplăcut de descriptivismul oarecum deșănțat care bântuie acele abordări. Pe vremuri prin bazele informaticii se înțelegea prezentarea:
- calculatorului;
- resurselor calculatorului;
- sistemului de operare;
- compilarea;
- editarea de legături;
- limbajelor de programare;
- sistemelor informatice;
- elementelor de birotică;
- folosirii rezultatelor.
Acum când tot copilul are o tabletă și unii știu niște chestii cu mult mai detaliate decât utilizatorii maturi de calculatoare, este de-a dreptul vulgar să se mai înceapă cu chestiile de acum 30 de ani sau măcar pe structura de atunci. Acum trebuie să se intre:
- abrupt,
- direct,
- concret,
- detaliat,
- practic,
- diversificat,
pornind de la problemele existente și profesorii să se adapteze exact la ceea ce știu deja studenții lor, căci informatică se face începând cu clasa a VIII-a.
Trebuie pornit de la ce vrea facultatea de la student și pentru a atinge respectivul obiectiv, profesorul adaptează totul, fiind cu mult mai practic și mai  interesant ca să capteze și nu să plictisească. Bazele informaticii trebuie să aibă rol de sistematizare și mai puțin de învățare ca acum 30 de ani, pentru că studentul începător nu este deloc începător în ale informaticii, ci știe lucruri care trebuie numai ierarhizate în vederea creșterii eficienței în a utiliza a computerul pentru a-și face meseria cât mai bine.



(27 octombrie 2017)

Thursday, October 12, 2017

Cărți de informatică teoretică

Cărțile de informatică teoretică au apărut încă din zorii informaticii de la noi, pentru că cei care au înțeles noutatea domeniului au dezvoltat deja abordări în planul cercetării științifice operând cu noțiuni abstracte, nefiind legați de dotarea cu tehnică de calcul în concordanță cu exigențele lor și cu nivelul de generalitate pe care l-au abordat.
Cărțile despre gramatici generative, despre limbaje formale, despre compilatoare, despre automate finite și despre teoria informației au apărut în editurile românești cu autori români și s-au bucurat de mare succes.
  • I. CREANGĂ, C. REISCHER, D. SIMOVICI - Introducere algebrică în informatică. Teoria automatelor, Editura Junimea, Iași, 1973, 287 pg.
  • I. CREANGA, C. REISCHER, D. SIMOVICI - Introducere algebrica in informatica. Limbaje formale, Editura Junimea, Iasi, 1974, 195pg.
  • Dan SIMOVICI - Limbaje formale si tehnici de compilare, Editura Didactica si pedagogica, Bucuresti, 1978, 245 pg.
  • S. MARCUS - Gramatici și automate finite, Editura Academiei RPR, București, 1964.
  • D. VAIDA - Limbaje formale și tehnici de compilare, Editura Universității, București, 1976.
  • D. VAIDA - Algoritmi de compilare, Editura Didactica si Pedagogica, București,  1971
  • T. BALANESCU - Corectitudinea programelor, Editura tehnică, București, 1995.
  • M. FRENȚIU - Verificarea corectitudinii programelor, Editura Universitară Petru-Maior, 2001.
  • C. CALUDE - Theories of Computational Complexity, North-Holland, Amsterdam, 1988. 
  • D. L. ȘERBĂNAȚI - Limbaje de programare si compilatoare, Editura Academiei RSR, București, 1987, 345 pg. 
  • E. VASILIU - Gramatici generative și gramatici transformaționale,  vol. Lingvistica modernă în texte, redactori M. Iliescu, L. Wald, Tipografia Universităii București, 1981,  121pg. 
  • A. ATANASIU - Limbaje formale și automate, Editura INFODATA,  Cluj, 2007, 170 pg.
  • T. JUCAN  - Limbaje formale ¸si automate, Editura Matrix Rom, București, 1999
  • Gh. PĂUN - Probleme actuale în teoria limbajelor formale, Editura Științifică și Enciclopedică, București 1984. 
  • Ş. MĂRUȘTER, M. DRĂGAN – Limbaje formale, Editura Eubeea, Timișoara, 1998. 
  • E. M. POPA - Limbaje formale, Editura Alma Mater, Sibiu, 2003.
Mai era o carte cu coperți albastre pe care am cumpărat-o, parcă editată la Cluj despre Gramatici generative, de unde am învățat eu primele noțiuni de limbaje formale și de gramatici. Acolo am citit prima dată despre rezultatele lui Noam CHOMSKY. În clipa aceasta nu-mi aduc aminte despre ce carte este vorba și-mi pare nespus de rău. Cu ea aș fi început aici. Mi-au plăcut dintotdeauna rezultatele de la limbajele formale și prin anul al V-lea de facultate am gândit un limbaj formal pentru aplicații de contabilitate, care ajuta la preluarea directă din documente pentru a scrie formule contabile, era ceva de o matrice de corespondențe dintre conturi. Restul nu-mi mai amintesc, dar era ceva frumos în mintea mea de atunci. 
Cărțile de informatică teoretică sunt extrem de interesante și ele au contribuit substanțial la fondarea școlii de informatică de la noi pentru că numai practica nu ajută prea mult. Ea trebuie precedată de rezultate teoretice semnificative.







(12 octombrie 2017)

Sunday, October 1, 2017

Cercetarea în informatică

Cercetarea științifică în informatică este ceva mai diferită de celelalte domenii pentru că:
- totul se învârte în jurul calculatorului;
- se pornește de la un nivel destul de ridicat;
- empirismul nu are ce căuta;
- totul se cuantifică foarte riguros;
- este muncă de echipă interdisciplinară;
- nimic nu merge pe afirmație;
- totul trebuie demonstrat cu rezultate concrete;
- evaluările sunt făcute foarte rapid;
- uzura morală a contextului este dramatică;
- costurile sunt extrem de ridicate.
Cercetarea fundamentală în informatică înseamnă a descoperi noi teorii, noi domenii în informatică în strânsă corelație cu necesități de dezvoltare ale domeniului, care să permită avansarea acestuia folosind noi abordări necunoscute până atunci. Se obțin deschideri spre noi orizonturi care vin să determine un salt spectaculos cu efecte remarcabile asupra eliminării restricțiilor care erau dominante la un moment dat. Teoria bazelor de date a fost urmată de teoria bazelor de date relaționale, care a fost și ea urmată de teoria bazelor de date orientate obiect. În viitor se va privi cu nostalgie spre acestea pentru că vor exista alte teorii cu mult mai sofisticate care să pună de acord miliardele de articole rezultate din achiziții neomogene de date cu dezideratele privind regăsirea de informații folosind limbajul natural pur sau alte elemente de achiziții de date, chiar vagi. Acesta este doar un exemplu, dar cercetarea findamentală are menirea de a oferi exact ceea ce la ora actuală ceva ce nimănui nu-i trece prin minte, probabil de o simplitate extremă, asemeni cuiului, acului sau nasturelui și care să arunce în derizoriu tot ce se știa în informatica de azi sau de ieri. Rareori cercetarea fundamentală este muncă individuală, iar comunicarea în cadrul echipei este de importanță excepțională. Ea este creativitate și poezie  99%.
Cercetarea de dezvoltare  în informatică înseamnă a descoperi pornind de la teoriile descoperite recent, noi principii, noi proprietăți, noi domenii, care să facă pasul spre a concretiza ideile abstracte care au rezultat din teoriile ce se dezvoltă în cercetarea fundamentală. Cercetarea de dezvoltare face acel pas necesar în informatică spre  a fi identificate clase de probleme, clase de soluții de maximă generalitate, care pentru a fi puse în practică mai necesită încă un pas uriaș, acela al cercetării aplicative. De la teoria limbajelor formale se desprind o serie de clase de limbaje ale căror proprietăși se studiază în cadrul cercetării de dezvoltare. Se fac legături cu gramatici și din aproape în aproape, cercetarea de dezvoltare ajunge la suficiente elemente care să ducă la proiectarea de limbaje de programare pentru care se definesc gramatici și dacă se insistă se identifică chiar clasele de generare de procese de compilare, iar pasul spre implementarea acestor rezultate prin cercetarea aplicativă duc spre limbajul X și compilatorul Y. Cercetarea de dezvoltare se face în echipe complexe. Este creativitate 60% și experiență 40%.
Cercetarea aplicativă în informatică înseamnă a descoperi soluții la probleme concrete din producție, astfel încât prin aplicarea lor directă să se obțină rezultate palpabile, care să permită comparații cu ceea ce există deja și care să ducă la concluzia că noua soluție implementată este superioară în raport cu tot ceea ce exista înainte. Mai apare situația în care din lipsa de fonduri se caută o soluție cu caracter local la o problemă deja soluționată, dar tot prin activitate de cercetare se obține, criteriile de evaluare rămânând aceleași. Cercetarea aplicativă se face în echipe complexe. Este creativitate 30%, experiență  și realism restul de 70%.
La noi în țară s-a dezvoltat o intensă activitate de cercetare, iar clasificările pe cele trei tipuri ar fi încărcate de subiectivism, mai ales că munca aceasta este de mare complexitate indiferent la ce nivel se realizează. În opinia mea, o istoie trebuie să facă mai întâi inventarul problemelor, a soluțiilor fie teoretice, fie practice și cititorul să fie cel care stabilește apartenențe și să fie cel care face ierarhizări. Știu numai că s-a făcut cercetare științifică în informatică la ICI, la ITC, la Facultățile de Matematică Informatică, la Facultățile de Calculatoare, la Departamentelede Informatică Economică, dar au fost și alte locuri unde s-a venit cu soluții remarcabile pentru dezvoltarea informaticii românești.


(01 octombrie 2017)

Friday, September 29, 2017

Dragoș VAIDA


Dragoș VAIDA la 80 de ani

Privilegiul de a fi studentul profesorului Dragoș VAIDA mi-a fost oferit de apartenenta mea la seria de studenti de la Sectia de Mecanizare, din Facultatea de Cibernetica, a doua promotie, 1965-1970.
Despre profesorul Dragoș VAIDA voi vorbi cu un respect profund pentru modul special in care a fost prezent cativa ani in mijocul celei de a doua serii de la Sectia de Informatica Economica a Facultatii de Cibernetica din ASE. Profesorul Dragoș VAIDA a predat cursurile de Analiza numerica si Limbaje de programare in anii 3, 4, si 5. Modul in care se prezenta in fata noastra demonstra marea sa clasa, cunostintele sale speciale si capacitatea de a incepe un curs si de a-l termina in cele mai bune conditiuni. Profesorul Dragoș VAIDA construia din aproape in aproape demonstratiile, in mod logic curgeau toate formulele, incat nu era nevoie sa inveti nimic pe dinafara, asa cum se procedeaza atunci cand studentul nu intelege ceea ce trebuie sa prezinte cand trage biletul la examen. Lucrurile extrem de dificile erau prezentate pe inteles, pentru ca programarea in ALGOL '68 nu era un lucru simplu, din moment ce recursivitatea o luase cu mult inaintea implementarilor, iar domeniile de definire ale variabilelor abia limbajul C daca le-a implementat cat de cat in anumite nuante, din moment ce avea definiri de blocuri.
Fiecare curs era bine structurat, clar prezentat si maniera de expunere punea in evidenta calitatile exceptionale ale unui profesor adevarat, desi tanar in acele vremuri.
Cand am ales in primavara anului 1970, pentru lucrarea de diploma RUTINE INTERPRETATIVE SI RUTINE COMPILATIVE am avut marea onoare de a-l avea pe domnul profesor Dragoș VAIDA coordonator. Il stiam pe profesorul care preda. Il stiam pe cercetatorul stiintific cu biroul de la etajul al patrulea din centrul de Calcul al ASE. Conducatorul lucrarii de diploma profesorul Dragoș VAIDA mi-a dezvaluit o alta fateta, aceea a unei puternice personalitati, autor al unor lucrari de pionierat in domeniul construirii compilatoarelor, prin abordari de inalt nivel teoretic. Domnia sa mi-a oferit spre documentare o serie de carti in mare voga in acei ani dar mi-a oferit fara rezerve manuscrisul lucrarii ALGORITMI DE COMPILARE, ce avea sa apara in anul 1971 la Editura Didactica si Pedagogica. Am fost surprins de gestul domniei sale si am cautat prin tot ceea ce am construit in lucrarea mea de diploma sa fac lucruri care sa fie corecte si bine documentate. Discutiile pe capitole au fost insotite de sfaturi si de sugestii, astfel incat consider ca pe parcursul intregii colaborari am avut foarte multe lucruri de invatat. Profesorul Dragoș VAIDA publica in reviste importante si participa la conferinte internationale, noi ca studenti aflam despre acestea cand veneau sa tina cursuri alte persoane si de fioecare data se vedea diferenta, rugandu-l la intoarcerea de la conferinte sa reia multe dintre problemele predate ce ceilalti, problemele fiind dificile pentru respectivii... M-a impresionat la profesor faptul ca venea la costum, cravata si avea o batista care ii dadea o anumita distinctie. De cate ori il intalneam pe profesor la Coloane la Romana, domnia sa venind catre cabinetul de la etajul al patrulea din Centrul de Calcul si il salutam, scotea palaria in fata noastra si ne minunam de acest gest de politete al unui om deosebit, fata de noi care eram numai niste studenti. Azi, cum stau lucrurile?... In anul 2001 am avut onoarea ca in calitatea mea de sef al Catedrei de Informatica Economica sa fiu la masa prezidiului celei de a V-a editii a Conferintei Internationale de Informatica Economica, prilej cu care profesorului Dragoș VAIDA i-a fost decernat Premiul Grigore MOISIL pe anul 2000. In Revista Informatica Economica, vol. 5, nr. 1, 2001 au fost prezentate argumentele care au stat la baza nominalizarii domnului profesor Dragoș VAIDA. Acum la ceas aniversar, ma alatur celor care i-au fost studenti si ii urez Domnului Profesor Dragoș VAIDA un calduros
LA MULTI ANI! 

(articolul  scris în 2013 este preluat de pe site)
(29 septembrie 2017)