Home    About me    Publications    Blog    Undergrad memories

Fabio Ruini’s blog

Because Italians do it better! What the f**k? Ehm… the blogs, I mean… obviously! :-/

L’Holy Grail della programmazione C++

Stavo leggendo un nuovo tutorial pubblicato in questi giorni sul forum di Irrlicht. Il titolo, invero un po’ pretenzioso, e’ Smart tutorial. Al suo interno, l’autore mette insieme un po’ di codice che permette di svolgere varie operazioni con l’engine grafico in questione. Si spazia dal salvare un’immagine su file al gestire gli eventi generati dalla GUI, passando per movimenti dei nodi, collision detection, ecc. Tutto bene, tutto bello. Se non che l’autore ha avuto la spregiudicatezza di scrivere la codesta funzione:

void showCaptionVar(std::string txt)
{
std::string gio1=txt;
char gio2[512];
strcpy_s(gio2, gio1.c_str());
core::stringw gio3 = gio2;
device->setWindowCaption(gio3.c_str());
}

Ed e’ stato prontamente cazziato da tale RandomMesh, che non credendo ai suoi occhi sbotta furioso: Please use a constant reference for heaven’s sake! This will speed things up! A me scappa da ridere. Non tanto per il consiglio che, per quanto estremamente geek e del tutto irrilevante nella maggior parte delle applicazioni reali, ha il suo senso. Passare un parametro ad una funzione per indirizzo invece che per valore, quando si puo’, e’ sempre cosa buona e giusta. Ma la vera chicca e’ il fatto di dichiarare la variabile passata come una costante (con un procedimento spiegato ad esempio a questo link). Quanti milionesimi di secondo all’ora questa terrificante modifica permettera’ di risparmiare? Uno? Nessuno? Centomila? Ai posteri l’ardua sentenza. Nel frattempo mi adeguo e provvedo a modificare tutte le funzioni scritte in vita mia e che avevano l’ardore di non utilizzare la parola chiave const. La quale, a quanto pare, nel 2009 e’ ancora l’Holy Grail della programmazione.

Comic - Leonardo, the Holy Grail and the Da Vinci postcode

Si’, come avrete potuto facilmente intuire da questo post, il mio bisogno di ferie inizia ad assumere contorni quantomeno drammatici…

Commenti

  1. L
    agosto 1st, 2009 | 23:35

    Meriterebbe di essere fulminato all’istante.

    void showCaptionVar(std::string txt)
    {
    std::string gio1=txt;
    char gio2[512];
    strcpy_s(gio2, gio1.c_str());
    core::stringw gio3 = gio2;
    device->setWindowCaption(gio3.c_str());
    }

    1) strcpy_s() mi risulta non essere standard ANSI
    2) cosa succede se gli passo una stringa con più di 512 caratteri, la copia e safe ma il resto
    3) penso che core::stringw sia una stringa unicode ma per questo c’è già std::wstring
    4) la conversione verso costante è automatica, al massimo poteva fare un cast

  2. L
    agosto 1st, 2009 | 23:41

    5) Anche una stringa nulla dovrebbe produrre risultati interessanti ): .

  3. agosto 3rd, 2009 | 19:18

    Pare che abbiamo scoperto la vera identita’ del commentatore di cui parlavo… :D

  4. L
    agosto 4th, 2009 | 01:21

    No, ma non mi meraviglio più di tanto vista l’evidenza dei difettucci del codice :)

Lascia un commento