Primerjava programskih jezikov
C proti C++: kjer je črta še vedno pomembna
C in C++ sta videti zamenljiva na oglasnih deskah in se v praksi obnašata drugače. C je prenosni prepis stroja: majhni izvajalni časi, stabilni ABI-ji in jezik, ki ga govori vsak operacijski sistem in jedro tolmača, ki ga plača ozka standardna knjižnica in pomnilniška disciplina, ki je v celoti na vas. C++ dodaja abstrakcije, kot so RAII, predloge in STL, ki vam omogočajo gradnjo velikih sistemov, ne da bi puščali vsepovsod, plačano s časom prevajanja, napakami predlog in širjenjem funkcij. Vrstica za shranjevanje: jedra, gonilniki, vdelana vdelana programska oprema in meje knjižnice ostanejo C; aplikacije, namizna programska oprema in motorji za igre gredo v C++.
Ključne točke
- Standardna knjižnica C, ki se prilega vaši glavi, ni prekletstvo za vgrajene: orodna veriga za nov mikrokrmilnik najprej govori C, pogosto izključno.
- C++ RAII nadomešča celotne razrede hroščev: destruktorji v kombinaciji s pridobivanjem virov spremenijo ročno brezplačno kodo v kodo samo za nastavitev.
- Ohranite meje ABI C: vsaka dinamična knjižnica, ki se priključi na skriptni jezik, jedro ali porazdeljeno binarno datoteko, izvozi vmesnik v obliki črke C.
- Sodobni C++ (po-11) je drugačen jezik: pametni kazalci, semantika premikanja in STL odgovarja na večino pritožb glede C z razredi.
- Obema je skupno nedefinirano vedenje in prevladuje posmrtno v resničnih sistemih veliko bolj, kot kažejo razprave o značilnostih.
- Okusi, osredotočeni na varnost, obstajajo, ker certificiranje zahteva pravila: MISRA C in AUTOSAR C++ sta oblika tega povpraševanja, ne običaja.
- Stroustrupova filozofija je "ne plačaš za tisto, česar ne uporabljaš"; ukrep, preden to trditev zavrne v katero koli smer.
- Zaposlovanje se jasno razdeli: mize C++ se združujejo v skupine za finance, igre na srečo in HPC; C mize v vdelanem, jedrnem prostoru in sistemskem orodju. Izberite glede na svojo panogo.
Terenska beležka
Mejo C/C++ v naši trgovini je določila knjižnica, ne filozofija: vsaka meja vtičnika in razširitev Python, ki smo ju napisali, je najprej izvozila ravni C ABI in to pravilo je odpravilo deset računov trpljenja.
Pogosta vprašanja
Je C++ samo C z dodatnimi funkcijami?
Ne: C++ prevede večino kode C, vendar je ločen jezik s svojo semantiko in idiomatski C++ ustvari drugačne strojne oblike kot idiomatski C.
Ali naj sistemski projekt uporablja 'C, brez razredov' znotraj C++?
Včasih; če pa imate orodno verigo C++, prevedite v C in ohranite mejo pošteno, namesto da stavite na narečje, ne na teste skupnosti.
Kateri ima boljšo zgodbo o varnosti spomina?
Nobeden ne dobavlja izvirno, zato ima Rust svojo primerjavo. Sodobni C++ blaži z RAII in čistilci; C se opira na disciplino in orodje (valgrind, UBSan).
Kaj pravzaprav odloča med njima?
Ekosistem, s katerim se morate povezati, in ekipa, ki jo lahko najamete: vdelana programska oprema in sosednja koda jedra ostane C; velike aplikacije s kompleksnimi domenami gredo v C++.
Kako Kinetikatech pomaga s primerjava programskih jezikov
Po pravici, večinoma ekipe pridejo k nam, ko najprej poskusijo lastno: Jeziki za sistemsko delo, skriptiranje in storitve v primerjavi s tem, kaj je dejansko pomembno pri proizvodnji: varnostna jamstva, surova hitrost, koga lahko najamete in kako boleče je uvajanje in popravljanje posledičnih storitev. Naša storitev Upravljanje strežnikov in Vzdrževanje spletnega mesta obstaja, da se ne morete naučiti primerjava programskih jezikov na lastno kožo; mi se skrbimo za nastavitev, nadzor in nočne presenečenja ob 3. uri.