Din Wikipedia
Limba de programare este un sistem formal de semn. destinate înregistrării programelor de calculator. Limba de programare definește un set de lexicani. regulile sintactice și semantice care determină apariția programului și acțiunile pe care executantul (de obicei un computer) le va efectua sub controlul său.
De la crearea primelor mașini programabile, omenirea a venit cu peste opt mii de limbi de programare (inclusiv limbile non-standard, vizuale și esoterice) [1]. În fiecare an numărul lor crește. Unele limbi pot utiliza doar un număr mic de dezvoltatori proprii, alții devin cunoscuți de milioane de oameni. Programatorii profesioniști pot deține zece sau mai multe limbi de programare diferite.
Limba de programare este destinată pentru scrierea de programe de calculator, care reprezintă un set de reguli care permit unui computer să efectueze un anumit proces de calcul. organizează gestionarea diverselor obiecte, și așa mai departe. n. Un limbaj de programare este diferit de limbajul natural, care este proiectat pentru interacțiunea umană cu calculatoare, în timp ce limbi naturale folosite pentru comunicarea între oameni. Majoritatea limbajelor de programare folosesc construcții speciale pentru a defini și manipula structurile de date și a controla procesul de calcul.
De regulă, limba de programare există în mai multe tipuri, dar în esență diferite:
- standardul limbajului - un set de specificații care definesc sintaxa și semantica sa; standardul limbajului poate evolua istoric (a se vedea mai multe detalii despre standardizare);
- implementări (implementări) ale standardului - software-ul propriu-zis, care asigură lucrul în conformitate cu una sau altă versiune a limbajului standard; astfel de instrumente software diferă în producător, marca și versiunea (versiune), timpul de eliberare, implementarea completă a standardului, caracteristici suplimentare; pot avea anumite erori sau caracteristici ale variantei care afectează practica utilizării limbii sau chiar a standardului acesteia.
Istorie [edita]
Etapele timpurii ale dezvoltării [edit]
În același timp, în anii 1940, existau calculatoare digitale electrice și a fost dezvoltat de o limbă, care poate fi considerat primul limbaj de nivel înalt de programare pentru calculatoare - «Plankalkül», creat de inginerul german K. Zuse în perioada 1943-1945 [2] .
De la mijlocul anilor 1950, au început să apară limbi de generația a treia, cum ar fi Fortran. Lisp și Kobol [3]. Limbile de programare de acest tip sunt mai abstracte (ele sunt, de asemenea, numite "limbi de nivel înalt") și sunt universale, nu au o dependență rigidă de o anumită platformă hardware și instrucțiunile de mașină utilizate pe aceasta. Un program de limbă de nivel înalt poate fi executat (cel puțin în teorie, în practică există de obicei o serie de versiuni specifice sau dialecte de implementare a limbajului) pe orice computer pe care pentru această limbă există un traducător (un instrument care traduce programul în limba mașinii, după care pot fi executate de către procesor).
Versiunile actualizate ale limbilor enumerate mai au circulație în dezvoltarea software-ului, iar fiecare dintre ele a avut o anumită influență asupra dezvoltării ulterioare a limbajelor de programare [4]. În același timp, la sfârșitul anilor 1950, a apărut Algol. a servit și ca bază pentru o serie de evoluții ulterioare în acest domeniu. Trebuie remarcat faptul că formatul și aplicarea limbajelor de programare timpurii a fost puternic influențată de constrângerile de interfață [5].
Perfecțiunea [citare necesară]
În perioada 1960 - 1970 a fost dezvoltat paradigma de bază de limbaje de programare utilizate în prezent, cu toate că multe aspecte ale acestui proces este doar ideile și conceptele de îmbunătățire a întruchipat mai mult în primele limbi ale a treia generație.
- Limba APL a influențat programarea funcțională și a devenit prima limbă care sprijină procesarea matricelor [6].
- Limba PL / 1 (NPL) a fost dezvoltată în anii 1960 ca uniune a celor mai bune trăsături ale Fortran și Kobol.
- Limba lui Simul. care a apărut în acest moment, a inclus, pentru prima dată, suport pentru programarea orientată pe obiecte. La mijlocul anilor 1970, un grup de specialiști a introdus Smalltalk. care era deja complet orientat spre obiect.
- În perioada 1969 - 1973 sa desfășurat dezvoltarea limbajului C. populară în această zi [7] și a devenit baza multor limbi ulterioare, de exemplu, la fel de popular ca și C ++ și Java.
- În 1972, Prolog a fost creat - cel mai cunoscut (deși nu primul, și nu singurul) limbaj de programare logică.
- În 1973, ML a extins sistemul extensiv de tiparire polimorfă. începutul limbilor tipizate ale programării funcționale.
Fiecare dintre aceste limbi a dat naștere unei familii descendente, iar cele mai multe limbi moderne de programare se bazează, în cele din urmă, pe una dintre ele.
În plus, în anii 1960 și 1970, litigiile au fost dezbătute în mod activ cu privire la necesitatea de a susține programarea structurală în anumite limbi [8]. În special, expertul olandez E. Dijkstra a apărut în presă cu propuneri de a renunța complet la utilizarea instrucțiunilor GOTO în toate limbile de nivel înalt. Dezvoltarea metodelor care vizează reducerea volumului programelor și creșterea productivității programatorului și a utilizatorului.
Unificarea și dezvoltarea [edit]
În anii 1980 a apărut o perioadă, care poate fi numită în mod condiționat timpul de consolidare. Limba C ++ combină caracteristicile orientării obiectuale și programării sistemului, guvernul american a standardizat limba Iadului. Derivat din Pascal și destinate utilizării în instalații militare la bord sisteme de control, în Japonia și alte țări au investit masiv în studiul perspectivele de așa-numitele limbi a cincea generație, care ar include o constructe de programare logică [9]. Comunitatea limbilor funcționale a adoptat ML și Lisp ca standard. În general, această perioadă a fost caracterizată de dependența de fundația stabilită în deceniul precedent, mai degrabă de dezvoltarea unor noi paradigme.
O tendință importantă, observată în dezvoltarea limbajelor de programare pentru sistemele de mari dimensiuni, a fost accentul pus pe utilizarea modulelor - unități voluminoase de organizare a codurilor. Deși anumite limbi, cum ar fi PL / 1, au susținut deja funcționalitatea corespunzătoare, sistemul modular a fost reflectat și aplicat și în limbile Modula-2. Oberon. Ada și ML. Adesea, sistemele modulare sunt combinate cu construcții generale de programare [10].
O direcție importantă de lucru este limba vizuală (grafică) de programare. în care procesul de "scriere" a unui program ca text este înlocuit de un proces de "desenare" (construirea unui program sub forma unei diagrame) pe un ecran de computer. Limbile vizuale oferă vizibilitate și o mai bună percepție a logicii programului de către om.
În prezent, dezvoltarea limbajelor de programare merge în direcția îmbunătățirii securității și fiabilității, creând noi forme de organizare a codurilor modulare și integrare cu bazele de date.
Standardizarea limbajelor de programare [edit]
Pentru multe limbi de programare utilizate pe scară largă, au fost create standarde internaționale. Organizațiile speciale actualizează și publică periodic specificațiile și definițiile formale ale limbii relevante. În cadrul acestor comitete, dezvoltarea și modernizarea limbajelor de programare continuă și se abordează chestiunile legate de extinderea sau sprijinirea construcțiilor lingvistice existente și noi.
Tipuri de date [edit]
Calculatoarele digitale moderne sunt binare, iar datele sunt stocate în cod binar (deși implementările sunt posibile în alte sisteme numerice). Aceste date reflectă de obicei informații din lumea reală (nume, conturi bancare, măsurători etc.) reprezentând concepte de nivel înalt.
Un sistem special prin care datele sunt organizate în program este un sistem de tipuri de limbaj de programare; Dezvoltarea și studiul sistemelor de tip este cunoscută ca teoria tipului. Limbile pot fi împărțite în cele cu tastare statică și tastare dinamică. precum și a limbilor ungure (de exemplu, Forth).
Structuri de date [editați]
Sistemele de tip în limbi de nivel înalt vă permit să definiți tipuri complexe, compuse, așa-numitele structuri de date. De regulă, tipurile de date structurale sunt formate ca un produs cartezian de tipuri de bază (atomice) și tipuri compuse definite anterior.
Structurile de date de bază (liste, cozi, tabele hash, copaci binari și perechi) sunt adesea reprezentate de construcții sintactice speciale în limbi de nivel înalt. Aceste date sunt structurate automat.
Semantica limbajelor de programare [edit]
Există mai multe abordări pentru a determina semantica limbajelor de programare.
Cele mai răspândite soiuri ale următoarelor trei: operaționale, derivative (axiomatice) și denotaționale (matematice).
- În descrierea semanticii în cadrul abordării operaționale, executarea construcțiilor de limbaj de programare este interpretată, de obicei, cu ajutorul unui calculator imaginar (abstract).
- Semantica axiomatică descrie consecințele construirii limbajului de execuție folosind limbajul logic și pre- și postcondițiile.
- Semantica dentară funcționează cu concepte tipice ale matematicii - setul, corespondența, precum și judecăți, declarații etc.
Paradigma programării [editați]
Limba de programare este construită în conformitate cu unul sau alt model de bază de calcul și paradigma de programare.
Metode de implementare a limbilor [editați]
Programul este un limbaj compilat cu ajutorul compilator (programul special) este convertit (compilat) în cod mașină (set de instrucțiuni) pentru acest tip de procesor și apoi merge într-un modul executabil. care poate fi rulat pentru a fi executat ca un program separat. Cu alte cuvinte, compilatorul traduce codul sursă al programului de la limbajul de programare la nivel înalt la codurile binare ale instrucțiunilor procesorului.
Dacă programul este scris într-o limbă interpretată, atunci interpretul execută direct (interpretează) textul sursă fără traducerea anterioară. Programul rămâne în limba originală și nu poate fi pornit fără un interpret. Procesorul calculatorului, în acest sens, poate fi numit un interpret pentru codul mașinii.
Separarea în limbi compilate și interpretate este condiționată. Deci, pentru orice limbă tradusă în mod tradițional, cum ar fi, de exemplu, Pascal. puteți scrie un interpret. În plus, majoritatea interpreților moderni "curați" nu execută direct construcțiile de limbaj, ci compilarea acestora într-o reprezentare intermediară la nivel înalt (de exemplu, cu dereferențe variabile și expansiune macro).
Pentru orice limbă interpretată, puteți crea un compilator - de exemplu, limba Lisp, interpretată inițial, poate fi compilată fără restricții. Codul creat în timpul executării programului poate fi, de asemenea, compilat dinamic în timpul execuției.
De regulă, programele compilate rulează mai repede și nu necesită programe suplimentare de execuție, deoarece au fost deja traduse în limba mașinii. În același timp, de fiecare dată când modificați textul programului, trebuie să îl recompilați, ceea ce încetinește procesul de dezvoltare. În plus, programul compilat poate fi executat numai pe același tip de computere și, de regulă, în același sistem de operare la care a fost proiectat compilatorul. Pentru a crea un executabil pentru un alt tip de mașină, este necesară o nouă compilare.
Limbile interpretate au anumite capacități suplimentare specifice (a se vedea mai sus), în plus, programele pot fi difuzate imediat după schimbare, ceea ce facilitează dezvoltarea. Un program într-o limbă interpretată poate fi adesea rulat pe diferite tipuri de mașini și sisteme de operare fără efort suplimentar.
Cu toate acestea, programele interpretate sunt executate mult mai lent decât programele compilate, în plus, acestea nu pot fi executate fără un program de interpret.
Unele limbi, de exemplu, Java și C #. sunt compilate și interpretate. Și anume, programul nu este compilat într-un limbaj mașină, și independent de masina de cod de nivel scăzut pentru a bytecode. În continuare, bytecode este executat de mașina virtuală. Pentru a executa interpretarea bytecode este utilizat în mod obișnuit, deși părți din ea pentru a accelera programul de lucru poate fi tradus în cod mașină la programul de tehnologie de rulare de compilare „on the fly» (Just-in-time de compilare, JIT). Pentru cod Java byte executa Java (Java Virtual Machine, JVM) mașină virtuală pentru C # - Common Language Runtime.
O astfel de abordare într-un anumit sens permite utilizarea avantajelor interpreților și ale compilatorilor. Trebuie menționat faptul că există limbi care au atât un interpret cât și un compilator (Fort).
Limbi de programare de nivel scăzut [editați]
Primele calculatoare trebuiau programate cu coduri binare ale mașinilor. Totuși, programarea în acest mod este o sarcină destul de laborioasă și dificilă. Pentru a simplifica această sarcină, au început să apară limbi de programare de nivel scăzut, ceea ce ne-a permis să specificăm instrucțiunile mașinii într-o formă ușor de citit de om. Pentru a le converti în cod binar, au fost create programe speciale - traducători.
limbaje de nivel scăzut, de obicei utilizate pentru scrierea mici programe software, drivere de dispozitiv, module comune cu echipamente non-standard, programarea microprocesoare specializate, care sunt cele mai importante cerințe ale compactitate, performanță și acces direct la resursele hardware.
Limbi de programare la nivel înalt [editați]
Caracteristicile arhitecturilor specifice ale computerului nu sunt luate în considerare în ele, prin urmare, aplicațiile create sunt ușor de transferat de la calculator la computer. În majoritatea cazurilor, pur și simplu recompilarea programului pentru o anumită arhitectură de calculator și sistem de operare. Dezvoltarea programelor în aceste limbi este mult mai ușoară, iar erorile sunt mai puțin permise. Reduce în mod semnificativ durata de dezvoltare a programului, ceea ce este deosebit de important atunci când lucrați la proiecte de software mari.
Dezavantajul unor limbi de nivel înalt este dimensiunea mare a programelor în comparație cu programele din limbile de nivel scăzut. Pe de altă parte, pentru programele complexe din punct de vedere algoritmic și structural, atunci când se folosește o supercompilare, avantajul poate fi de partea limbilor de nivel înalt. Textul programelor într-un limbaj de nivel înalt este mai mic, dar dacă este luat în bytes, atunci codul inițial scris în asamblare va fi mai compact. Prin urmare, majoritatea limbilor de nivel înalt sunt folosite pentru a dezvolta software pentru computere și dispozitive care au o cantitate mare de memorie. Și diferite subspecii ale asamblorului sunt folosite pentru programarea altor dispozitive, unde dimensiunea programului este critică.
Simbolurile folosite [editați]
Limbile de programare moderne sunt concepute să utilizeze ASCII. adică disponibilitatea tuturor caracterelor grafice ASCII este o condiție necesară și suficientă pentru înregistrarea oricăror construcții de limbi. Caracterele de control ASCII sunt utilizate într-un mod limitat: retururile caroseriei CR, fluxurile liniei LF și filele orizontale HT (uneori și filele VT verticale și accesarea următoarei pagini FF).
Limbajele timpurii care au apărut în vârsta de caractere 6 biți. a folosit un set mai limitat. De exemplu, Fortran alfabet include 49 de caractere (inclusiv spațiul): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / (). $ '.
O excepție notabilă este limba APL. care folosește o mulțime de personaje speciale.
Limbi de programare bazate pe matematică [editați]
Exemple de limbi bazate pe matematică și modelele matematice pe care le comportă:
Prezența unei justificări matematice pentru limbă poate garanta (sau cel puțin promite cu o foarte mare probabilitate) unele sau toate din următoarele proprietăți pozitive:
Trebuie avut în vedere faptul că limbile moștenite de la „moștenit de la matematică“ nu trebuie neapărat aceste proprietăți. De exemplu, limbajul Python combină mai multe modele menționate, dar combinarea lor, nu există nici o justificare, prin urmare, aceasta nu poate fi considerată „Moștenire de la matematică,“ și, în consecință, este inerentă doar ultimul dintre aceste proprietăți.
Vezi și [editați]
Note [editați]
Există o limită fundamentală a complexității oricărui sistem software pentru el, acea componentă nu va fi înțeleasă pe deplin. Va fi extrem de dificil să faceți îmbunătățiri sau bug-uri și fiecare fișier ar putea introduce alte erori datorită acestei cunoștințe incomplete.