ACE vs Boost vs POCO
J'ai travaillé avec le Bibliothèques Boost C++ pour assez un certain temps. J'adore le coup de pouce Asio de la bibliothèque C++ pour la programmation réseau. Cependant, j'ai été introduit à deux autres bibliothèques: POCO et Adaptative de l'Environnement de Communication (IEC) cadre. Je voudrais savoir les bons et les mauvais de chacun.
- ACE est le "nec plus ultra de la programmation réseau couteau de l'armée suisse" pour la programmation en C++, mais la dernière que j'ai vérifié, c'était aussi un monstre énorme dépendance en lui-même.
Vous devez vous connecter pour publier un commentaire.
Comme rdbound dit, Boost a un "près de STL" état. Donc, si vous n'avez pas besoin d'une autre bibliothèque, d'un bâton de Boost. Cependant, j'utilise POCO, car il a des avantages de ma situation. Les bonnes choses à propos de POCO de l'OMI:
Mieux bibliothèque de threads, en particulier une Méthode Active de mise en œuvre. J'aime aussi le fait que vous pouvez définir la priorité de thread.
Plus complet du réseau de la bibliothèque de
boost::asio
. Cependantboost::asio
est également une très bonne bibliothèque.Comprend une fonctionnalité qui n'est pas dans le coup de pouce, comme XML et base de données de l'interface pour n'en nommer que quelques-unes.
Il est plus intégrés à la bibliothèque de Boost.
Il est propre, moderne et compréhensible de code C++. Je trouve qu'il est beaucoup plus facile à comprendre que la plupart des bibliothèques Boost (mais je ne suis pas un modèle de programmation expert :)).
Il peut être utilisé sur beaucoup de plates-formes.
Quelques inconvénients de POCO sont:
Il a peu de documentation. Cela a quelque peu atténué par le fait que la source est facile à comprendre.
Il a une bien plus petite communauté et de l'utilisateur de la base que, disons, coup de pouce. Donc, si vous mettez une question sur Pile Overflow par exemple, vos chances d'obtenir une réponse est inférieure à celle de Boost
Il reste à voir comment il sera intégré à la nouvelle norme C++. Vous savez à coup sûr que ce ne sera pas un problème pour Boost.
Je n'ai jamais utilisé l'AS, donc je ne peux pas vraiment commenter. De ce que j'ai entendu, les gens trouvent POCO plus moderne et plus facile à utiliser que l'AS.
Quelques réponses aux commentaires par Rahul:
Je ne sais pas polyvalent et avancé. Le POCO bibliothèque de threads offre quelques fonctionnalités qui n'est pas dans Boost:
ActiveMethod
etActivity
, etThreadPool
. OMI POCO fils sont également plus faciles à utiliser et à comprendre, mais c'est une question subjective.POCO réseau de la bibliothèque fournit également un soutien pour les protocoles de haut niveau comme HTTP et SSL (peut-être aussi dans
boost::asio
, mais je ne suis pas sûr?).Assez juste.
De bibliothèque intégré a l'avantage de la cohérence du codage, de la documentation et générale "look and feel".
Être multiplate-forme est une caractéristique importante de POCO, ce n'est pas un avantage par rapport à la Stimuler.
Encore une fois, vous ne devriez probablement envisager POCO si elle offre quelques fonctionnalités dont vous avez besoin et qui n'est pas dans le coup de pouce.
J'ai utilisé toutes les trois alors voici ma $, soit 0,02$.
J'ai vraiment envie de voter pour Doug Schmidt et le respect de tout le travail qu'il a fait, mais pour être honnête je trouve ACE légèrement buggé et difficile à utiliser. Je pense que la bibliothèque a besoin d'un redémarrage. C'est dur de dire cela, mais je serais timide loin de l'AS pour l'instant, sauf s'il existe une raison impérieuse d'utiliser TAO, ou vous avez besoin d'une seule base de code à exécuter en C++ sur les deux variantes d'Unix et Windows. TAO est fabuleux pour un certain nombre de problèmes difficiles, mais la courbe d'apprentissage est intense, et il y a une raison CORBA a un certain nombre de critiques. Je pense juste faire vos devoirs avant de prendre une décision à utiliser.
Si vous êtes le codage en C++, boost est dans mon esprit un no-brainer. J'utilise un certain nombre de le faible niveau des bibliothèques et trouve essentiel. Un rapide grep de mon code révèle shared_ptr, program_options, regex, lier, la sérialisation, foreach, property_tree, système de fichiers, le générateur de jetons, divers itérateur extensions, alogrithm, et mem_fn. Ce sont principalement des fonctionnalités de bas niveau qui devraient vraiment être dans le compilateur. Certaines bibliothèques boost sont très générique; il peut être travailler pour les amener à faire ce que vous voulez, mais ça en vaut la peine.
Poco est une collection de classes utilitaires qui fournissent des fonctionnalités pour quelques exemples très concrets de tâches courantes. - Je trouver les bibliothèques sont bien écrits et intuitive. Je n'ai pas à passer beaucoup de temps à l'étude de la documentation ou de l'écriture idiot programmes de test. Je suis actuellement à l'aide de l'Enregistreur, XML, Zip, et Net/SMTP. J'ai commencé à utiliser Poco quand libxml2 m'énervait pour la dernière fois. Il y a d'autres classes je pouvais l'utiliser mais je n'ai pas essayé, par exemple les Données: MySQL (je suis heureux avec mysql++) et Net::HTTP (je suis heureux avec libCURL). Je vais essayer le reste de Poco, mais finalement ce n'est pas une priorité à ce stade.
De nombreux POCO rapport d'utilisateurs de l'utiliser à côté de Boost, il est donc évident qu'il existe des incitations pour les personnes dans les deux projets. Boost est une collection de bibliothèques de haute qualité. Mais il n'est pas un cadre. Comme pour ACE, je l'ai utilisé dans le passé et n'aimez pas le design. En outre, son soutien pour les anciens non-conforme compilateurs a façonné la base de code dans une horrible façon.
Ce qui distingue POCO est un design qui s'adapte et une interface avec la bibliothèque riche en disponibilité qui rappellent celles que l'on obtient avec Java ou C#. À cette époque, la plupart gravement défaut chose de POCO est asynchrone IO.
J'ai utilisé ACE pour un très haut rendement application d'acquisition de données avec des contraintes temps réel. Un seul thread gère I/O de plus de trente TCP/IC connexions socket et un port série. Le code fonctionne sur les versions 32 et 64 bits de Linux. Quelques-uns des nombreux ACE classes que j'ai utilisés sont les ACE_Reactor, ACE_Time_Value, ACE_Svc_Handler, ACE_Message_Queue, ACE_Connector. ACE a été un facteur clé pour la réussite de notre projet. Il prend un effort important de comprendre comment utiliser l'ACE classes. J'ai tous les livres écrits sur l'ACE. Chaque fois que j'ai eu pour étendre les fonctionnalités de notre système, il faut généralement un certain temps pour étudier quoi faire et puis la quantité de code nécessaire est très faible. J'ai trouvé ACE à très fiable. J'ai aussi utilisé un peu de code à partir de Boost. Je ne vois pas les mêmes fonctionnalités dans Boost. Je voudrais utiliser une ou les deux bibliothèques.
J'ai récemment obtenu un nouvel emploi et travail sur un projet qui utilise ACE et TAO. Eh bien, ce que je peux dire c'est que l'AS et le TAO de travail et d'accomplir pleinement sa mission. Mais l'ensemble de l'organisation et de la conception des bibliothèques sont assez intimidant...
Par exemple, la partie principale de ACE se compose de centaines de classes en commençant par "ACE_". Il semble comme ils ont ignoré les espaces de noms pour des décennies.
En outre, de nombreuses ACE les noms de classe de ne pas fournir d'utiles renseignements. Ou pouvez-vous deviner ce que les classes comme
ACE_Dev_Poll_Reactor_Notify
ouACE_Proactor_Handle_Timeout_Upcall
peut être utilisé pour?Additonally, la documentation de l'ACE est vraiment en manque, donc, sauf si vous voulez apprendre ACE à la dure (il est vraiment difficile sans une bonne documentation..), je ne recommanderais PAS à l'aide de ACE, sauf si vous avez vraiment besoin de TAO pour CORBA, Si vous n'avez pas besoin de CORBA, aller de l'avant et à l'utilisation moderne des bibliothèques..
L'AS prise bibliothèques sont solides. Si vous essayez de port standard de mise en œuvre de douilles, vous ne pouvez pas vous tromper. Le code ACE s'en tient à une rigide paradigme de développement. Le niveau supérieur contructs sont un peu déroutant à utiliser. La rigidité de paradigme entraîne certaines anomalies avec la gestion des exceptions. Il y a, ou utilisés à des situations où la valeur de chaîne paires étant passé dans une exception avec un de la paire étant nulle provoque une exception de jeter l'exception boggle vous. La profondeur de la classe de superposition est fastidieux lors du débogage. Je n'ai jamais essayé les autres bibliothèques ne peut donc pas faire un commentaire intelligent.
Boost jouit d'un quasi-STL" statut en raison du nombre de personnes sur le C++ comité des normes de l'oms sont également Stimuler les développeurs. Poco et ACE ne bénéficient pas de cette prestation, et à partir de mon expérience anecdotique Boost est de plus en plus répandue.
Cependant, POCO dans son ensemble est plus centrée autour du réseau-type de choses. Je m'en tiens à Boost donc je ne peux pas vous aider là-bas, mais le plus de Boost est sa (relativement) utilisation généralisée.
Boost est grande, je n'ai entendu de bonnes choses sur POCO (mais jamais utilisé) mais je n'aime pas ACE et d'éviter à l'avenir. Bien que vous trouverez les fans de ACE vous trouverez également de nombreux détracteurs qui vous n'avez pas tendance à obtenir avec boost ou poco (IME), pour moi, qui envoie un signal clair que l'AS n'est pas le meilleur outil (bien qu'il fait ce qu'il dit sur l'étain).
De ceux que je n'ai jamais vraiment utilisé ACE. ACE est un grand cadre pour la croix-plate-forme enterprise applications de mise en réseau. Il est extrêmement polyvalent et évolutif et est livré avec TAO et de la mâchoire pour rapide, puissant de développement de l'ORB et/ou des applications sur le Web.
Se lever à la vitesse avec elle peut être un peu intimidant, mais il y a beaucoup de littérature sur elle, et d'un soutien commercial disponible.
C'est un peu lourd, donc plus petite échelle applications, il peut être un peu exagéré. Lire le résumé pour POCO il sonne comme s'ils en visant un système qui peut être exécuté sur les systèmes embarqués, donc je suis en supposant qu'il peut être utilisé dans une beaucoup plus légère. Je peut maintenant lui donner un tourbillon 😛
Je pense qu'il est vraiment question d'opinion, il n'est pas une bonne réponse.
Dans mon expérience avec l'écriture de portable Win32/Linux code du serveur (+de 15 ans), je trouve personnellement boost/ACE inutilement pléthorique et introduit l'entretien des dangers (autrement connu comme "l'enfer des dll") pour le peu d'avantages qu'ils donnent.
ACE semble aussi être terriblement obsolète, c'est une "bibliothèque c++", écrit par les programmeurs c" dans les années 90-s et il montre vraiment à mon avis. Il arrive, en ce moment je suis re-engineering du projet écrit avec Pico, il me semble complètement suit l'AS de l'idée, mais en plus des termes contemporains, pas beaucoup mieux que.
En tout cas pour la haute performance, efficace, élégant communications de serveur, vous pourriez être mieux de ne pas utiliser l'un d'eux.