Compilarea este un proces care facilitează comunicarea între programator și computer. Ce este un compilator - descriere

Când programatorii vorbesc despre programare, ei spun adesea: „programul compilat fără erori” sau când îi spun unui programator: „compilați programul, să vedem rezultatul muncii”. Astfel de conversații pot deveni ulterior o sursă de confuzie pentru. Compilarea și crearea unui fișier executabil nu sunt sinonime! Crearea fișierelor executabile este un proces în mai mulți pași, ale cărui componente principale sunt compilarea și legarea. De fapt, chiar dacă un program „compilat fără erori”, este posibil să nu funcționeze din cauza posibilă eroareîn timpul etapei de amenajare. Întregul proces de traducere a fișierelor de cod sursă în fisier executabil ar fi mai bine să-i spunem construirea unui proiect.

Compilare!

Compilarea se referă la procesarea fișierelor de cod sursă (.c, .cc sau .cpp) și crearea fișierelor obiect de proiect. Acest pas nu creează un fișier executabil. În schimb, compilatorul pur și simplu traduce codul de nivel înalt în limbajul mașinii. De exemplu, dacă ați creat (dar nu ați combinat) trei dosar separat, veți avea trei fișiere obiect create ca ieșire în timpul pasului de compilare. Extensia unor astfel de fișiere va depinde de compilator, de exemplu *.obj sau *.o. Fiecare dintre aceste fișiere conține instrucțiuni de mașină care sunt echivalente cu codul sursă. Dar nu poți rula aceste fișiere! Trebuie să le transformi în executabile sistem de operare, numai atunci pot fi folosite. Aici intervine linkerul.

Aspect!

Un singur fișier executabil este creat din mai multe fișiere obiect. În această etapă, fișierul rezultat este singurul și, prin urmare, linkerul se va plânge de funcțiile nedefinite găsite. În etapa de compilare, dacă compilatorul nu a putut găsi o definiție pentru o funcție, se presupune că funcția a fost definită într-un alt fișier. Dacă nu este cazul, compilatorul nu va ști despre asta, deoarece nu se uită la conținutul mai multor fișiere odată. Linker-ul, pe de altă parte, poate privi mai multe fișiere și poate încerca să găsească referințe la funcții care nu au fost menționate.

Vă puteți întreba de ce pașii de compilare și de conectare sunt separați. În primul rând, acest lucru facilitează implementarea procesului de construire a programelor. Compilatorul își face treaba și linkerul își face treaba - prin separarea funcțiilor, complexitatea programului

scade. Un alt avantaj (mai evident) este că vă permite să creați programe mari fără a fi nevoie să repetați pasul de compilare de fiecare dată când unele fișiere sunt modificate. În schimb, se folosește așa-numita „compilare condiționată”. Adică, obiectele sunt create numai pentru acele fișiere sursă care au fost modificate; pentru restul, fișierele obiect nu sunt recreate. Faptul că fiecare fișier este compilat separat de informațiile conținute în celelalte fișiere este

există datorită împărțirii procesului de construcție a proiectului în etape de compilare și de legătură.

Acești doi pași sunt îngrijiți și nu trebuie să vă faceți griji cu privire la fișierele care au fost modificate. IDE-ul decide când să creeze obiecte fișier și când nu.

Cunoașterea diferenței dintre fazele de compilare și de conectare vă va face mult mai ușor să găsiți erori în proiectele dvs. Compilatorul prinde de obicei absența punctului și virgulă sau a parantezelor. Dacă primiți un mesaj de eroare despre mai multe definiții ale unei funcții sau variabile, știți că linker-ul vă spune despre asta. Această eroare poate însemna doar că aceeași funcție sau variabilă este definită în mai multe fișiere de proiect.

Calculatoarele singure pot face atât de multe set limitat operațiuni numite coduri mașini. Pe vremuri, când au apărut primele computere, programele erau scrise în coduri de mașină, care erau secvențe numere binare, perceput în mod unic de computer. La sfârșitul anilor 1950, au apărut primele limbaje de programare, cum ar fi limbajul de asamblare și Fortran. Pentru ca un computer să înțeleagă un program scris într-un limbaj de programare, este nevoie de un traducător (translator) al unui astfel de program în coduri de mașină. Rețineți că, dacă operatorul limbajului de asamblare apare cel mai adesea în timpul traducerii 1 Unele instrucțiuni din limbajul de asamblare, cum ar fi instrucțiunile de intrare/ieșire, se mapează la mai multe instrucțiuni de mașină.într-o singură instrucțiune de mașină, mai multe limbi oferite nivel inalt mapat, în general, în mai multe instrucțiuni ale mașinii.

Există două tipuri de traducători: compilatori (compilator) și interpreți (interpret). Procesul de compilare constă din două părți: analiză și sinteză. Partea de analiză a compilatorului descompune programul sursă în elementele sale constitutive (construcții de limbaj) și creează o reprezentare intermediară a programului sursă. Partea de sinteză creează un nou program din reprezentarea intermediară pe care computerul o poate înțelege. Un astfel de program se numește program obiect. Programul obiect poate fi apoi executat fără retraducere. Arborele sunt de obicei folosiți ca reprezentare intermediară, în special așa-numiții arbori de analiză. Un arbore de analiză este un arbore, al cărui nod corespunde unei anumite operații, iar fiii acestui nod corespund operanzilor.

Interpret

Spre deosebire de compilator, interpretul nu creează niciunul program nou, ci pur și simplu execută fiecare propoziție a limbajului de programare. Putem spune că rezultatul muncii interpretului este un „număr”.

În general, un interpret, ca un compilator, analizează un program în limbajul său de intrare, creează o reprezentare intermediară și apoi efectuează operațiunile conținute în textul acelui program. De exemplu, interpretul poate construi un arbore de analiză și apoi poate efectua operațiunile care marchează nodurile acelui arbore.

În cazul în care limba sursă este suficient de simplă (de exemplu, dacă este limbajul de asamblare sau Basic), atunci nu este necesară nicio reprezentare intermediară, iar atunci interpretul este o buclă simplă. Selectează următoarea instrucțiune de limbă din fluxul de intrare, o analizează și o execută. Apoi selectați următoarea instrucțiune. Acest proces continuă până când toate instrucțiunile au fost executate sau până când este întâlnită o instrucțiune, indicând sfârșitul procesului de interpretare.


Compilator


Un compilator traduce programe dintr-o limbă în alta. Intrarea compilatorului este șir de caractere, alcătuind programul original într-un limbaj de programare. Ieșirea compilatorului ( program obiect) este, de asemenea, un șir de caractere, dar aparținând unei alte limbi, de exemplu, limba unui computer. Mai mult decât atât, compilatorul în sine este scris într-un limbaj care poate fi diferit de primele două. Vom numi limba limba sursă, limba limba țintă și limba limba de implementare. Astfel, putem vorbi despre un compilator care variază de la Pascal până la limbaje moderne orientate pe obiecte, cum ar fi C# și Java. Aproape toti limbaj de programare are unele particularități din punctul de vedere al creatorului traducătorului. Cu toate acestea, vom începe prin a ne uita la o varietate de limbi țintă ale compilatorului.

Compilator- un program sau un instrument tehnic care funcționează compilare.

Compilare- traducerea unui program compilat într-un limbaj sursă de nivel înalt într-un program echivalent într-un limbaj de nivel scăzut apropiat de codul mașină (cod absolut, modul obiect, uneori limbaj de asamblare). Informațiile de intrare către compilator (codul sursă) sunt o descriere a algoritmului sau programului într-un limbaj orientat spre probleme, iar rezultatul compilatorului este o descriere echivalentă a algoritmului într-un limbaj orientat către mașină (cod obiect).

Compila- traduce un program de mașină dintr-un limbaj orientat spre probleme într-un limbaj orientat către mașină.

Tipuri de compilatoare

    Vectorizarea. Traduce codul sursă în cod mașină codul computerului, echipat cu un procesor vectorial.

    Flexibil. Proiectat conform principiul modular, condus de tabele și programat într-un limbaj de nivel înalt sau implementat folosind un compilator de compilatoare.

    Dialog. Vezi: traducător de dialog.

    incremental. Retransmite fragmente de program și completări la acesta fără a recompila întregul program.

    Interpretativ (pas cu pas). Efectuează secvenţial o compilare independentă a fiecărei instrucţiuni individuale (comandă) a programului sursă.

    Compilatorul compilatorului. Un traducător care acceptă o descriere formală a unui limbaj de programare și generează un compilator pentru acest limbaj.

    Depanați. Elimină anumite tipuri de erori de sintaxă.

    Rezident. Acesta rezidă permanent în RAM și este disponibil pentru reutilizare de multe sarcini.

    Autocompilare. Scris în aceeași limbă din care se realizează emisiunea.

    universal. Bazat pe descriere formală sintaxa și semantica limbajului de intrare. Componentele unui astfel de compilator sunt: ​​nucleu, încărcătoare sintactice și semantice.

Tipuri de compilare

    Lot. Compilarea mai multor module sursă într-un singur articol de lucru.

    Linie cu linie. La fel ca interpretarea.

    Condiţional. Compilare, în care textul tradus depinde de condițiile specificate în programul original directivele compilatorului. Deci, în funcție de valoarea unei anumite constante, puteți activa sau dezactiva traducerea unei părți din textul programului.

Structura compilatorului

Procesul de compilare constă din următorii pași:

    Analiza lexicală. În această etapă succesiunea personajelor fișier sursă este convertită într-o secvență de jetoane.

    Analiza sintactică (gramaticală). Secvența de jetoane este convertită într-un arbore de analiză.

    Analiza semantică. Arborele de analiză este procesat pentru a-și stabili semantica (sensul) - de exemplu, legarea identificatorilor de declarațiile, tipurile lor, verificarea compatibilității, determinarea tipurilor de expresii etc. Rezultatul este de obicei numit „reprezentare intermediară/cod” și poate fi extins prin arborele de analiză, un arbore nou, un set abstract de comenzi sau altceva convenabil pentru procesare ulterioară.

    Optimizare. Eliminarea structurilor inutile și simplificarea codului, păstrându-i în același timp sensul. Optimizarea poate fi la diferite niveluri și etape - de exemplu, pe codul intermediar sau pe codul final al mașinii.

    Generarea codului. Din reprezentarea intermediară se generează cod în limba țintă.

În implementările specifice ale compilatorului, aceste etape pot fi separate sau, dimpotrivă, combinate într-o formă sau alta.

Generarea codului

Generaţie Codul mașinii

Majoritatea compilatoarelor traduc un program dintr-un limbaj de programare de nivel înalt în cod de mașină care poate fi executat direct de procesor. De regulă, acest cod este, de asemenea, orientat spre execuție în mediul unui anumit sistem de operare, deoarece folosește capabilitățile oferite de acesta (apeluri de sistem, biblioteci de funcții). Este numită arhitectura (set de software și hardware) pentru care se realizează compilarea mașină țintă.

Rezultatul compilării - modulul executabil - are performanța maximă posibilă, dar este legat de un anumit sistem de operare și procesor (și nu va funcționa pe altele).

Fiecare mașină țintă (IBM, Apple, Sun etc.) și fiecare sistem de operare sau familie de sisteme de operare care rulează pe mașina țintă necesită scrierea propriului compilator. Există, de asemenea, așa-numitele compilatoare încrucișate, permițându-vă să generați cod pe o mașină și într-un mediu OS care este destinat să fie executat pe o altă mașină țintă și/sau într-un alt mediu OS. În plus, compilatorii pot optimiza codul pentru diferite modele din aceeași familie de procesoare (prin sprijinirea caracteristicilor specifice modelului sau a extensiilor setului de instrucțiuni). De exemplu, codul compilat pentru procesoarele din familia Pentium poate lua în considerare caracteristicile paralelizării instrucțiunilor și poate folosi extensiile lor specifice - MMX, SSE etc.

Unii compilatori traduc un program dintr-un limbaj de nivel înalt nu direct în codul mașinii, ci în limbaj de asamblare. Acest lucru se face pentru a simplifica partea compilatorului responsabilă de generarea codului și pentru a crește portabilitatea acestuia (sarcina de a genera codul final și de a le lega la platforma țintă necesară este transferată la asamblator) sau pentru a permite programatorului să controleze și să corecteze rezultatul compilației.

Generarea de bytecode

Rezultatul muncii compilatorului poate fi un program într-un limbaj de nivel scăzut special creat, care este supus interpretării mașină virtuală. Acest limbaj se numește pseudocod sau bytecode. De regulă, nu este codul mașină al niciunui computer și programele de pe acesta pot fi executate pe diferite arhitecturi unde există o mașină virtuală, dar în unele cazuri sunt create platforme hardware care suportă direct pseudocodul unui limbaj. De exemplu, pseudocodul Java se numește bytecode Java. Cod octet Java) și rulează în Java Virtual Machine, specificația procesorului picoJava a fost creată pentru execuția sa directă. Pentru .NET Framework, pseudocodul se numește Common Intermediate Language (CIL) și runtime se numește Common Language Runtime (CLR).

Unele implementări ale limbajelor interpretate de nivel înalt (cum ar fi Perl) folosesc bytecode pentru a optimiza execuția: pașii scumpi de analiză și conversie a textului programului în bytecode sunt executați o dată la încărcare, apoi codul corespunzător poate fi reutilizat fără pași intermediari.

Compilare dinamică

Articolul principal: Compilare JIT

Datorită necesității de interpretare, bytecode rulează mult mai lent decât codul de mașină cu funcționalitate comparabilă, dar este mai portabil (independent de sistemul de operare și modelul de procesor). Pentru a accelera execuția bytecode, utilizați compilare dinamică, când o mașină virtuală traduce pseudocodul în cod de mașină imediat înainte de prima sa execuție (și când codul este accesat în mod repetat, versiunea compilată este executată).

Codul CIL este, de asemenea, compilat în codul mașinii țintă de către un compilator JIT, iar bibliotecile .NET Framework sunt precompilate.

Decompilarea

Există programe care rezolvă problema inversă - traducerea unui program dintr-un limbaj de nivel scăzut într-unul de nivel înalt. Acest proces se numește decompilare, iar astfel de programe se numesc decompilatoare. Dar, deoarece compilarea este un proces cu pierderi, este în general imposibil să reconstruiți cu exactitate codul sursă, de exemplu, C++. Programele în bytecodes sunt decompilate mai eficient - de exemplu, există un decompilator destul de fiabil pentru Flash. Un tip de decompilare este dezasamblarea codului mașină în codul limbajului de asamblare, care aproape întotdeauna reușește (dificultatea poate fi codul auto-modificabil sau codul în care codul real și datele nu sunt separate). Acest lucru se datorează faptului că există o corespondență aproape unu-la-unu între codurile de instrucțiuni ale mașinii și instrucțiunile de asamblare.

Compilare separată

Compilare separată(Engleză) compilare separată) - traducerea părților programului separat, urmată de combinarea lor de către linker într-un singur modul de încărcare.

Din punct de vedere istoric, o caracteristică a compilatorului, reflectată în numele său (ing. compila- a pune cap la cap, a compus), a fost că a realizat atât traducerea, cât și compunerea, în timp ce compilatorul putea genera imediat cod absolut. Cu toate acestea, mai târziu, pe măsură ce complexitatea și dimensiunea programelor au crescut (și timpul petrecut pentru recompilare a crescut), a devenit necesară separarea programelor în părți și alocarea bibliotecilor care puteau fi compilate independent unele de altele. Când traduce fiecare parte a unui program, compilatorul generează un modul obiect care conține informații suplimentare, care este apoi folosit pentru a lega și rezolva legăturile dintre părți atunci când părțile sunt asamblate într-un modul executabil.

Apariția compilației separate și separarea legăturilor ca etapă separată a avut loc mult mai târziu decât crearea compilatoarelor. În acest sens, în locul termenului „compilator”, termenul „traducător” este uneori folosit ca sinonim: fie în literatura veche, fie atunci când doresc să sublinieze capacitatea acestuia de a traduce un program în codul mașinii (și invers, termenul „compilator” este folosit pentru a sublinia capacitatea de a asambla din mai multe fișiere).

Dacă tocmai ați început să învățați programarea sau sunteți interesat de această problemă, atunci probabil că ați întâlnit un cuvânt atât de misterios ca „compilator”. Numai acest concept înfricoșător poate speria utilizatorii. ÎN această recenzie vom încerca să ne dăm seama dacă totul este într-adevăr atât de groaznic în realitate.

Compilator: definiție și istorie

Dacă vorbim în cuvinte simple, atunci prin compilator înțelegem astăzi un program care convertește textul unui program scris de utilizator într-o formă specifică potrivită pentru execuție pe computer. Astfel de programe au apărut concomitent cu apariția primelor limbaje de programare. Acest lucru s-a întâmplat la sfârșitul anilor 50. Se pare că istoria asociată limbajelor de programare și compilatoarelor datează de mai bine de 60 de ani. Această direcție informatică, în ciuda unei perioade atât de serioase, nu poate fi numită stabilită sau depășită. Dimpotrivă, odată cu trecerea timpului, apariția de noi sarcini și industrii pentru care sunt folosite calculatoarele personale, este nevoie de dezvoltarea unor limbaje de programare noi, mai convenabile. Aceste limbi necesită compilatori în consecință. Fiecare platformă are propriile evoluții.

Compilator: principiu de funcționare

Codul sursă creat într-un limbaj de nivel înalt de către dezvoltator trebuie convertit într-un program scris într-un limbaj special de mașină. Acest cod se numește program executabil. Program executabil poate fi instalat și rulat pe orice computer personal fără a face nicio conversie.

Compilatoarele sunt în mod tradițional unul dintre principalele lucruri în informatică, împreună cu bazele de date și sistemele de operare. Ce este un compilator? Aceasta este, într-un fel, baza informaticii moderne. Însuși subiectul creării unor astfel de programe dintr-un punct de vedere diferit implică un numar mare de tehnologice şi aspecte teoretice legate de programare. După cum cred mulți dezvoltatori, acest subiect este în general cel mai atractiv din informatică. Când dezvoltă un program care rezolvă o problemă specifică, programatorul îl scrie limbaj special programare. În timpul procesului de dezvoltare, el folosește termeni care se apropie exact de zona cu care are de a face. Computerul nu înțelege deloc ce vrea o persoană de la el. El poate doar să-și dea seama lucruri simple, cum ar fi variabile, registre, celule, memorie permanentă și temporară. Ce este un compilator? Acest program special, a cărui sarcină principală este de a traduce concepte apropiate domeniul subiectului programator în concepte care pot fi manipulate de un computer personal. Aceasta este exact sarcina îndeplinită de compilator pentru orice limbaj de programare. Când apare o nouă limbă, devine necesară traducerea codului scris în ea într-o formă pe care un computer o poate înțelege. În caz contrar, codul nu va fi executat. Există întotdeauna un decalaj semantic între conceptele de om și calculator personal. Compilatoarele limbajului de programare sunt concepute pentru a depăși această problemă.

Creatorii de compilatoare se confruntă cu mulți diverse probleme. Acestea sunt, de asemenea, probleme științifice care sunt asociate cu afișare corectă concepte în domeniul aplicat și probleme tehnologice și de inginerie asociate cu implementarea afișajului. Când creați un compilator, trebuie să efectuați multe subsarcini diferite. Aceasta este o industrie foarte complexă căreia programatorii își dedică întreaga viață.

Compiler și clasă

Mulți dintre voi au auzit probabil despre limbaje de programare precum C++ și C. Acestea sunt unele dintre cele mai comune și populare limbaje. Astfel de limbaje de programare serioase conțin concepte puternice care sunt utile pentru reprezentarea conceptelor de domenii de aplicație. Acolo, de exemplu, există un astfel de concept precum clase și funcții. Ele sunt fundamentale pentru multe limbaje de programare, dar sunt deosebit de comune în C++. Va fi mult mai convenabil pentru un programator să creeze modele folosind astfel de concepte. Un compilator C pentru orice sistem de operare face posibilă afișarea unor astfel de lucruri de nivel înalt într-o formă care poate fi citită de computer. Apoi computerul le poate manipula cu ușurință. Orice computer, oricât de complex este, funcționează concepte simple. Cu toate acestea, conceptul de clasă poate fi numit dificil, deoarece este convenabil să reflectați multe obiecte cu ajutorul ei viata reala. Sarcina compilatorului este să se întoarcă concepte complexeîn cele primitive.

Dezvoltarea compilatorului

ÎN În ultima vreme se poate urmări o tendinţă clară datorită faptului că oricare companie mareîn câmp tehnologia Informatiei lansează propriul limbaj de programare, care este apoi promovat în masă. Fiecare limbaj de programare necesită propriul compilator. De regulă, ele sunt create împreună cu limbile. Cu toate acestea, există un număr mare de companii și programatori independenți care doresc să aibă propriile compilatoare pentru anumite limbaje sau care dezvoltă limbi proprii programare și, în consecință, compilatoare pentru acestea. Putem spune cu deplină încredere că un programator care decide să-și dedice viața acestui domeniu cu siguranță nu va rămâne fără muncă. Acum ar trebui să vă fie mai mult sau mai puțin clar ce este un compilator. Acesta este un fel de program de traducere care este folosit pentru interacțiunea între dezvoltator și computer. Astăzi pe teren echipamente informatice fără a acestui element nicăieri.

Note generale despre interpreți

Dezvoltarea interpreților pentru a interpreta programe într-o anumită limbă sursă este una dintre sarcinile principale ale informaticii. Gradul de dificultate al problemei implementării unui interpret depinde de complexitatea limbii sursă și de gradul de diferență a acesteia față de limba de bază în care interpretul însuși trebuie să fie scris.

Pentru a asigura corectitudinea interpretului, la proiectarea lui, trebuie să pornim de la definirea semantică a limbajului interpretat, sau cel puțin să o verificăm față de aceasta. Să acordăm atenție faptului că definiția matematică a semanticii unei limbi este similară cu programele interpretative.

O pozitie speciala este ocupata de interpreți interactivi, incrementali (pas cu pas). Ele nu necesită neapărat pregătirea mai întâi a întregului program, inclusiv datele de intrare și abia apoi interpretarea acestuia. Cu interpretarea interactivă, programul și datele de intrare pot fi pregătite în părți separate, iar partea rezultată - pe cât posibil - poate fi interpretată imediat (limbajul BASIC este special orientat spre interpretarea incrementală).

Acum ne apropiem de crearea de interpreți pentru limbi care arată diferit de limbile clasice orientate spre calcul. În special, ca urmare a cercetărilor pe termen lung, a devenit posibilă interpretarea anumitor limbaje care sunt orientate mai degrabă către specificații decât către calcule (de exemplu, limbajul PROLOG, care este folosit pentru alcătuirea programelor în logica interpretabilă de mașină). ). Cu toate acestea, pentru astfel de limbi există anumite bariere insurmontabile din cauza limitelor de calculabilitate și complexitate, care pentru multe enunțuri de problemă fac ca utilizarea acestor limbi să fie aproape imposibilă.

Compilator ia ca intrare un program în limbajul sursă și produce un program într-un limbaj obiect pe care mașina îl poate înțelege.

Dacă vrem să executăm în mod repetat un program scris într-un limbaj de nivel înalt, cu date sursă mereu noi, atunci se întâmplă adesea program mai eficient nu interpreta, ci mai întâi traduce într-o limbă deja implementată, eventual mai apropiată limbajul mașinii, iar apoi executați programul generat în acest fel. Această metodă face posibilă adaptarea mai bună a programului la structura mașinii efectiv utilizate și, astfel, obținerea unei optimizări de anvergură. În principiu, o astfel de traducere se poate face manual, dar acest lucru necesită timp și pot apărea erori. Prin urmare, programe speciale de traducere numite traducători sau compilatoare(calculator englez).



Compilatorul și interpretul sunt de obicei destul de buni programe complexe, care percep un program în limba sursă sub formă de text, stabilesc structura internă a unui astfel de program dat, verificându-i corectitudinea sintactică (parsing) și traduc programul într-un alt limbaj (obiect) sau execută acest program prin acțiuni adecvate .

Un limbaj este determinat de sintaxa și semantica sa. În procesul de compilare sau interpretare, un program, înțeles ca obiect sintactic, este luat ca intrare și, conform semanticii sale, este transformat într-un program într-un alt limbaj sau într-o succesiune de acțiuni (proces de execuție).

Limbajele de programare vin la niveluri înalte și scăzute.

Direcționarea către limbi tip specific procesor și caracteristicile sale sunt numite limbi nivel scăzut. Fiecare instrucțiune de limbaj de nivel scăzut implementează direct o instrucțiune de microprocesor și sunt întotdeauna orientate către setul de instrucțiuni al unui microprocesor specific. Limbajul de cel mai jos nivel este limbajul de asamblare, care reprezintă pur și simplu fiecare instrucțiune de cod de mașină, nu ca numere, ci folosind simboluri simboluri, numite mnemonice.

Limbi nivel inalt vă permit să setați acțiunile doriteîn program folosind un anumit set operatori. Sunt mult mai aproape și mai ușor de înțeles de o persoană decât de un computer. Fiecare comandă a unui astfel de limbaj poate consta dintr-o duzină sau mai multe comenzi de microprocesor. Este mai ușor să scrieți programe într-o limbă străină.


1 – dependent de mașină (Asamblator). Limbi de nivel scăzut.

2 – orientat către mașină (C)

3 – universal (Fortran, Pascal, Basic)

4 - orientat pe probleme (GPSS, Logo, orientat pe obiecte (fort, Smalltalk))

5,6,7 – (Prolog, Lisp, SNOBALL).

C, C++ - întreaga parte a programului dependentă de mașină este destul de ușor localizată și modificată la transferul programului într-o altă arhitectură.

Fortran – primul limbaj de nivel înalt (1958, IBM), folosit și astăzi, suportă programarea modulară, preferată în special de matematicieni.

Pascal – una dintre cele mai populare în scopuri educaționale (N. Wirth), implementează majoritatea ideilor de programare structurată.

DE BAZĂ – pentru programatorii începători, aproape de conversație Limba engleză, acceptă programarea modulară și structurată.

Siglă , printre limbile orientate spre probleme, este folosit în principal în scopuri didactice. Este un limbaj procedural conversațional (sintaxă simplă).

GPSS – concentrat pe modelarea sistemelor folosind evenimente. Este utilizat în cazul în care rezultatele cercetării sunt exprimate în termeni de timp de așteptare, lungimea cozii, utilizarea resurselor.

Convorbire scurtă – unul dintre primele OO PL, designul principal este un obiect și acțiuni cu acesta, destinate sarcinilor nenumerice (când construiți sisteme inteligenţă artificială).

Fort – utilizat în rezolvarea problemelor de modelare prin simulare în sisteme grafice.

Limbaje de grup funcționale utilizat în principal în sistemele de inteligență artificială. Au un suport puternic pentru instrumente, un compilator rapid, instrumente de organizare încorporate modul cu mai multe ferestre, Arte grafice Rezoluție înaltă, un set dezvoltat de funcții matematice.

Prolog – se dau limbajul AI, termenii și conexiunile, iar cu ajutorul lui se creează altele noi.

Lisp – are modele grafice puternice, vă permite să creați programe de proiectare (piese, de exemplu). Este axat pe activități de proiectare. Are o bibliotecă de primitive.

SNOBAL – limbajul AI.

Generații de limbaje de programare

Toate limbajele de programare sunt de obicei împărțite în 5 generații.

1. Începutul anilor 50. Au apărut primele computere și primele limbaje de asamblare, în care programarea a fost efectuată conform principiului „O singură instrucțiune - o linie”.

2. Sfârșitul anilor 50 începutul anilor 60. A fost dezvoltat un asamblator simbolic, în care a apărut conceptul de variabilă. Viteza de dezvoltare și fiabilitatea programelor a crescut.

3. anii 60. Nașterea limbilor de nivel înalt. Ușurință de programare, independență față de un anumit computer, noi construcții de limbaj puternice.

4. De la începutul anilor 70 până în prezent. Limbi orientate spre probleme care operează cu concepte specifice unui domeniu îngust. Operatori puternici care necesitau mii de linii de cod sursă în limbi de generație inferioară.

5. Mijlocul anilor 90. Sisteme crearea automată programe de aplicație prin utilizarea ajutoare vizuale dezvoltare, fără cunoștințe de programare. Instrucțiunile sunt introduse în computer într-o formă vizuală folosind metode care sunt cele mai convenabile pentru o persoană care nu este familiarizată cu programarea.

La institutul nostru în diferite cursuri vei învăța să programezi în diverse limbi programare.