Închis . Această întrebare este
bazată pe opinie . În prezent, nu acceptă răspunsuri.
Comentarii
Răspunde
Cu toate acestea, scrierea unui întreg motor de joc în C ar fi nerezonabilă astăzi?
Este rezonabil, dar Întrebarea este ce vă cumpără? Probabil că nu aveți nevoie de portabilitatea extremă oferită de C și este păcat să renunțați la toate caracteristicile oferite de C ++, cu excepția cazului în care sunteți într-adevăr împotrivit filosofic. id = „eed6d7b7bc”>
Care sunt, dacă există, unele avantaje pe care C le are față de C ++?
Timp de compilare mai bun?
De ce ar pune cineva doriți să folosiți C peste C ++?
Cred că este în mare parte o alegere estetică. Multor oameni le place C, deoarece este simplu și minim și se simte curat. C ++ are o mulțime de caracteristici frumoase (spațiile de nume fac ca merită să fie folosite), dar este și mare și dezordonat.
Comentarii
Răspuns
Am lucrat mult cu un motor de jocuri pur-C care a livrat mai multe produse, deci este absolut posibil. Iată experiența mea personală cu lucrul în ambele motoare C vs C ++:
- Utilizarea structurilor pure-C vă permite să profitați de cunoștințele despre alinierea structurilor și puteți utiliza aceste informații pentru a vă construi straturile de persistență și serializare a obiectelor. Motorul cu care am lucrat avea niște analizoare simple de antet care ar crea automat aceste metadate despre structuri și a făcut banale anumite tipuri de operații de date. Analizarea fișierelor antet C ++ arbitrare este în esență imposibilă și, cât de curând, pe măsură ce adăugați funcții de moștenire și virtuale, pierdeți capacitatea de a ști exact unde sunt lucrurile în memorie
- Timpul de compilare este semnificativ mai scurt, deoarece vă puteți păstra fișierele antet foarte compacte și puteți profita de declarațiile directe ale structurilor.
- Depanarea poate fi îmbunătățită, deoarece fără utilizarea șabloanelor și a moștenirii este foarte ușor să vă dați seama exact ce este un anumit obiect și ce face.
Toate aceste beneficii ar putea fi obținute la fel de ușor folosind cod c ++ restrâns care se abține de la utilizarea șabloanelor și a moștenirii pe obiecte serializate, dar a fost decizia CTO că ar fi mai ușor pentru a pune în aplicare simplitatea în cazul în care elementele mai confuze ale C ++ nu ar fi disponibile.
Personal cred că a fost ușor extrem, întrucât mi-a fost dor de capacitatea de a declara în mod corect variabile pentru bucle și de numeroasele utilizări complet legitime moștenire. Dar, într-adevăr, nu ne-a costat mult productivitatea la final toate lucrurile luate în considerare
Comentarii
Răspuns
Rescresc un motor de joc 2D scris în C ++ și Lua în C și Lua. Până acum experiența a fost destul de bună. Evident, efectuarea de operații vectoriale și matrice nu se termină la fel de frumos în C. Dar, în afară de asta, am găsit experiența destul de răcoritoare după ce am petrecut peste 10 ani ca dezvoltator C ++.
C are un număr de avantaje față de C ++:
- Compilatorul se va asigura că nu este rulat niciun cod la momentul inițializării statice. Aceasta face complet sigură alocarea statică a datelor globale, precum șirurile utilizate ca chei, de ex.
- Transparență. În atribuirea C sau alocarea sau definirea unei variabile nu va provoca rularea unor încărcături de cod. C ++ va genera automat constructori de copii pentru dvs., astfel încât să aveți mai puțin control asupra a ceea ce se execută atunci când efectuați atribuirea.
- O mulțime de depanare poate fi mai ușoară datorită faptului că numele funcțiilor nu sunt modificate
- Este de regulă, este bine să utilizați memcpy în C, dar va provoca cu ușurință probleme în C ++, deoarece constructorii de copii nu vor fi executați. tha t memcpy este mult mai rapid decât std :: copy care contează.
În afară de aceasta, există o serie de avantaje pentru a intra în modul de gândire C. În C ++ mă găsesc adesea făcând lucrurile un pic prea generalizate și abstracte. În C, de obicei decup lucruri precum metode get-set și deseori prealocează matrici cu dimensiuni fixe, mai degrabă decât să folosesc matrici dinamice. Adesea ajung la un cod mai scurt și mai ușor de depanat în C. Structurile de date sunt de obicei mai plate și mai ușor de vizualizat într-un depanator.
Pentru a fi corect, nu aș face niciodată o aplicație exclusiv în C. Motivul funcționează că îl combin cu un limbaj de nivel superior, cum ar fi Lua, care poate completa C foarte bine, dacă C nu este atât de puternic.
Software-ul Id scrie majoritatea motoarelor lor în CI cred că poți să te uiți la Reveniți la castelul Wolfenstein care a fost scris în C.
Am scris despre o parte din experiența mea pe scalabilitatea C vs C ++ și dezavantaje ale vectorului STL în comparație cu matrice simple.
Comentarii
Răspuns
După cum a subliniat altcineva, C ++ aduce avantajul unor umeri mari pe care poți sta (BOOST, STL etc.). În cele din urmă, este o alegere personală, dar aș alege C ++ din cauza resurselor disponibile. Dacă există funcții în C ++ pe care nu doriți să le utilizați, atunci nu le utilizați.
Comentarii
Răspuns
Nu ” Cred că cineva folosește C exclusiv în aceste zile, de obicei este amestecat cu un limbaj de nivel superior.
Programarea în C are unele beneficii față de, de exemplu, programarea în C ++. C ++ poate face multe lucruri sub capotă care sunt invizibile pentru utilizator, ceea ce poate afecta performanța dacă nu sunteți atent. C ++ poate fi, de asemenea, teribil atunci când vine vorba de utilizarea cache-ului, care din nou vă poate afecta performanța.
Deci, poate aduce unele beneficii să scrieți părțile critice ale performanței unui joc într-un mod asemănător cu C, mai degrabă decât într-un mod tradițional C ++. niciodată nu am auzit de nimeni, în ultimii ani, scriind de fapt un joc întreg în C.
Pe unele platforme, cum ar fi iPhone-ul, utilizarea C ++ poate crește dimensiunea executabilă cu o anumită bucată de kilobyți mult, îmi pare rău), motiv pentru care unii dezvoltatori de iPhone aleg să-și scrie codul într-un amestec de C și Objective-C.
Răspuns
Răspuns
Scrierea unui motor de joc în C este rezonabilă. Este rapid și poate fi portat pe mai multe sisteme. De exemplu, puteți utiliza pentru Android (cu utilizarea NDK). Puteți să-l utilizați pentru iPhone (Obiectivul c este doar o extensie a lui c). De asemenea, puteți utiliza pentru și pentru sistemul de operare principal, cum ar fi Linux, Mac sau Windows. Dacă vă simțiți confortabil cu c, vă sugerez să încercați!
Răspundeți
Desigur, este rezonabil. Eu personal nu aș face asta, iar majoritatea fanilor C pe care îi știu scriu doar cod de tip C în fișierele .cpp. Dar limbile sunt suficient de similare cu cele în care nu contează cu adevărat.
În ceea ce privește motivul pentru care cineva ar alege să facă acest lucru, cred că depinde în mare parte de filosofia anti-C ++. Personal, încă nu cred că acesta este un motiv bun pentru a alege C în loc de „C-stil C ++”. nebunia typedef struct este un motiv suficient de bun pentru a ne îndepărta de C și există o serie de altele.
Din păcate, C și C ++ sunt ambele limbaje destul de groaznice când ajungem la asta. Acesta este un motiv pentru care oamenii au încercat să-și facă o mulțime de coduri în script în ultimii ani.
Dacă căutați exemple de oameni care lucrează în C, puteți ignora ID-ul, deoarece îmi amintesc că am citit că au abandonat C de mult. Cryptic Studios (Star Trek Online) își dezvoltă totuși motorul în C. Din câte îmi dau seama, da, este „din cauza filozofiei mai mult decât din cauza vreunui avantaj tangibil.
Răspuns
Da și nu. Da, am făcut-o cu câțiva ani în urmă, dar aveam nevoie ca jocul meu să ruleze în 3D pe un server de 64 de biți unix (nu linux) cu jucătorii de pe terminale stupide. Nu era banal. C poate fi frumos este vrei să integrezi LUA, dar în cele din urmă am luat lua să lucreze în C ++, așa că aș spune că da, este posibil, dar nu o face.
Răspunde
Poate un posibil răspuns bun să fie” folosiți ambele „?
După cum am auzit că proiectele panda3d ar putea fi optimizate, distrugând blocajul fie folosind o parte din Cython, fie recodând acele părți.
De cele mai multe ori, părțile care trebuie optimizate sunt partea cu o mulțime de iterații și cuibărire sau cu o mulțime de calcul numeric, așa că presupunerea mea (sălbatică) este că un compromis corect ar fi utilizarea ambelor limbi , folosind C pentru părți care includ o mulțime de programare de nivel scăzut, astfel încât să nu puteți face un y folosirea greșită a limbajului C ++ pentru partea care necesită viteză și C ++ pentru restul jocului.
În mod ideal, faceți partea rapidă a motorului, ținând cont de nivelul ridicat, apoi folosiți un limbaj de scriptare sau C ++, care va folosi mult mai puține cuiburi / bucle.
Desigur, nu ați putea face niciodată un astfel de motor care să se potrivească tuturor jocurilor pe care ar trebui să le facă dezvoltatorii, cu excepția cazului în care dedicați motorul dvs. un fel de joc …
Dar nu luați sfatul meu de la sine înțeles, deoarece nu sunt un dezvoltator de jocuri experimentat și nici un dezvoltator experimentat … Cred că C vă obligă să scrieți cod rapid, în timp ce scrieți codul C ++ bun și rapid pentru un proiect la fel de mare ca un joc este un lucru diferit …
Răspunde
C a lucrat pentru John Carmack , s-ar putea să obțineți o mulțime de avantaje folosind C, dar până când ajungeți acolo pentru a beneficia de ele, vă poate dura ceva timp.
Aici puteți găsi o listă de motoare de joc unele o dacă acestea sunt scrise în C, poate că veți obține câteva informații despre cum să faceți un motor de joc C parcurgând codul sursă al acestora.
Răspuns
Codul C este în mod normal un cod C ++ valid.
Principalele probleme cu C ++ îl utilizează incorect ( Linus Torvalds îl urăște din acest motiv , a avut și alte probleme cu portabilitatea bibliotecii și așa mai departe cumpără, lucrează la nivel de sisteme de operare și trebuie să poată rula lucruri pe fiecare cip aleatoriu de acolo).
De exemplu nu există aproape niciun avantaj în utilizarea unui array cstyle [] peste un c ++ std :: vector <> (sau un container similar).
Vectorii sunt tipuri siguri și pot fi verificate la limite (puteți accesa elemente folosind fie get (), fie [], chiar dacă nu utilizați metoda verificată în matrice, puteți interoga dimensiunea mai degrabă decât să o încărcați cu pointerul).
Dar vectorii pot fi mai încet dacă, de exemplu, nu declarați dimensiunea implicită în constructor. De asemenea, adăugarea de lucruri la un vector poate provoca încetiniri dacă atunci are nevoie de o redimensionare. C ++ 11 adaugă și multe avantaje, cum ar fi inițializarea uniformă (acum puteți declara și inițializa vectori utilizând aceeași sintaxă) și există constructori de mișcare care vă pot permite să evitați copierea. Puteți chiar să creați propriile inițializatoare personalizate (dacă doriți să faceți altceva decât să folosiți malloc dintr-un anumit motiv).
Sau desigur, dacă aveți nevoie să redimensionați lucrurile, atunci vectorii sunt încă mai ușor de făcut cu , nu trebuie să vă deranjați cu malloc, să copiați manual lucruri și așa mai departe.
C ++ vă oferă cod orientat spre obiect. Când va fi compilat, va fi la fel de eficient, întrucât este într-adevăr o abstracție pentru oamenii care lucrează cu codul. Deși lucruri precum constructorii pot încetini crearea obiectelor. Dar veți avea nevoie fie de constructor pentru a seta valorile implicite, fie în caz contrar puteți inițializa obiecte fără a utiliza constructorul (lăsând opțiunea () „s ).
Dar orientarea obiectului facilitează programarea jocurilor mult . Jocurile tratează adesea obiecte.