De ce B - bun, C

C limbaj de programare a fost creat cu un anumit scop: un limbaj de scriere a programelor portate, în timp ce cele mai eficiente din punct de vedere al performanței, comparabile cu asamblare (care se află pe toate platformele hardware, diferite). Ușor de programare în C - acest lucru este terțiară, într-adevăr nu este foarte convenabil. Efectuați numai acele acțiuni care programatorul prescrise în mod explicit - care este motivul pentru care siruri de caractere și matrice sunt implementate ca și stângace de stejar.

Dacă pui un astfel de obiectiv și de a scrie în conformitate cu standardul ANSI C, este posibil să se scrie un program C sau o bibliotecă portabil de funcții. Acest program poate fi compilat pe aproape orice tip de procesor - compilator C este peste tot. Și va funcționa. Exemple sunt nenumărate (zlib, libpng și așa mai departe).

Astfel, C - un limbaj de programare de nivel scăzut proiectat pentru crearea de programe și biblioteci portate funcții. Crearea ei a fost o adevărată revoluție, deoarece a permis programului să decupleze arhitectura procesorului particular, practic nimic nu se pierde în productivitate și performanță, în comparație cu asamblare.

Această nișă a luat pentru totdeauna și vor locui în ea pentru totdeauna. Nu are nici un sens să inventeze altceva.

Inițial, limbajul C si sisteme Unix creatorii presupune că orice alte limbi care sunt mai convenabile pentru programatori (fiecare limbă cu specializarea sa). Pentru fiecare astfel de limbaj este scris în compilator C (nu compilator), care se traduce codul sursă cu limba din nou în C, mai degrabă decât codul executabil. Și acest intermediar C-text este tradus compilator C într-un fișier executabil binar. Aceasta a fost filozofia sistemului original Unix: toate programele sunt portabile și toate limbile sunt construite pe limba de bază C.

Uluchshayzer Bjarne Stroustrup și C ++

Acum, folosind faptul că mulți oameni cunosc limba de C, Bjarne Stroustrup cineva a decis că „upgrade“: el blocat caracteristici suplimentare (cea mai mare parte foarte prost - cum ar fi supraîncărcarea operatorii standard) și a adăugat „obiect-orientat“. Ei bine, ca „orientat-obiect“ - o conversație separată, cât și în ansamblu a primit următoarele: în limba introdus mecanisme implicite ascunse care nu funcționează la fel pe platforme diferite, program de portabil pentru a scrie nu este posibil, și în același timp limba nepotrivită pentru o programare de nivel înalt ca Xi. Compilatoare C ++ este mult mai complicat decât compilator C, și nu este peste tot. Practic, este folosit C ++, deoarece sub ea pentru a scrie o bibliotecă de clasă (de obicei, legat de un sistem de platformă și de operare specifice).

Cu toate acestea, C ++ este folosit și scrie pe ea programul. Ei bine, doar un om se obișnuiește cu totul.

DINRUS - o versiune rusă a limbajului de programare D. În momentul de față, limba este încă în dezvoltare - a fost în curs de dezvoltare Dinrus.Base.dll rantaymnoy bibliotecă principală
Descrie beneficiile pentru Dee C ++ nu vor - acestea sunt foarte mari.
În ceea ce privește DINRUS, eu personal implicat în dezvoltarea ei și-ar dori să găsească colegi în acest caz.
C incluse aici, de asemenea, ca parte integrantă.
Aici sunt o serie de funcții în DINRUS sishnyh:

scopuri PROWESS (în fimya tkst);
alias elimina pricepere;

redenumiți scopuri (în tkst a, în tkst c);
alias redenumiți redenumiți;

Huff vremfl ();
alias vremfl tmpfile;

timpul tkst (tkst s);
timp alias tmpnam;

scopuri zakroyfl (flux huff);
alias zakroyfl fclose;

scopuri sleyfl (flux huff);
fflush sleyfl alias;

Huff otkroyfl (în fimya tkst, în modul tkst);
alias otkroyfl fopen;

Huff pereotkroyfl (în fimya tkst, în fluxul Huff modul tkst);
alias pereotkroyfl freopen;

ustbuf procente (huff flux tkst buf);
alias ustbuf setbuf;

scopuri ustvbuf (huff puf tkst flux, pentru modul în scopuri dimensiune t_mera);
alias ustvbuf setvbuf;

vfvyvodf scopuri (flux Huff, în format tkst spis_va Arg);
alias vfvyvodf vfprintf;

vfskanf scopuri (flux Huff, în format tkst spis_va Arg);
alias vfskanf vfscanf;

vsvyvodf scopuri (tkst s, în format tkst spis_va Arg);
alias vsvyvodf vsprintf;

vsskanf scopuri (în tkst s, în format tkst spis_va Arg);
alias vsskanf vsscanf;

vvyvodf scopuri (în format tkst spis_va Arg);
alias vvyvodf vprinf;

vskanf scopuri (în format tkst spis_va Arg);
alias vskanf vscanf;

scopuri berisfl (flux huff);
alias berisfl fgetc;

vstavsfl scopuri (pentru c, flux huff);
alias vstavsfl fputc;

daytfl tkst (tkst s, intacte n, fluxul Huff);
fgets alias daytfl;

vstavtfl scopuri (în tkst s, flux huff);
alias vstavtfl fputs;

tkst Dite (tkst s);
alias Dite devine;

Alimentați scopurile (în tkst s);
Încărcați alias Sunt puse;

scopuri otdays (în scopuri c, flux huff);
otdays alias ungetc;

t_mera chitayfl (yk Ghid-, t_mera dimensiune t_mera nmemb, fluxul Huff);
fread chitayfl alias;

t_mera pishifl (în ghid-yk, nmemb dimensiune t_mera t_mera, fluxul Huff);
alias pishifl fwrite;

scopuri daypozfl (scopuri de curgere Huff * cheie);
fgetpos alias daypozfl;

scopuri ustpozfl (fluxul Huff, în cheie * intacte);
alias ustpozfl fsetpos;

>> cele mai eficiente din punct de vedere al performanței

Performanța este determinată de punerea în aplicare a compilator / optimizare a conversiilor, și bibliotecile standard. Prin ea însăși, limba nu poate fi rapid sau de frânare.


>> Dacă pui un astfel de obiectiv și de a scrie în conformitate cu standardul ANSI C, este posibil să se scrie un program C sau o bibliotecă portabil de funcții.

Argumentul e de rahat. Standard ANSI C este prea mic, și chiar I / O rețea nu implică o. Ce fel de portabilitate ea? Pentru utilități grep / nivel echo / pisica? Deoarece nu există nici o aplicație grafică în ANSI C pentru a scrie, nu va funcționa. Cross-platform în biblioteci de tip qt / gtk se realizează prin furnizarea de cod diferite arhitecturi diferite. Nu există nici un motiv pentru care același lucru se poate face în C ++.

zlib și libpng exemple rele, așa cum sunt biblioteca auxiliare, pe care sistemul este necesar, cu excepția cazului în alocarea de memorie sau fișierul I / O - ar trebui să fie în orice bibliotecă standard orice limbaj de programare. În caz contrar, algoritmi de a le face pur.


>> compilatoare C ++ sunt mult mai complicate decât compilator C, și nu este peste tot.

Compilatoare movilă și sub foarte diferite. Același CCG poate fi ușor adaptată pentru arhitectura dorită. Explicați principiul de funcționare - la cod C ++ este tradus în prima arhitectura țintă de asamblare, după care acesta „cusute“ cod dependente de sistem de operare (cum ar fi la inițializare pornire, etc.), atunci toate link-urile în formatul executabil dorit, împreună cu biblioteci standard de portate.


>> Practic, C ++ este folosit, deoarece sub ea pentru a scrie o bibliotecă de clasă (de obicei legată de o anumită platformă și sistemul de operare).

Dintr-o dată, pentru utilizarea C ++ biblioteci nu sunt în mod necesar să scrie în C ++. Este suficient pentru a scrie clase de acoperire în procedeul C. Începuturile OEP se află în biblioteca Glib (a nu se confunda cu glibc), care este utilizat în proiecte în C.

Eu nu am citit astfel de prostii. Până în prezent, cel mai bun limbaj de programare C ++, în opinia mea. Și C este în mod natural prea. ca parte componentă. Singurul-limbajul necesită profesionalism, avantajele sale sunt mult mai mari decât media la nivelul de pregătire al dezvoltatorului.

Repost gros multi-ani lung criticat holivara fault la clasa a opta. Nu mai proaspăt?

rahat

articole similare