Sviluppatori C/C++ » Discussioni


L'STL è indicata per i giochi?

  • Utente
    01 febbraio 2012

    Non sto parlando di giochini, ma di giochi che devono andare a 60 fps.

    L'STL è indicata oppure da assolutamente evitare?

    E' un annoso quesito, sul web si trovano risposte contrastanti.

    Mi interesserebbe conoscere la vostra opinione basata su esperienze concrete.

    Voi personalmente che ne pensate?

     

  • 01 febbraio 2012

    Si che viene utilizzata, la cosa importante è comunque conoscere molto bene quello che si stà utilizzando e sapere quindi come funziona.

    Esistono pure delle implementazioni specifiche, ad esempio la EASTL sviluppata da Electronic Arts.

    Forse una domanda più interessante è capire quando è consigliato utilizzarla e quando è sconsigliato, in che contesti ecco.

  • Utente
    03 febbraio 2012

    Dipende dal gioco, dipende dove, dipende come.

    Personalmene nelle società dove ho lavorato STL non era usato in codice di gioco.

    Nei tool nessun problema ma in un gioco console dove la memoria e' una risorsa molto preziosa usare STL (senza nessuna modifica) non e' una bella idea.

     

    Dare una mano ad STL ed usare custom allocators e' la via giusta. Anche se pero' alla fin fine se di STL si usano array, liste e map tanto vale implementarseli con un po' di classette template e usare nel corso degli anni una propria implementazione.

    Implementazione che puo' essere molto piu' smart di funzioni pensate per essere generiche (chiaramente).

     

  • Utente
    03 febbraio 2012

    Nei miei oltre 20 anni di programmazione C++ ho sempre utilizzato STL, nei contesto dei game engine e senza custom allocators.
    Condivido quello che dice Tiziano, specialmente la parte sui custom allocators e sull'implementazione ad hoc. In fondo nei giochi le classi più usate sono strighe, vettori, liste e map. Non sapevo che EA avesse prodotto una propria implementazione di STL.

     

  • 22 marzo 2012

    Personalmente non ci vedo niente di male, la cosa più importante è usare l'algoritmo o il contenitore giusti nel modo giusto. C'è tanto che si può ottimizzare certo, e in tanti casi il guadagno è alto, ma in ogni caso fa parte del C++ ed è bene imparare le cose fondamentali. Se si hanno il tempo e le capacità, si possono re-implementare i contenitori più importanti (map, vector, string). La cosa fondamentale che consiglio però è di rispettare l'interfaccia standard in modo da poter usare i vostri container e algoritmi custom come tipi template e in modo da non disorientare chi non conosce la vostra interfaccia.

    Una buona idea, una volta fatto questo, è estendere il tutto con container, metodi e funzioni in più, specifici a certi task. Bisogna ricordarsi che lo scopo di STL è la genericità. Se puoi scrivere codice più adattato a certe situazioni puoi fare assunzioni e quindi ottimizzazioni in più.

    Ultima leggenda da sfatare, i template non sono più lenti delle classi "normali". Usare però un template con parametri diversi incrementa la dimensione del codice generato (tranne quando il compilatore riesce a inlinare tutto ovviamente).

    A seconda del compilatore, certe funzioni spariscono del tutto, ad esempio non è sbagliato aspettarsi di trovare un memcpy al posto di std::copy, o strani operatori booleani al posto di  std::swap.

    Il mio consiglio è di usare STL senza problemi e, se necessario/possibile, reimplementare i tuoi container alla fine, fare un replace all e tornare indietro per vedere se il nuovo codice può essere usato diversamente.

    Per i compilatori Microsoft, ci sono delle macro particolari da dichiarare, pena l'utilizzo della versione debug dell'STL, da cui la leggenda che l'STL è troppo lenta per le applicazioni reali.

  • Proprietario
    23 marzo 2012

    STL devi usarlo, ma devi stare attento alla implementazione che usi se vuoi un codice portatile e performante.

    Boost e da usare alla stregua. 

  • Utente
    21 Luglio 2012

    Boost utile, un po pesante come libreria (40 minuti per farci la scansione con l'antivirus). Ho letto anche io che l'implementazione standard delle STL è lenta e non dovrebbe essere usata, ma nella pratica l'ho sempre usata e non si è mai rivelata un bottleneck (uso mingw/gcc).

     

    Qualcuno sa se esiste una serie di programmi test per le STL? ad esempio se qualcuno volesse re-implementarle, non esiste una serie di test da fare per verificare che siano state mantenute tutte le funzionalità e non siano stati introdotti bug?