Domanda

Sono stato navigando revisione 1.38.0 delle librerie Boost, nel tentativo di decidere se ci sono abbastanza gioielli lì per giustificare la negoziazione processo di approvazione software esterno della mia azienda. Nel corso di scrittura di programmi di test e la lettura dei documenti, ho raggiunto un paio di conclusioni

  • , naturalmente, non tutto in Boost potrà mai essere utile nel mio gruppo di ingegneria
  • ancora più importante, alcune di queste librerie sembrano più lucido rispetto ad altri

In realtà, alcune librerie sembrano un po 'giocattolo-come a me.

Ci sono un certo numero di librerie abbastanza accessibili che posso vedere mettendo a frutto dopo solo un breve periodo di indagine, come ad esempio boost :: variant (Mi piace molto il visitatore componenti e il fatto che il compilatore barfs se un visitatore manca un operatore per uno dei tipi di variante). Userei boost :: shared_ptr tranne per il fatto che il nostro gruppo ha già una serie di tipi di puntatore intelligente.

Quindi, sulla base della vasta esperienza degli utenti di Stack Overflow, che amplificano le librerie

  • sono di alta qualità?
  • sono più di giocattoli?
  • ci sono tutte quelle che hanno un alta barriera di entrata, ma che sono ben la pena di apprendimento?

Si noti che questa è una domanda un po 'diverso da quello rappresentato nel Impulso considerato nocivo?

P.S. - ha una delle risposte (da litb) stato cancellato? Non riesco a vedere qui, e solo un estratto sulla mia pagina utente ...

È stato utile?

Soluzione

Io uso abbastanza frequentemente (e mi rende la vita più semplice):

  • puntatori intelligenti (shared_ptr, scoped_ptr, weak_ptr, interprocess unique_ptr):

    • scoped_ptr per Raii di base (senza proprietà condivisa e trasferimento della proprietà), a costo zero.
    • shared_ptr per le operazioni più complesse - quando è necessario proprietà condivisa. Tuttavia v'è un certo costo.
    • unique_ptr -. C'è del lavoro attivo in spinta sulla unificare vari approcci (presente alla Boost) per unique_ptr con l'emulazione mossa
    • Sono veramente semplice da usare (solo intestazione), facile da imparare e molto ben collaudato (beh, tranne forse il unique_ptr)
  • Boost Discussione - attivamente sviluppato (le discussioni sono ora mobile) libreria per lavorare con i thread. Nasconde la complessità di implementazione filo su una data piattaforma.

  • Boost MPL e Fusion - questi sono più difficili da spiegare. Per molto tempo non ho usato la compilazione potere tempo, ma dopo un po 'di lettura e di apprendimento si è scoperto che alcuni dei miei codice può essere ben semplificato. Ancora, fate attenzione al tempo di compilazione ...

  • Boost Asio

    • Contrariamente alla prima impressione (almeno un po 'di tempo fa) non è solo la libreria di rete. Esso fornisce modello di I / O asincrono che può essere utilizzato praticamente per qualsiasi cosa.
  • Boost Format (formattazione dell'output potente, ma molto pesante)

  • Boost Spirit2x (Karma e Qi utilizzati sia per l'analisi e l'uscita generando basato su un dato grammatica). Davvero potente, in grado di creare un parser senza ricorrere a strumenti esterni. Eppure il tempo di compilazione potrebbe essere un problema. Anche la versione 2x è attivamente sviluppato e la documentazione è piuttosto scarsa (mailing list spirito-devel è molto utile però)

  • Boost Bind, Funzione e Lambda per rendere la vita più facile e Boost Phoenix - solo per sperimentare

  • lexical_cast (qualcosa di simile potrebbe nascere presto boost :: string)

  • Regex / Xpressive - espressioni regolari

  • Tipo tratti e controlli concetto - ancora una volta, per rendere la vita più facile

  • Math:

    • vari generatori di numeri casuali
    • varie distribuzioni statistiche
    • uBLAS - per l'utilizzo di attacchi LAPACK / BLAS in C ++ modo come
    • alcune funzioni matematiche, normalmente non disponibili in C ++
    • alcuni strumenti per il controllo delle conversioni tra tipi numreric
    • intervallo di aritmetica
  • Boost Iterator (adattatori specializzati per iteratori e la facciata per creare il proprio)

  • Boost quadro Unit Testing

E ancora ci sono alcune parti che avevo appena toccato in Boost. Probabilmente ho anche dimenticato di menzionare alcune fra le più ovvie.

Ricordate di usare strumenti (martelli) per problemi di destra (chiodi). Ricordarsi di mantenere le soluzioni semplici. Ricordate circa il costo di funzionalità ricevuto (ad esempio shared_ptr o boost::format runtime sovraccarico o MPL / Fusion / Spirit / Phoenix compilazione costi di tempo e dimensioni eseguibili). Ma sperimentare e imparare -. È dove il divertimento è

E quando si tratta di convincere la direzione di utilizzare le nuove librerie - non c'è bisogno di iniziare con tutte le librerie. Inizia con le cose semplici (probabilmente quelli che hanno una lunga storia e stabile Boost, un ampio sostegno compilatore, sono previsti per l'inclusione in TR2 / C ++ 1x, ecc) e semplici esempi che mostrano i benefici.

Altri suggerimenti

Ho trovato boost essere un incontrastato must-have nella progettazione multi-piattaforma (ad esempio * nix e win32) le applicazioni multi-threaded (boost::thread, boost::interprocess.) Questo da solo è stato una giustificazione sufficiente a almeno un caso di adozione boost nell'ambito di progetti miei datori di lavoro.

Il resto (contenitori, programmazione generica e meta-programmazione, memoria) seguita come omaggi.

Io uso spesso boost::filesystem. Fa tutto il necessario per la gestione dei file semplice

Direi che le librerie di valore sono:

  • Metaprogrammazione (MPL, enable_if, type/function_traits)
  • preprocessore - se ne avete bisogno, può tornare utile
  • variante, optional - come già notato
  • Math - quaternioni, funzioni matematiche in più (anche se potrebbe non essere utile a voi)
  • lambda: anche se la sintassi è peloso, è abbastanza coinvolgente
  • operatori / iteratori: sono davvero a portata di mano quando si costruisce i propri tipi

Forse Python (mai provato, ma alcuni programmi ad es. KDE usarlo)

Boost tra processi è sicuramente vale la pena se stanno facendo le cose w / memoria condivisa e simili.

Boost :: lambda è un po 'utile se si utilizza STL. Vi permette di creare predicati in atto, in questo modo:

for_each(a.begin(), a.end(), std::cout << _1 << ' ');

Questo codice restituisce tutti gli elementi da contenitore separati da spazi.

Molte delle aggiunte alla libreria standard C ++ 0x sono stati creati come parte delle librerie Boost.

Non sono perfetti (è il software), ma il processo di progettazione utilizzato è piuttosto robusto (molto più di quanto la maggior parte del software libero). Se si ha bisogno di aiuto, troverete un sacco sulla mailing list.

Io personalmente credo che si dovrebbe dare un'occhiata a librerie che nasconde cose specifiche piattaforma come threading, IPC, la memoria di file, file system mappato, asincrona IO ecc.

Si possono risparmiare un sacco di tempo e fatica in progetti multi piattaforma e tende ad essere focalizzata sulla esponendo funzionalità piuttosto che esercizi di caratteristiche di fantasia C ++.

Se avete bisogno di analizzare i file di testo che sono più complessi che semplici coppie chiave / valore, consiglio vivamente di Boost :: spirito. Ha una curva di apprendimento, ma una volta a capire che fuori, consente di incorporare facilmente Grammers EBNF proprio nel codice. La sua molto più robusto di scrivere il proprio parser. Ho anche ritrovo la creazione di formati di file che sono stati progettati più per la facilità dello scrittore del file che l'autore del codice di analisi.

Ho trovato boost.thread e boost.asio indispensabile per la scrittura di applicazioni client / server. La biblioteca puntatore intelligente lo rende facile scrivere il codice che utilizza la gestione delle eccezioni, senza perdite di memoria.

Una nota a parte, una serie di file PDF che documentano alcune delle librerie Boost più comuni è stato rilasciato di recente. È possibile scaricare da SourceForge .

Ho letto le altre risposte e I necessità per aggiungere Boost.Graph (BGL) e il suo amico Boost.Property_map. Questi due letteralmente cambiato il mio lavoro di tutti i giorni.

E 'estremamente ben progettato, ma la maggior parte delle persone sono messe fuori in un primo momento perché c'è un prezzo abbastanza alto da pagare prima di poter realmente capire lo scopo di tutti i concetti. Ma una volta che si ottiene una presa su questa libreria, diventa difficile andare senza!

Non è esattamente la stessa domanda, ma dovrebbe aiutare a rispondere a vostra: parti più usate di Boost

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top