Domanda

Ho lavorato con la Boost C ++ Libraries per un bel po 'di tempo. Sono assolutamente d'amore il Boost Asio C ++ libreria per la programmazione di rete. Tuttavia mi è stato introdotto per altre due librerie: POCO e Adaptive Communication Environment (ACE) quadro . Vorrei conoscere il bene e il male di ciascuno.

È stato utile?

Soluzione

Come ha detto rdbound, Boost ha uno stato "nei pressi di STL". Quindi, se non si necessità un'altra libreria, bastone alla spinta. Comunque, io uso POCO perché ha alcuni vantaggi per la mia situazione. Le cose buone di POCO IMO:

  • libreria di thread meglio, soprattutto un'implementazione metodo attivo. Mi piace anche il fatto che è possibile impostare la priorità di thread.

  • libreria di rete più completa rispetto boost::asio. Tuttavia boost::asio è anche un ottimo biblioteca.

  • include la funzionalità che non è in Boost, come l'interfaccia XML e database per citarne alcuni.

  • E 'più integrato come una libreria di Boost.

  • E 'il codice pulito, moderno e comprensibile C ++. Trovo molto più facile da capire che la maggior parte delle librerie Boost (ma io non sono un esperto di programmazione modello:))

  • .
  • Può essere utilizzato su un sacco di piattaforme.

Alcuni svantaggi di POCO sono:

  • Si è limitato documentazione. Questo in qualche modo compensato dal fatto che la fonte è facile da capire.

  • Si ha una comunità e l'utente base di gran lunga inferiore rispetto, ad esempio, Boost. Quindi, se si mette una domanda su Stack Overflow, per esempio, la probabilità di ottenere una risposta sono inferiori per Boost

  • E 'Resta da vedere quanto bene sarà integrato con il nuovo standard C ++. Si sa per certo che non sarà un problema per Boost.

Non ho mai usato ACE, quindi non posso commentare su di esso. Da quello che ho sentito, la gente trova POCO più moderno e più facile da usare rispetto ACE.

Alcune risposte ai commenti di Rahul:

  1. Non so circa versatile ed avanzato. La libreria di thread POCO fornisce alcune funzionalità che non è in Boost: ActiveMethod e Activity e ThreadPool. le discussioni IMO POCO sono anche più facili da usare e da capire, ma questa è una questione soggettiva.

  2. libreria di rete POCO fornisce anche il supporto per i protocolli di livello superiore come HTTP e SSL (eventualmente anche in boost::asio, ma non sono sicuro?).

  3. Mi sembra giusto.

  4. biblioteca integrata ha il vantaggio di avere coerente codice, la documentazione e "look and feel" generale.

  5. Essendo piattaforme è una caratteristica importante di Poco, questo non è un vantaggio rispetto alle Boost.

Anche in questo caso, probabilmente si dovrebbe prendere in considerazione solo POCO se fornisce alcune funzionalità è necessario e che non è in Boost.

Altri suggerimenti

Ho usato tutti e tre ecco il mio $ 0,02.

Ho molta voglia di votare per Doug Schmidt e rispettare tutto il lavoro che ha fatto, ma ad essere onesti trovo ACE leggermente buggy e difficile da usare. Penso che biblioteca ha bisogno di un riavvio. E 'difficile dirlo, ma mi piacerebbe rifuggire da ACE per il momento a meno che non ci sia un motivo valido per usare TAO, o avete bisogno di una singola base di codice per eseguire C ++ su entrambe le varianti di Unix e di Windows. TAO è favoloso per una serie di problemi difficili, ma la curva di apprendimento è intenso, e c'è una ragione CORBA ha un certo numero di critici. Credo che solo fare il vostro lavoro prima di prendere una decisione di utilizzare uno.

Se si esegue la codifica in C ++, spinta è nella mia mente un gioco da ragazzi. Io uso una serie di librerie di basso livello e li trovo essenziale. Una rapida grep del mio codice rivela shared_ptr, program_options, regex, si legano, la serializzazione, foreach, property_tree, file system, tokenizer, varie estensioni iteratori, alogrithm, e mem_fn. Questi sono per lo più le funzionalità di basso livello che in realtà dovrebbe essere nel compilatore. Alcune librerie Boost sono molto generiche; può essere il lavoro per arrivare a fare quello che vuoi, ma ne vale la pena.

Poco è un insieme di classi di utilità che forniscono funzionalità per alcune attività comuni molto concreti. Trovo le librerie sono ben scritti e intuitivo. Non ho di passare molto tempo a studiare la documentazione o la scrittura di programmi di test stupide. Attualmente sto usando Logger, XML, Zip, e Net / SMTP. Ho iniziato a usare Poco quando libxml2 mi ha irritato per l'ultima volta. Ci sono altre classi potrei usare, ma non ho provato, per esempio Data :: MySQL (io sono felice con mysql ++) e Net :: HTTP (io sono felice con libcurl). Cercherò il resto della Poco alla fine, ma non è una priorità, a questo punto.

Molti utenti POCO report utilizzando lo fianco Boost, quindi è ovvio che ci sono incentivi per le persone in entrambi i progetti. Boost è una collezione di librerie di alta qualità. Ma non è un quadro. Per quanto riguarda ACE, ho usato in passato e non mi è piaciuto il design. Inoltre, il suo supporto per i compilatori non conformi antichi ha plasmato la base di codice in maniera brutta.

Ciò che distingue POCO è un disegno che scala e un'interfaccia con la disponibilità ricca biblioteca ricordano quelli ottiene con Java o C # uno. In questo momento, la cosa più acutamente manca da POCO è asincrona IO.

Ho usato ACE per un'applicazione di acquisizione dati molto elevate prestazioni con vincoli di tempo reale. Un unico filo gestisce I / O da oltre trenta connessioni socket TCP / IC e una porta seriale. Il codice funziona sia a 32 e 64 bit di Linux. Alcune delle molte classi ACE ho usato sono l'ACE_Reactor, ACE_Time_Value, ACE_Svc_Handler, ACE_Message_Queue, ACE_Connector. ACE è stato un fattore chiave per il successo del nostro progetto. Ci vuole uno sforzo significativo per capire come utilizzare le classi ACE. Ho tutti i libri scritti su ACE. Ogni volta che ho dovuto estendere le funzionalità il nostro sistema è in genere richiede un po 'di tempo per studiare cosa fare e quindi la quantità di codice necessario è molto piccolo. Ho trovato ACE per molto affidabile. Io uso anche un po 'di codice da Boost. Non vedo la stessa funzionalità in Boost. Vorrei usare una o entrambe le librerie.

Recentemente ho trovato un nuovo lavoro e lavorare su un progetto che utilizza ACE e TAO. Beh, quello che posso dire è che ACE e il lavoro TAO e completamente realizzare i loro compiti. Ma l'organizzazione generale e la progettazione delle librerie sono abbastanza scoraggiante ...

Ad esempio, la parte principale di ACE è composto da centinaia di classi che iniziano con "ACE_". Sembra che hanno ignorato i namespace per decenni.

Inoltre, molti dei nomi delle classi di ACE non forniscono informazioni utili sia. Oppure si può indovinare che cosa classi come ACE_Dev_Poll_Reactor_Notify o ACE_Proactor_Handle_Timeout_Upcall può essere utilizzato per?

Additonally, la documentazione di ACE è davvero carente, quindi a meno che non si vuole imparare ACE nel modo più duro (è davvero difficile senza alcuna buona documentazione ..), non voglio raccomandare usando ACE, a meno che non si ha realmente bisogno TAO per CORBA , Se non avete bisogno di CORBA, andare avanti e usare alcune librerie moderne ..

Le librerie ACE socket sono solidi. Se si sta cercando di porto un'implementazione standard di prese non si può andare storto. Il codice ACE attacca ad un paradigma di sviluppo rigida. I costrutti di livello superiore sono un po 'di confusione per l'uso. Il paradigma rigida causa alcune anomalie con gestione delle eccezioni. Ci sono o usati per essere situazioni in cui coppie di valori stringa si passano in un'eccezione con uno della coppia essendo nullo causa un tiro eccezione nella eccezione che boggle voi. La profondità della stratificazione di classe è noioso durante il debug. Non ho mai provato le altre librerie, quindi non posso fare un commento intelligente.

Boost gode di uno status "nei pressi di STL" a causa del numero di persone sul comitato standard C ++ che sono anche Boost sviluppatori. Poco e ACE non godono di tale prestazione, e dalla mia esperienza aneddotica Boost è più diffusa.

Tuttavia, POCO nel suo complesso è più incentrata su roba di rete di tipo. Mi attengo a Boost quindi non posso aiutare lì, ma il plus per Boost è la sua (relativamente) uso diffuso.

Boost è grande, ho solo sentito parlare bene di POCO (ma mai utilizzato), ma non mi piace ACE e vorrei evitare in futuro. Anche se si trovano gli appassionati di ACE puoi trovare anche molti detrattori che non tendono ad ottenere con boost o poco (IME), a me che invia un segnale chiaro che ACE non è lo strumento migliore (anche se fa quello che dice sulla latta).

Fuori quelli che ho sempre e solo veramente usato ACE. ACE è un grande quadro di riferimento per applicazioni di networking enterprise multi-piattaforma. E 'estremamente versatile e scalabile ed è dotato di TAO e JAWS per una rapida, potente sviluppo di ORB e / o applicazioni web-based.

Come al passo con esso può essere un po 'scoraggiante, ma c'è un sacco di letteratura su di esso, e il supporto commerciale a disposizione.

E 'un po' pesante, però, quindi per le applicazioni su scala ridotta può essere un po 'di un eccessivo. Leggere il riepilogo per POCO suona come stanno puntando per un sistema che può essere eseguito su sistemi embedded così sto supponendo che possa essere utilizzato in modo molto più leggero. Ora posso dare un vortice: P

Credo che sia davvero questione di un parere, non v'è quasi una risposta giusta.

Nella mia esperienza con la scrittura portatile codice server Win32 / Linux (15+ anni), io personalmente trovo boost / ACE inutilmente gonfio e introduce rischi di manutenzione (altrimenti noto come "inferno DLL") per il piccolo vantaggio che danno.

ACE sembra anche essere terribilmente obsoleto, si tratta di una "libreria C ++", scritto da "programmatori C" nel 90-s e si vede subito a mio parere. Si dà il caso, in questo momento sto re-engineering del progetto scritto con Pico, mi sembra che segue completamente l'ACE idea, ma in termini più contemporanei, non molto meglio a questo.

In ogni caso, per alte prestazioni, le comunicazioni server, eleganti efficienti si potrebbe essere meglio non usare nessuno di loro.

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