Miért használnak rengeteg helyen sima C-t ha a C++ sokkal többet tud és szebb/átláthatóbb/rövidebb kódot lehet benne írni?
- NAGYON sarkosan: Van, amikor indokolt. Beágyazott rendszerek esetén például.
- Az, hogy egyértelműen rövidebb volna a C++ kód, nem teljesen fedi a valóságot; mi több, ha objektumorientáltan - ahogy kellene - használod, a szoftver komplexitásával "fordított arányban" több sor kódot igényel "ugyanaz" a feature. A komplexitás emelkedésével viszont a jobb kód-újra-felhasználhatóság (OFF: ez borzalmasan néz ki, meg amúgy is hányok a szakkifejezések magyarításától) komoly előnyt jelent a kódbázis teljes hosszát tekintve; bár ezt a szakemberek gyakran beáldozzák valamilyen egyéb előny érdekében (pl. rugalmasság).
- Nem nagyon derül ki, milyen "rengeteg hely"-re gondoltál.
- No offense, de nem igazán jó ötlet ilyen kérdéseket feldobni, mert csak értelmetlen flamewart fog indítani, gyakorlati értéke viszont nem sok van.
Okok:
A programozók közmondásos lustasága. Kényelmesebb ugyanazt a nyelvet tovább használni, mint megtanulni egy újat, és áttérni arra.
Ha egy program már egy adott nyelven van, akkor az egészet át kellene írni. Nem a Hello world!-ről van szó, hanem a rendszermagról, a meghajtó programokról és más hasonlókról. Nem lehet automatikusan konvertálni, mint a Python 2-t Python 3-ba.
Emiatt továbbra is érdemes megtanulni a C-t, amiből az 1. pont következik, aminek még több C program az eredménye, így a 2. is tovább érvényesül. Sokáig fog élni még a C a maga helyén.
Ez csak azt mutatja, hogy nem vagy tisztában a folyamatleíró és objektumorientált szemlélet közötti különbségekkel.
C-re olyan helyeken van szükség, ahol nagyon korlátozva vannak az erőforrásaid, de mégsem akarsz assembly-ben nagyon merev, át nem igazán írható kódokat tákolgatni.
Pl automotive, beágy, virtualizáció, nagyon erőforrás, realtime kritikus háttérben futó service, optikai karakterfelismerés, gépi látás, dinamikus terheléselosztás, akármilyen kernelírás, hogy csak egypár hardverközeli felhasználást említsek.
C-ben is lehet átlátható kódot írni, de az nem a kezdők erőssége. A C++-ban is lehet makarónit csinálni, aki nem ért <template> hozzá.
Hogy melyik nyelv gyorsabb, az inkább kódolási stílusfüggő. A g++ 4.6-tól már legalább olyan hatékonyan optimalizál, mint a gcc.
Nincs olyan dolog amit C -ben meglehet írni de C++ -ban nem.
OS kernelt is írtak már benne, vadászgéphez szoftvert, meg még jó sok mindent ahol elsődleges a sebesség.
A TIOBE index szerint az objektumorientált nyelvek népszerűsége csökkenő tendenciát mutat, amíg a sima C népszerűsége (néhány gödröt és emelkedőt kiintegrálva) nagyjából változatlan az idők folyamán.
Egy nagyon fontos dolog: Minden C kód egyben C++ is.
Vannak feladatok, amikre teljesen értelmetlen a C++ plusz képességeit belevinni, csak nagyobb, lassabb, bonyolultabb lesz. Ha pl. egy olyan lineáris folyamatot akarsz leírnni, amiben alig vannak egymásra hasonlító lépések, vagy olyan kicsi a feladat, hogy nincs hol felhasználni az objektumorientáltság előnyeit (mert pl. csak egy objektumod lenne), akkor nincs sok értelme a ++-nak.
Az pedig messzemenően nem igaz, hogy C-ben ne lehetne átlátható, szép kódot írni.
Nem, nem lesz lassabb a C++ kód, de még nagyobb sem sokkal.
Sima C -vel két string összefűzése is körülményes.
"Egy nagyon fontos dolog: Minden C kód egyben C++ is."
Nem mert vannak kulcsszavak amit C-ben lehet használni pl. függvénynévként c++-ban meg nem.
De a C++-ban az absztrakció (virtuális függvények, template) minimális terhet jelent és csak ha használod! A C egy kisebb és ezért jobban érthető nyelv. Nincsen benne annyi minden (pl. hat féle öröklődés), ezért nem szeretik egyesek a C++-t mert komplexebb. Végül az objektum orientáltság a c++-ban nem kötelező, és akkor is lehet előnye ha nem tisztán objektum orientált az egész program.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!