Newsgroup: it.comp.lang.c++
Titolo: Domanda OT


Se ci tieni a sapere come č scritto il motore di Quake puoi scaricarti
i sorgenti dalla homepage della Id Software.
Manlio Perillo

quest'ultimo non sempre)
Anche se poi ci sono "pazzie" tipo il progetto di Java Quake2 scritto
interamente in Java.
Doom, mi pare, e' scritto in C.
Ah, per Quake, invece, mi pare ci siano grandi quantitativi di QuakeC,
un misto tra il C e il Pascal.
-- 
DGP85
http://daps.cjb.net/
Don't change the address.
No Binaries or HTML at this address.

 Usare il C++ non significa usare l'OOP ( vedi funzioni virtuali).
[snip]
Q1 (come i suoi successori) è stato scritto utilizzando compilatori C++ (lo sviluppo per Windows è stato effettuato con il Visual
C++).
Sebbene il compilatore lo permettesse, non sono stati utilizzati i costrutti C++, scrivendo il codice in un subset del vecchio C.
Perchè ?
Il problema è questo: si tratta di un software multi-piattaforma che deve scambiarsi dati _binari_ con un'efficenza _altissima_.
Il punto multi-piattaforma è fondamentale,  i grossi server quake utilizzano linux o solaris, mentre i client sono tipicamente
Windows.
La massa di dati che si scambiano è alta, pensate a 30 giocatori nello stesso ambiente virtuale, ognuno compie azioni diverse e
tutti devono vedere tutto in tempo reale (o ASAP). Vi assicuro che con più di 10 giocatori una LAN a 10 Mbits _non_ supporta il
carico, ne serve una a 100.
Per queste ragioni il funzionamento dell'engine è "qualcosa" a livello bassissimo, deve "spremere la macchina come un limone". I
dati viaggiano in formati dettati dall'efficenza di questo engine e dalle necessità di comunicazione multi-piattaforma cient-server.
Ora,
a detta di J. Carmack (capo-programmatore Id) l'implementazione di alcuni costrutti C++ varia a seconda del compilatore, in un modo
che non permette di ottenere la massima efficenza del codice su achitetture diverse (utilizzando compilatori diversi).
La soluzione che ha trovato è quella di utilizzare un subset del vecchio C per garantire l'efficenza e la portabilità. Il codice è
pieno di strutture contenenti vettori di byte o di "enum", rimappate in array, puntatori a funzioni e tutte le "magnacciate" tipiche
del vecchio C.
Sono assolutamente daccordo che uno stile di programmazione di questo genere sia "de-strutturato" e francamente illegibile.
Infatti, quando ho sviluppato il mio primo mod (
www.planetquake.com/holywars
) ho subito fatto un wrapper C++ per poter utilizzare le
caratteristiche superiori del linguaggio, ma stiamo parlando dei livelli alti. In questo caso hai pienamente ragione, ma l'engine è
un altro paio di maniche.
Attualmente sto sviluppando per Half-life.
Ad oggetti, ben strutturato, gerarchie di classi chiare ... un sogno ! Fatto veramente bene.
Ma stiamo parlando del livello alto, l'engine è quello di Q2 (pesantemente modificato, ma è lui).
Tutti gli accessi al livello basso sono a funzioni C ed i dati sono "collage"di bit (il sistema di comunicazione client-server è un
delirio ;-) )
A detta dei progettisti di HL per ottenere certi tipi di prestazioni questa scelta è opinabile ma ... è l'unica che funzioni bene.
In sintesi.
In generale hai ragione, ma ci sono dei problemi "particolari" per i quali la soluzione "vecchio stampo" sembra essere ancora la
sola via percorribile. L'engine grafico dei videogames sembra essere una di queste.
Sicuramente, con l'evoluzione dei compilatori ed una migliore conoscenza del linguaggio, questa nicchia tenderà a ridursi.
Il C++ ha tutte le potenzialità per fare _meglio_ del C, ma allo stato attuale, non è la scelta dei "guru" dei videogames per gli
engine ...
Roberto Bettazzoni
aka: TaZ

[CUT]
Mai provato ad usare qualche compilatore alternativo tipo KCC?.
E multi piattaforma e 'sembra' offrire ottimizzazioni specifiche per il C++
molto avanzate.
Io lo sto provando e a livello di dimensioni dell'eseguibile e di efficienza a run-time
sembra di molto superiore ad g++.
(Tieni conto perň che i miei sono piccoli progetti, per hobby).
Manlio Perillo


Purtroppo la scelta del compilatore per una specifica piattaforma è de-facto dettata dalle scelte fatte dall'azienda costruttrice
l'engine.
L'interfacciamento all'engine è molto critico (proprio a causa della sua de-strutturazione). Non oso pensare all'ipotesi di avere
problemi in quella zona.
Comunque, sembra che l'orientamento attuale sia quello di staccare totalmente il codice di gioco dall'engine. In questo caso sarò
_felicissimo_ di utilizzare compilatori migliori (il KCC è il KAI ?)
Roberto Bettazzoni
aka: TaZ


Si è il KAI C++.
Manlio Perillo

oppure che usa un compilatore C++ non eccellente.
Sono sostanzialmente d'accordo, molto spesso ho notato che in realta`
sono spesso idee preconcette derivanti da una scarsa conoscenza del
linguaggio.
Programmare ad oggetti non implica necessariamente l'uso del
polimorfismo (che ha un suo costo intrinseco), anche quando si puo`
sempre rimediare utilizzando quello parametrico (template) al posto
di quello inclusivo (funzioni virtuali).
Senza considerare che vale la legge del 90-10 (il 90% del tempo
e` speso in un 10% del codice).
Per quanto mi riguarda nella ditta in cui lavoro stiamo sviluppando un
motore grafico in C++, alcuni esperimenti sono stati molto
promettenti.
Paolo
-------------------------------------------
  Paolo Marotta
 
http://web.tiscalinet.it/paolo_marotta/
-------------------------------------------