( TCH | 2021. 03. 22., h – 22:06 )

Megengedő, és emiatt rossz :).

Ez nézőpont kérdése. :)

Ha a performance meg tud maradni, a low level is meg tud maradni, akkor mi a baj azzal, hogy esetleg még védelmi mechanizmust is kapsz?

Az, hogy nem marad meg a teljesítmény. A szükséges védelmi mechanizmusok bonyolultságától függően csökkenni fog. C-ben meg egy if lekezelni egy hibát.

A C++ le tudja kezelni a memóriahiányt is, ilyenkor dob egy exceptiont.

Amit le kell kezelni. Elmondanád, hogy miért szar a C egy if-ből álló nullpointer checkje és miért jó a C++ try/catch szerkezete, ami belül valójában egy if/elseif/elseif/stb.? A múltkor az xp-forrásos topicban kaptam az ívet, hogy le merem ellenőrizni a nullptr-t C-ben, hogy ez mekkora pazarlás, ugyanakkor meg C++-ban valid az exception-ök elkapása?

De, ha valami kritikus rendszert csinálsz, akkor felkészülhetsz ennek a lekezelésére, pl. a progi elején lefoglalod azokat az erőforrásokat, amik kellenek az out_of_memory-nak a kezeléséhez, és akkor ki tudsz lépni szépen.

Ezt nem lehet minden esetben eljátszani, pl. GUI programozáskor garantáltan nem.

De amúgy alapesetben nem gondolom, hogy ezzel bárki is foglalkozik.

Szerintem se nagyon törődnek vele és ez is egy potenciális sérülékenység lehet, ha elfogy a memória és utána mennek tovább.

Az alap beállítású Linux alatt tutira nem, mert ugye a linux szeret több memóriát adni neked, mint amennyi van, szóval out_of_memory helyett OOM lesz, nem igazán szokott a malloc/new null-lal visszatérni alap linuxon.

Én nem csak Linuxra fejlesztek, hanem BSD-kre, Solarisra, retrocomputerekre, underground OS-ekre...a Linux-specifikus malloc() viselkedést én nem vehetem alapnak.

Ok, akkor miről vitatkozunk? :)

Arról, hogy a C nem szar. :P Ez egy eszköz, amivel tudni kell bánni.

De mondjuk az az érv, hogy "ugyse használok semmit a C++ feature-eiből, ezért jó a C is", szerintem nem állja meg a helyét. Nem mindegy, hogy melyik compilert hívod meg? És ha mégis kell valami C++ feature, akkor meg ott van.

Én nem ezt mondtam, hanem azt, hogy ha nem használsz semmit a C++ cuccaiból, akkor C kódot írtál. De, tök mindegy, hogy melyik compilert hívtad meg, főleg, mivel a mainstream C compilerek nagy része már rég C++ compiler is. A lényeg, hogy hiába forgattad le C++ compilerrel azt a kódot, amit a C compiler is leforgatott volna; az C kód maradt.

És ha mégis kell valami C++ feature, akkor meg ott van. Láttam nem egy olyan projectet ami ilyen gondolkodás mellett indult, C-ben. De aztán csak szükség lett volna C++-ra egy idő után arra, mert bizonyos dolgokat C++-ban jobban meg lehet oldani.

Bizonyos dolgokat tuti. Stringkezelés. OOP. Kiterjesztett típusok. Operator overload. (Stb.) Ezek C++ alatt maguktól értetődnek, C-vel meg szopni, meg wrappelni kell. És ha nincs szükség ezekre? Vagy nincs hely/erőforrás ezekre?

De persze itt most nyilván olyan esetekre gondolok, amikor 2KB-d van a kódra, és 48 byte-od a data-ra, mert itt maga a fejlesztés se tart túl sokáig. Valszeg ha kész C-ben, akkor nem kell tovább birizgálni. De mondjuk én még egy ilyennek is C++-al állnék neki, mert egész egyszerűen nincs semmi okom C-t használni.

És mitől lesz az C++ kód? Mert gondolom nem OOP kódot akartál írni 2 kB kódtárral és 48 byte adattárral.