Domanda

Boost è pensato per essere la libreria standard C ++ non standard che ogni utente C ++ può usare. È ragionevole supporre che sia disponibile per un progetto C ++ open source o è una dipendenza troppo grande troppo lontano?

È stato utile?

Soluzione

Fondamentalmente la tua domanda si riduce a "è ragionevole avere [libreria gratuita xyz] come dipendenza per un progetto open source C ++."

Ora considera la seguente citazione di Stroustrup e la risposta è davvero semplicissima:

  

Senza una buona libreria, le attività più interessanti sono difficili da svolgere   C ++; ma data una buona biblioteca, quasi ogni compito può essere reso semplice

Supponendo che questo sia corretto (e nella mia esperienza, lo è) quindi scrivere un progetto C ++ di dimensioni ragionevoli senza dipendenze è assolutamente irragionevole.

Sviluppando ulteriormente questo argomento, la una dipendenza C ++ (a parte le librerie di sistema) che ci si può ragionevolmente aspettare su un sistema client (per sviluppatori) sono le librerie Boost. So che non lo sono, ma non è una presunzione irragionevole da fare per un software.

Se un software non può nemmeno fare affidamento su Boost, non può fare affidamento su qualsiasi libreria.

Altri suggerimenti

Dai un'occhiata a http://www.boost.org/doc/tools.html . In particolare, l'utilità bcp sarebbe utile se desideri incorporare le tue dipendenze boost nel tuo progetto. Un estratto dal sito web:

" L'utilità bcp è uno strumento per l'estrazione di sottoinsiemi di Boost, è utile per gli autori di Boost che vogliono distribuire la loro libreria separatamente da Boost e per gli utenti di Boost che vogliono distribuire un sottoinsieme di Boost con la loro applicazione.

bcp può anche segnalare da quali parti di Boost dipende il tuo codice e quali licenze sono utilizzate da tali dipendenze. "

Naturalmente questo potrebbe avere alcuni inconvenienti, ma almeno dovresti essere consapevole della possibilità di farlo.

Ero molto diffidente nell'introdurre dipendenze nei sistemi, ma ora trovo che le dipendenze non siano un grosso problema. I moderni sistemi operativi sono dotati di gestori di pacchetti che spesso possono risolvere automaticamente le dipendenze o, almeno, rendere molto semplice agli amministratori l'installazione dell'occorrente. Ad esempio, Boost è disponibile sotto Gentoo-Postage come dev-libs / boost e sotto le porte di FreeBSD come devel / boost.

Il moderno software open source si basa molto su altri sistemi. In uno studio recente , monitorando le dipendenze dei pacchetti di FreeBSD, abbiamo stabilito che i pacchetti di 12.357 porte nel nostro sistema FreeBSD 4.11 avevano in totale 21.135 dipendenze da librerie; cioè, per compilare, richiedevano una libreria, diversa dalle 52 librerie che fanno parte del sistema di base. Le dipendenze delle librerie comprendevano 688 librerie diverse, mentre il numero di diverse librerie esterne utilizzate da un singolo progetto variava tra 1 e 38, con un valore di modalità di 2. Inoltre, 5.117 progetti utilizzavano almeno una libreria esterna e 405 progetti ne usavano 10 o più .

Alla fine la risposta alla tua domanda verrà da un'analisi costi contro benefici. Il vantaggio di riutilizzare una libreria matura, ampiamente usata, rivista e testata come Boost è maggiore del costo basso e in calo di una dipendenza? Per qualsiasi uso non banale delle strutture di Boost la risposta è che dovresti andare avanti e usare Boost.

Dipende. Se stai usando un file di intestazione definito solo modello di classe in Boost - allora sì vai avanti e usalo perché non succhia in nessuna libreria condivisa Boost, poiché tutto il codice viene generato al momento della compilazione senza dipendenze esterne. I problemi di versioning sono una seccatura per qualsiasi libreria c ++ condivisa e Boost non ne è immune, quindi se riesci ad evitare del tutto il problema è una buona cosa.

KDE dipende anche da Boost.

Tuttavia, dipende principalmente dai tuoi obiettivi, e ancora di più dal tuo pubblico di riferimento, piuttosto che dall'ambito del tuo progetto. ad esempio TinyJSON (progetto molto piccolo), è quasi al 100% Boost, ma va bene perché l'API che fornisce è simile a Boost e indirizzata ai programmatori Boost che hanno bisogno di associazioni JSON. Tuttavia, molte altre librerie JSON non usano Boost perché hanno come target altri segmenti di pubblico.

D'altra parte non posso usare Boost sul lavoro e so che molti altri sviluppatori (nei loro lavori diurni) sono nella stessa barca. Quindi immagino che potresti dire se il tuo Target è OpenSource e un gruppo che utilizza Boost, vai avanti. Se scegli come target un'impresa, potresti pensarci su e copiare e incollare solo le parti necessarie da Boost (e impegnarti nel loro supporto) affinché il tuo progetto funzioni.

  • Modifica: il motivo per cui non possiamo usarlo al lavoro è perché il nostro software ha essere portatile a circa 7 diversi piattaforme e attraverso 4 compilatori. Così non possiamo usare boost perché non l'ha fatto dimostrato di essere compatibile con tutti i nostri obiettivi, quindi la ragione è a tecnico. (Stiamo bene con il Parte OpenSource e Boost License, mentre usiamo Boost per altre cose su volte)

I vantaggi dell'utilizzo di boost durante la scrittura del codice C ++ superano significativamente la complessità aggiuntiva della distribuzione del codice open source.

Lavoro su Blocco note del programmatore e il codice dipende da boost per test, puntatori intelligenti e integrazione con Python . Ci sono stati un paio di lamentele dovute al requisito, ma la maggior parte andrà avanti se vuole lavorare sul codice. Prendere la dipendenza boost è stata una decisione che non mi sono mai pentito.

Per rendere la complessità leggermente inferiore per gli altri, includo librerie pre-costruite con versione per boost python in modo che tutto ciò che devono fare è fornire boost nelle loro directory include.

Direi di si. Entrambi Mandriva ( basato su Red Hat ) e Ubuntu ( Debian based) hanno pacchetti per le librerie Boost.

Penso che l'ampia funzionalità fornita da Boost e, come dici tu, sia la libreria C ++ standard non standard che la giustifica come dipendenza.

Sfortunatamente sì, per Ubuntu sono prontamente disponibili ma per RHEL 4 e 5 ho quasi sempre finito per farli da tarball. Sono librerie fantastiche, davvero grandi ... come usare un picco ferroviario quando a volte tutto ciò di cui hai veramente bisogno è una puntina da disegno.

Tutto dipende dal modo in cui utilizzerai Boost. Come diceva Diomidis, se hai intenzione di utilizzare alcune strutture non banali di Boost, vai avanti. L'uso delle biblioteche non è un crimine.

Certo, ci sono molte persone che preferiscono non usare Boost, perché l'introduzione di nuove dipendenze ha sempre alcuni svantaggi e preoccupazioni in più, ma in un progetto open source ... a mio parere è anche giusto usarle se solo vuoi impararli o migliorare le tue abilità su di essi.

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