Newsgroup: it.comp.lang.c++
Titolo: Testo online sullo sviluppo di software efficiente in C++

Salve,
   sto scrivendo un piccolo trattato sullo sviluppo di software 
efficiente usando il linguaggio C++.
   Ho deciso di rendere pubblico tale testo, scritto in HTML, al 
seguente indirizzo:
http://digilander.libero.it/carlmila/cpp_ottimizzato.html
Gradirei suggerimenti di ogni tipo, e in particolare:
- sulla chiarezza del testo;
- sull'opportunità di certe ottimizzazioni, che forse su alcune 
piattaforme ottimizzano ben poco, o che riguardano esigenze molto 
particolari;
- sulla mancanza di altre tecniche di ottimizzazione di largo impiego.
Grazie
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila
     (togliere ".no.spam" dall'indirizzo e-mail)

 a = lookup_table[b];
Devi scambiare c e d nella lookup_table
Infine una domanda:
Se x è intero (signed) può essere che x&15 sia più veloce di x%16?
E.

 Se x è intero (signed) può essere che x&15 sia più veloce di x%16?
Effettivamente la divisione (sia / che %) tra un intero e una costante 
e' piu' veloce se il dividendo e' senza segno, sia se la costante e' una 
potenza di due sia se non lo e'.
Comunque unsigned(x)%16 ha la stessa velocita' di x&15, quindi 
preferisco la prima forma, perche' piu' generale.
Ho quindi aggiunto il seguente suggerimento:
5.7.9. Prima di dividere un numero intero signed per una costante, se è 
sicuramente non-negativo, convertilo in unsigned.
Le operazioni a / b e a % b, dove b è un'espressione costante intera, 
sono più veloci se a è unsigned. Pertanto, se è noto che a è un intero 
signed positivo o nullo, sono più veloci le seguenti espressioni 
equivalenti unsigned(a) / b e unsigned(a) % b.


 
http://digilander.libero.it/carlmila/cpp_ottimizzato.html
sì, ma perché non su Wikibooks?

 
Innanzitutto complimenti!
Mi sembra chiaro e ben fatto.
Premetto che non ho cetamente la "caratura" per poter fare critiche, ma 
siccome lo conosco benino (usando ATL che è praticamente basata su 
questo) ho trovato "poco comprensibile" la motivazione per il CRTP 
(5.3.5). Ma è un dettaglio.
Già che ci sono: sbirciando nel tuo sito ho scoperto che hai 
"formalizzato" una cosa che avevo mezzo provato ad implementare anche io 
e che mi chiedo come mai non sia così nota: mi riferisco ai "test 
statici di compilazione".
Provo a spiegarmi per chi non ha letto: si tratta in pratica di scrivere 
degli "unit test" in negativo sulla possibilità di compilare un certo 
pezzo di codice: voglio testare che quel pezzo di codice NON compili!
A me sembra che per chi scrive librerie sia MOLTO utile.
Mi meraviglio che in giro non si trovi praticamente nulla sull'argomento 
(a parte l'articolo di Carlo). (anche se a dir la verità non saprei 
neanche con che keywords andare a cercare).
Qualcuno ne sa qualcosa?
GM

 Qualcuno ne sa qualcosa?
Letteratura non ne conosco, ma test di tipo "compile fail" (il test
passa se il codice non compila) sono supportati da Boost.Test e
ampiamente utilizzati nei test di regressione di Boost.  Non potrebbe
essere altrimenti, dal momento che sono l'equivalente dei test
negativi per i meta-programmi.
Sarebbe interessante sapere se altri framework di test li supportano,
dal momento che sono sostanzialmente una peculiarita' del C++.
Ciao,
Nicola

 
Ecco, questo non lo sapevo.
Me lo vado a vedere subito (anche perchè stavo per farmi in casa un 
aggeggio complicatissimo che al momento del test invoca di nascosto il 
compilatore e si va a parsare lo stdout per vedere se esce l'errore 
atteso nel punto atteso)
Se in boost c'è già qualcosa di pronto è sicuramente meglio...
GM


La combinazione Boost.Build e Boost.Test e' a mio avviso
macchinosissima e ogni volta che provo non trovo mai quello che cerco
sulla documentazione. Pero' costruirsi da se un framework che consente
di fare test sia runtime che compile time, indipendente dalla
piattaforma e dal compilatore, non puo' che essere peggio.
Guardo se ho qualcosa da passarti, ma non trattenere il respiro...
Ciao,
Nicola

 Guardo se ho qualcosa da passarti, ma non trattenere il respiro...
Ok, senza impegno...
intanto grazie
GM

 vicino)
E' proprio quello che suggerisco di fare nel mio articolo su DDJ!
Con la differenza che io controllo solo se il processo che esegue il 
compilatore rende un codice di ritorno 0 (successo) o no (fallimento).
Il codice sorgente si trova qui dentro:
ftp://66.77.27.238/sourcecode/ddj/2008/0802.zip
Purtroppo sono 6,5 MB perche' ci sono anche i sorgenti degli altri articoli.
I file riguardanti l'articolo sono staticpp.txt e staticpp.zip.


Servizio Tecnico ha scritto:

Ci ho pensato, ma poi, colto dal mio insaziabile ego, mi sono detto che 
non avrei piu' potuto dire di avere scritto quel libro, ma solo di avere 
contribuito ad un'opera collettiva.
Tuttavia, adesso che il mio libro e' online, penso di poterlo publicare 
*anche* su Wikibooks.


Servizio Tecnico ha scritto:

Per chi fosse interessato, il testo, migliorato, è modificabile da tutti 
all'indirizzo:
http://it.wikibooks.org/wiki/Ottimizzare_C%2B%2B
