Conţinut
- Originile limbajelor de programare
- Tipuri de programe de codificare
- criterii de comparație. Principiul
- Expresivitate ridicată
- Aspecte pentru dezvoltatori
- Tipuri și structuri de date
- Niveluri de modularitate și ambalare
- Accesul la sisteme de baze de date
- Compararea performanțelor limbajelor de programare
- Comunalitate și standardizare
- Evoluție și modernizări
- Sprijinirea bibliotecilor
- Cele mai bune limbaje de programare 2018. Interactiv
Limbajele de programare sunt utilizate de către programatori pentru a scrie seturi de instrucțiuni specifice pentru microprocesoare pentru a îndeplini sarcini specifice. Există mai multe tipuri de limbi. Motorul, creat de pionierul în domeniul calculatoarelor, Charles Babbage, a fost precursor al modernului personal calculatoare sau mai precis Logică PC. Pentru ca un dezvoltator să aleagă instrucțiunile corecte pentru scrierea unui program, o comparație corectă a limbajelor de programare. Acest articol este despre asta!
Originile limbajelor de programare

În 1942 a luat naștere limbajul ENIAC, când ideea de computer a cuprins lumea științifică. Era un monstru de 30 de tone care conținea peste 20.000 de tuburi cu vid și ocupa 167 de metri pătrați de spațiu. Programarea a fost la fel de greoaie. După ce calculul a fost făcut, a durat săptămâni întregi pentru a descifra ENIAC, procesul de recuperare a datelor de pe hard disk nu a existat deloc. "Cifru" A existat doar unul singur, așa că nu era necesară compararea limbajelor de programare.
În 1945, Dr. John von Neumann, lucrând la îmbunătățirea acestuia, a descoperit că adăugarea și salvarea codului convertorului la programare reducea semnificativ timpul de procesare, așa că s-a născut o nouă direcție de EDVAC, care înseamnă Electronic Discrete Variable Automatic Computer (Calculator automat electronic cu variabile discrete). Spre deosebire de ENIAC, EDVAC a folosit codul binar în loc de codul zecimal - o serie de zerouri și unu pe cartele perforate introduse în mașină. Codul zecimal a fost prima generație, codul binar a doua. Dezvoltatorii au avut acum o baza pentru compararea limbajelor de programare. În plus față de o selecție de...
În curând a fost dezvoltat primul limbaj de programare elementar. Codul scurt de transmisie cu control condiționat a fost inventat în 1949. Spre deosebire de codul mașină, codul scurt folosea operatori logici precum "if", "then" pentru a defini o comandă care era similară cu declarațiile logice ale matematicii, de exemplu dacă roșu este "THEN stop" sau "IF 0", înmulțește cu doi.
"Compilatorul" s-a născut în 1952. FORTRAN a fost primul din cea de-a treia generație de limbaje de programare, creat în 1957, urmat de LISP, Algol în 1958 și COBOL în 1959. Limbajele de programare de generația a treia foloseau cuvinte sau sintaxe englezești reale pentru ca compilatoarele să le traducă în cod binar sau de mașină. Ceea ce a fost destul de la îndemână. Comparația dintre limbajele de programare în această perioadă era în favoarea Algol sau COBOL, în funcție de puterea tehnică a mașinii.
Algol sau "cifru" algoritmii au cedat locul la BNF Pascal în 1968. Fiecare calcul putea avea loc doar cu o anumită secvență de cod sau funcție. Limbajele ulterioare au îmbunătățit eficiența codificării programelor prin utilizarea programare orientată pe obiecte, precum și metodele și sintaxa de scripting, creând widget-uri C+, Perl și Java Visual Basic foarte bine structurate. Acum au fost mai multe "Cifre". În această perioadă, dezvoltatorii au dezvoltat multe criterii de comparare a limbajelor de programare.
Tipuri de programe de codificare

Există trei tipuri de limbaje clar diferențiate: limbaje mașină, limbaje de nivel scăzut și limbaje de nivel înalt.
Atribuții de limbaj software:
- Limbajul mașinii pe care calculatorul îl înțelege direct prin aplicarea codului binar, adică 0 și 1.
- Limbajele de nivel scăzut sunt mult mai ușor de utilizat decât limbajele mașină, dar se bazează în mare parte pe limbajul mașină al calculatoarelor.
- Limbajele de programare de nivel înalt sunt mai ușor de învățat, deoarece aplică cuvinte sau comenzi dintr-o limbă naturală, de obicei engleza, de exemplu, cel mai cunoscut BASIC.
Tipurile de limbaje de nivel înalt, în funcție de punctul de vedere al funcționării programelor și de filozofia creării lor, se împart în
- Imperative, Cobol, Pascal, C și Ada.
- Declarativ, Lisp și Prolog.
- Orientată pe obiecte, Smalltalk și C ++.
- Orientat spre probleme, specific limbi pentru Control.
- Limbaj de programare naturală, noi tipuri care încearcă să aducă proiectarea și construcția mai aproape de un limbaj uman. Fă-o simplu.
O altă clasificare de nivel înalt ia în considerare dezvoltarea computerelor și este folosită ca un criteriu pentru compararea limbajelor de programare:
- Prima generație - mașină și asamblor.
- A doua generație - primele limbaje de programare imperative FORTRAN, COBOL.
- A treia generație - acestea sunt limbaje de programare foarte imperative, dar mult mai utilizate și relevante în prezent: ALGOL 8, PL/I, PASCAL, MODULA.
- A patra generație - în aplicațiile de gestionare a bazelor de date: NATURAL, SQL.
- A cincea generație - pentru Inteligența artificială și aplicații de procesare a limbajului natural: LISP, PROLOG.
criterii de comparație. Principiul

Compararea limbajelor de programare web nu a fost niciodată o sarcină ușoară sau obiectivă. De obicei, se iau în considerare zece criterii de evaluare.
Lista de criterii:
- Expresivitate - simplitatea limbajului de exprimare a algoritmilor.
- Definiție precisă - coerență și lipsă de ambiguitate.
- Tipuri și structuri de date.
- Modularitate - capacitatea de a dezvolta componente în mod independent.
- Facilități I/O - sprijină interacțiunea cu mediu.
- Tolerabilitate.
- Eficiență și performanță pentru a compara performanța limbajelor de programare.
- Pedagogie - ușurința de a învăța și de a preda.
- Caracterul comun - aplicabilitate, utilizare.
- Standardizare.
Această listă este utilizată pentru comparație într-un spectru foarte larg, de la LISP la COBOL, trecând prin ALGOL și servește ca punct de plecare pentru.
Expresivitate ridicată

C a fost întotdeauna foarte expresiv și potențial foarte economic, având în vedere numărul redus de cuvinte cheie și puterea unor operatori. Cu toate acestea, există acum o nevoie de a sprijini structuri mai complexe, unde Implementarea C devine nesigură.
Compararea sintaxei limbajelor de programare este importantă pentru dezvoltatori. De exemplu, C ++ oferă un salt calitativ față de C, oferind noi funcții utile în diferite contexte. De exemplu, supraîncărcarea operatorilor adaugă o mare expresivitate implementării aplicațiilor științifice și matematice; sintaxa claselor și a obiectelor permite manipularea ușoară a diferitelor structuri de date și operații. Șabloanele pot fi considerate ca fiind macros de precompilare, dar cu mult mai multe funcționalități. Dar toate acestea nu sunt scutite de bug-uri cauzate în principal de menținerea compatibilității cu C în fazele de conectare și execuție.
În cele din urmă, C ++ este mai expresiv decât C pentru aplicații medii și mari, ceea ce este de așteptat, deoarece a fost conceput pentru a acoperi mai multe probleme cu "paradigme multiple". Comparație între limbajele de programare C și Java Delphi.

La rândul său, acesta din urmă folosește o sintaxă foarte asemănătoare cu C ++, deși exclude unele dintre caracteristicile sale mai întunecate. În special, eliminarea indicatorilor nu a făcut-o mai expresivă, dar este mult mai sigură.
Aspecte pentru dezvoltatori

Limbajul C a fost mult timp considerat un bun exemplu de limbaj coerent și lipsit de ambiguitate, în special printre contemporani. Creatorii recunosc anumite neajunsuri în notație. Principala problemă este reprezentată de numărul mare de aspecte oferite dezvoltatorului, printre care se remarcă dimensiunea și tipurile de date. De exemplu, în compilatoarele pentru PC din anii 1980, gama de tipuri "int" a fost cuprinsă între -32768 și 32767, ceea ce a fost o reflectare clară a procesoarelor pe 16 biți. Acum se obișnuiește să se ia 32 de biți pentru numere întregi, astfel încât intervalul variază adesea între -2147483648 și 2147483647. Acest lucru creează, evident, probleme serioase cu portabilitatea limbajului.
Aceste defecte, din păcate, sunt complet moștenite de C ++ și nu există o soluție clară pentru ele astăzi. Limbajul Java, a fost creat de la început pentru a elimina ambiguitățile și dependențele implementatorului și a claselor sale auxiliare, astfel încât este în prezent cel mai bun dintre limbajele populare.
Tipuri și structuri de date
Limbajul C oferă mecanisme care sunt considerate în prezent rudimentare pentru tipurile de date structurate. Array-urile permit specificarea colecțiilor omogene de lungime fixă în momentul compilării și sunt foarte strâns legate de manipularea pointerilor. Un dezavantaj notabil este lipsa tipurilor de date pentru reprezentarea șirurilor de caractere, care sunt în mod neobișnuit acceptate de matricele de caractere.
În timp ce acest "minimalism" ajută la îmbunătățirea performanțelor în timpul execuției sau la optimizarea la compilare, în multe cazuri este nevoie de suport pentru tipuri mai complexe și operații conexe, cum ar fi vectori, liste, cozi și altele. În practică, există mai multe biblioteci care completează aceste aspecte, cum ar fi populara Glib, dar programarea ei este mai laborioasă deoarece nu este integrată în limbaj. Exemplul următor ilustrează crearea unui vector pentru un tablou dinamic.

În general, un programator ar trebui să evite aceste tipuri de implementări "de la zero". Următorul exemplu rezolvă aceeași problemă folosind biblioteca Glib.

La rândul său, C ++ oferă mijloacele de a crea structuri de date foarte puternice, care sunt strâns integrate în limbaj. Dezvoltatorul poate crea, de asemenea, propriile tipuri cu diverse operații asociate.
Niveluri de modularitate și ambalare

Inițial, acest criteriu se referea la capacitatea de a dezvolta componente independente care să poată comunica în cele din urmă. În acest sens, limbajele vă permit să dezvoltați funcții, clase și pachete, fiecare cu propriile convenții.
În ceea ce privește "nivelurile de împachetare" ale componentelor, limbajul C oferă în practică doar două niveluri: componente vizibile într-un fișier de cod sursă și componente vizibile la nivel global, cum ar fi funcțiile și variabilele. În C ++, conceptele de "class" și "namespace" oferă două niveluri suplimentare de "împachetare", în timp ce în Java echivalentele corespund claselor și "pachetelor". Criteriul de mediu de intrare/ieșire definește capacitatea de a accesa fișiere secvențial, arbitrar și indexat, pe care o posedă. De asemenea, se face referire la accesarea sistemelor de baze de date.
Accesul la sisteme de baze de date
Pentru că C este și rămâne unul dintre cele mai populare utilizate pentru dezvoltarea de sisteme medii și mari, orice aplicație care oferă o interfață de programare permite accesul prin intermediul limbajului C. Acest lucru este practic justificat pentru toate bazele de date comerciale și necomerciale cele mai populare, la care C are acces liber, deși nu este cel mai convenabil.
La rândul său, un program scris în C ++ este de obicei capabil să utilizeze API-ul C. Multe sisteme de baze de date oferă o interfață îmbunătățită orientată pe obiecte, disponibilă în acest limbaj.
Creatorii Java, datorită experienței anterioare, au standardizat o interfață orientată pe obiecte pentru accesarea oricărei baze de date într-un mod portabil. Acest API se numește Java Database Connectivity și, datorită marii popularități a Java, aproape toți marii furnizori de baze de date au creat implementări ale acestei interfețe, care promovează portabilitatea în ceea ce privește accesibilitatea, menținând în același timp incompatibilitățile și extensiile SQL.
În acest sens, Java a introdus o abordare radicală, dar previzibilă a dezvoltării limbajului, aproape fără caracteristici dependente de implementator. Portabilitatea obținută este calitativ superioară, ceea ce este posibil Se obține cu ajutorul limbajului C/C ++ și se realizează automat de către orice dezvoltator. Deci, dacă este necesară o portabilitate maximă la "costuri reduse", alegerea este lăsată la latitudinea Java.
Compararea performanțelor limbajelor de programare

Acest aspect a fost întotdeauna de interes pentru dezvoltatori și este încă subiectul unor dezbateri aprinse. Este binecunoscut faptul că aproape toate computerele rulează programe prin intermediul uneia sau mai multor unități centrale de procesare (CPU), care conțin ceea ce se numește "limbaj de mașină" sau "cod de mașină", constând într-o serie de operații relativ de bază sau foarte "low-level". Cum ar fi scrierea de octeți în memorie, adăugarea de perechi de numere, citirea de octeți de la un dispozitiv extern etc.
Atunci când se vorbește de eficiență/performanță, se face referire în principal la compararea vitezei limbajelor de programare cu care programele sunt capabile să îndeplinească diverse sarcini. De asemenea, este necesar să se ia în considerare și resursele de sistem necesare pentru execuția sa.
Toate limbile trebuie "traduse" la un moment dat într-un "limbaj de mașină" pentru programe executabile. Simplificând, acest proces se numește "compilare", iar atât C cât și C+ urmează acest model de "compilare" într-un "limbaj de mașină" pe procesor. C, în special, are structuri de date foarte simple care sunt o traducere directă în "limbajul mașinii". În multe cazuri, această simplitate face ca un program să fie productiv.
Comunalitate și standardizare
În practică, C este de obicei folosit pentru a crea componente de bază sau de nivel scăzut, de exemplu, nucleul multor programe de sisteme de operare, în timp ce C ++ și Java au un domeniu de aplicare mult mai larg - aplicații comerciale de toate tipurile. Java, în mare parte datorită previziunii și publicității lui Sun și a diferiților furnizori de "servere de aplicații", este acum utilizat pe scară largă în contextul serverelor web, al servletelor și al JSP-urilor, adesea însoțit de o arhitectură pe mai multe niveluri.
C și C ++ sunt exemple bune de limbaje standardizate de succes, care contribuie la concurență deschisă între implementări, fără a sacrifica pentru portabilitate. Din păcate, nu există procese formale de certificare pentru acestea, iar mulți dezvoltatori ignoră pur și simplu anumite caracteristici, ceea ce creează dezavantaje evidente pentru programatorii care doresc să lucreze "la standard".
În parte din acest motiv, Sun a exclus inițial utilizarea unui mecanism similar de standardizare pentru Java (limbaj și biblioteci), dar între timp a cedat și urmărește acest lucru (Java Community Program.) În plus, Sun oferă teste de certificare exigente, astfel încât dezvoltatorii să poată dovedi și publica angajamentul lor față de standardele.
Evoluție și modernizări
C și "biblioteca standard C99" așteaptă încă o actualizare completă a implementării. GNU GCC include marea majoritate a caracteristicilor necesare și este unul dintre cele mai stabile limbaje disponibile.
C ++ își continuă drumul cu o nouă actualizare C ++ 0x axată pe dezvoltarea de biblioteci, inclusiv o API GUI.La rândul său, Java continuă într-un ritm accelerat să aducă adăugiri și îmbunătățiri bibliotecilor sale de bază, precum și limbajului de bază, cu scopul de a crea o platformă modernă și foarte funcțională platformă pentru diferite tipuri de aplicații.
Sprijinirea bibliotecilor
Având în vedere consecvența pe termen lung a aplicației, atât C cât și C ++ au o gamă extrem de largă de opțiuni de bibliotecă pentru diferite scopuri. În plus, marea majoritate a noilor sisteme oferă biblioteci care permit interacțiunea cu programe scrise în aceste limbaje.
Singurul aspect discutabil este faptul că foarte puține dintre ele sunt standardizate în același mod ca și limba. La rândul său, C ++ dispune de o bibliotecă mai extinsă, care include "biblioteca standard C", dar și faimoasa bibliotecă de șabloane "STL", care implementează diverse structuri de date într-un mod general și mulți algoritmi.
Java a avut încă de la început o politică bună de standardizare a multor biblioteci prin clase și interfețe pentru multe aspecte care nu au fost luate în considerare în C sau C+, cum ar fi GUI, accesul la baze de date, pagini web etc. Acest fapt nu exclude deloc utilizarea unor biblioteci terțe mai specializate. Contextul bibliotecilor standardizate din jurul Java este atât de larg încât "platforma Java" este prezentată ca un set de tehnologii concepute pentru diferite tipuri de aplicații.
Cele mai bune limbaje de programare 2018. Interactiv

O comparație a performanțelor limbajelor de programare 2018 este disponibilă online la Spectrum.ieee. Această aplicație determină popularitatea actuală a zeci de. Este posibil să le filtrați prin excluderea sectoarelor inutile. Evaluările sunt create prin compararea și combinarea a 12 indicatori din 10 surse. Anul acesta va fi folosită o sursă mai puțin, deoarece site-ul Dice a închis API-ul.

Setul de comparație implicit oferă ratingul curent IEEE Spectrum, dar există parametri predefiniți pentru cei care sunt mai interesați să aleagă ceva special și să își creeze propriul rating. Pentru a compara cu datele din anul precedent, faceți clic pe "Adaugă comparație" și apoi pe "Schimbă ratingul", ceea ce vă va permite să comparați datele din perioada 2014-2017. Această aplicație a fost dezvoltată inițial în colaborare cu jurnalistul de date IEEE Spectrum, Nick Diakopoulos.
Analiza Stack overflow compară datele IEEE Spectrum cu cele mai relevante "Cifre" 2018. Într-un grafic de comparație a limbajelor de programare, Python ocupă un loc de cinste. Dacă ne uităm la datele recente ale clasamentului, este clar că acesta este unul dintre cele mai versatile clasamente existente și poate fi folosit în multe domenii diferite. Mulți îl consideră un limbaj care servește aproape orice scop.