2009-03-17 19 views
18

Ho acquistato questo libro per il nostro gruppo in azienda, forse, per migliorare le nostre capacità di progettazione e, infine, avere migliori pratiche di programmazione. Mentre lo leggo, trovo, per lo più, una serie di trucchi eleganti che possono essere usati con template, e non sono sicuro se valga la pena - e non dannoso - di incorporarlo nel nostro codice introducendo così complessità/leggibilità e non manutenibilità del codice .Design moderno C++ Modelli di programmazione e progettazione generici applicati

Mi piacerebbe scoprire dai praticanti, cosa usi da quel libro? Che cosa è rilevante e importante per lo sviluppo di software professionale, cosa dovrebbe essere evitato?

Pensiero generale su questo libro e su come si integra nello sviluppo di software di sistemi su larga scala (a proposito, mi piace il libro di John Lakos)?

Qual è l'effetto Alexandrescu?

+0

+1, quando ho letto quel libro, avevo in mente quasi le stesse domande. –

risposta

22

Al di fuori degli schemi standard utilizzati, l'operazione che ritengo più utile delle informazioni trattate sulla programmazione C++ generica, è la possibilità di utilizzare i modelli per creare errori di compilazione per scenari di codici non validi. Una volta capito, puoi diventare molto efficiente nel trasformare una classe di quello che sarebbe un bug di runtime in un errore di compilazione.

Ho avuto molto successo a farlo al lavoro. Certo, produce messaggi completamente illeggibili ei miei colleghi di tanto in tanto passano e dicono "che diavolo è?". Ma ogni volta era un bug e non erano in grado di compilarlo. Inoltre, faccio un grosso commento agli errori particolari nella speranza che sia moderatamente comprensibile.

+0

Penso che questa sia probabilmente la miglior ragione per cui ci sia un favore alla magia dei modelli. Lasciarti spostare gli errori dal runtime al tempo di compilazione fa risparmiare un sacco di tempo e fatica a tutti. +1 – jalf

+1

+1. Ogni volta che muovi il rilevamento di un errore più vicino nel tempo alla sua introduzione, vinci. –

+1

Conosci qualche buon materiale su questa pratica su internet? Apprezzerei molto qualsiasi link/materiale. – shuttle87

1

IMHO, la lettura (e la comprensione!) Del primo capitolo del libro è utile (credo che sia anche disponibile on-line gratuitamente). Il resto del libro descrive più o meno l'interno della libreria Loki e io non lo consiglio veramente.

+0

Ecco come ci penso anch'io –

15

Intorno al 2005 sono entrato pesantemente in modelli di espressioni e vari trucchi in fase di compilazione per creare librerie che erano molto espressive da usare, come i linguaggi interni specifici del dominio incorporati in C++. In particolare una cosa SQL SQL abbastanza completa, simile a quella che è uscita da Linq su .NET.

Per gli utenti, va bene. Ma per chiunque altro a parte me cercava di mantenerlo, presentava una curva di apprendimento estremamente ripida. Quindi questo è il problema con esso; come ogni tecnica "intelligente", riduce il pool di persone che possono mantenerlo.

Questo va bene per le librerie di classi ampiamente utilizzate, che gli utenti generici non hanno mai bisogno di capire il coraggio di. Ma per le librerie "in house" di proprietà di un team specifico, probabilmente hanno tutte bisogno di essere in grado di correggerle o estenderle in modo sensato. Le possibilità più arcane dei modelli C++ sembrano precludere questo, nella mia esperienza.

E 'stato molto divertente però.

+0

+1 consiglio eccellente. – peterchen

6

Se la vostra azienda/progetto consente di aumentare. Questo libro ti aiuterà a scoprire alcune magie di potenziamento solo per te stesso.

Se Azienda/Progetto non consente boost. Questo libro sarà una buona guida per ricreare alcune parti di potenziamento di cui hai più bisogno, come la funzione boost ::.

Credo che in ogni progetto ci sia una sorta di modulo di utilità. Tale libro ti aiuterà a rendere la tua "utilità" più generica e sicura prendendo in prestito alcuni modelli suggeriti dai libri e trucchi SFINAE.

E soprattutto questo libro mostrerà come è possibile ripensare alcuni dei modelli di progettazione GOF modificando il polimorfismo di runtime con statico.

3
  • Cosa utilizzo direttamente dal libro? Niente - Non uso Loki o Boost.
  • Ha influenzato il mio codice? Non proprio - avevo familiarità con il concetto di politiche prima di leggere il libro
  • Vale la pena leggerlo? Decisamente!
2

Per me è stata un'esperienza di ampliamento della mente. Ho letto il libro e ho continuato a imparare dettagli e trucchi, alcuni dei quali li ho usati in seguito. Ma la parte più importante è che il design con la D maiuscola è discusso nel libro da sempre (nessun gioco di parole inteso con il linguaggio D).

Il capitolo sugli indicatori intelligenti cambia la mentalità di "fornire tutte le funzionalità possibili" a un approccio più conservativo: considera ciò che offri, ne vale la pena? come può rompere il codice? aiuterà l'utente? renderà il codice fragile creando sottili insidie?

La parte di progettazione basata su criteri dovrebbe farti pensare mentre si progetta se le classi potrebbero/dovrebbero essere divise in unità ortogonali più piccole. Mentre nella maggior parte dei casi non finisco di dividersi in tutte quelle classi politiche, il codice di solito finisce per essere più pulito poiché i diversi pezzi ortogonali si intrecciano meno.

Oh, come Earwicker, la mia prima reazione è stata attuando cose fantasiose che in realtà accelerato parte dello sviluppo, ma poi di nuovo, nella piccola azienda per cui lavoro io sono l'unico in grado di mantenere e che è davvero un problema . Non farlo. Ci vuole il doppio del cervello per eseguire il debug e la manutenzione di quanto necessario per lo sviluppo.

0

Non ho usato Loki ma ho sfruttato attivamente il mio lavoro precedente. Boost ha implementato molte idee da questo bel libro;

Le cose da questo libro non sono destinate all'uso in Business Logic, devono essere implementate in librerie (Boost, Loki, qualcosa di proprio) e librerie utilizzate in Business Logic. Questa è una cosa diversa "usando questo trucco nel codice" o "implementa una libreria separata con questo trucco e usando bellissime librerie nella maggior parte del tuo codice (ad esempio boost :: bind - brutto implementazione ma piacevole nell'uso - ma non vedi quasi mai questa implementazione) "

Anche questo libro dimostra una potente meta-programmazione C++ e un buon allenamento per il cervello.

0

Ho avuto alcune reazioni scortese da parte di persone quando ho dichiarato di utilizzare elementi del design di Modern C++. Innanzitutto, i commenti del WTF. Questo è stato seguito da commenti 'non cercare di essere troppo intelligenti'. Quindi, una migliore comprensione delle idee. E poi, infine, l'accettazione delle idee al punto in cui sono parte del vocabolario comune.

Assicurarsi di conservare più copie di questo libro a portata di mano. Idealmente, compra una copia per ogni sviluppatore. Inoltre, fino a quando questa roba diventa un vocabolario comune tra gli sviluppatori, cita il modello/idioma e le pagine pertinenti nei tuoi commenti.

Problemi correlati