Frage

Ich habe mit dem C ++ Boost-Bibliotheken schon seit geraumer Zeit. Ich liebe die Boost- Asio C ++ Bibliothek für Netzwerkprogrammierung. Jedoch wurde ich in zwei anderen Bibliotheken eingeführt: POCO und Adaptive Communication Environment (ACE) Rahmen . Ich möchte die guten und schlechten jeder kennen.

War es hilfreich?

Lösung

Wie rdbound sagte Erhöhung einen „in der Nähe von STL“ Status hat. Also, wenn Sie dies nicht tun Notwendigkeit eine andere Bibliothek, Stick zu steigern. Allerdings benutze ich POCO , weil es einige Vorteile für meine Situation hat. Die guten Dinge über POCO IMO:

  • Bessere Thread-Bibliothek, insbesondere eine aktive Methode Implementierung. Ich mag auch die Tatsache, dass Sie die Thread-Priorität festlegen.

  • Weitere umfassende Netzwerk-Bibliothek als boost::asio. boost::asio Allerdings ist auch eine sehr gute Bibliothek.

  • enthält Funktionalität, die nicht in Boost ist, wie XML und Datenbankschnittstelle nur einige zu nennen.

  • Es ist stärker integriert als eine Bibliothek als kurbeln.

  • Es hat sauber, modern und verständlich C ++ Code. Ich finde es viel einfacher zu verstehen als die meisten der Boost-Bibliotheken (aber ich bin kein Template-Programmierung Experten:))

  • .
  • Es kann auf vielen Plattformen verwendet werden.

Einige Nachteile von POCO sind:

  • Es hat eine begrenzte Dokumentation. Diese etwas durch die Tatsache ausgeglichen, dass die Quelle leicht zu verstehen ist.

  • Es hat eine weit kleinere Gemeinde und Nutzerbasis als, sagen wir, zu steigern. Also, wenn Sie eine Frage auf Stack-Überlauf zum Beispiel setzen, Ihre Chancen auf eine Antwort zu bekommen sind kleiner als für Boost-

  • Es bleibt abzuwarten, wie gut es mit dem neuen C ++ Standard eingebunden werden. Sie wissen sicher, dass es kein Problem für Boost-sein wird.

Ich habe selber nie ACE, so kann ich darauf nicht wirklich kommentieren. Von dem, was ich gehört habe, die Menschen finden POCO moderne und einfacher zu bedienen als ACE.

Einige Antworten auf die Kommentare von Rahul:

  1. Ich weiß nicht, über vielseitig und Fortgeschrittene. Die POCO Thread-Bibliothek bietet einige Funktionen, die nicht in Boost ist: ActiveMethod und Activity und ThreadPool. IMO POCO Themen sind auch leichter zu bedienen und zu verstehen, aber das ist eine subjektive Angelegenheit.

  2. POCO-Netzwerk-Bibliothek bietet auch Unterstützung für höhere Protokolle wie HTTP und SSL (möglicherweise auch in boost::asio, aber ich bin mir nicht sicher?).

  3. Na gut.

  4. Integrierte Bibliothek hat den Vorteil, dass konsistente Kodierung, Dokumentation und allgemeine "Look and Feel".

  5. Als Cross-Plattform ein wichtiges Merkmal von POCO ist, ist dies nicht ein Vorteil in Bezug auf Erhöhung.

Auch hier sollten Sie wahrscheinlich nur POCO prüfen, ob es einige Funktionen, die Sie brauchen, und das ist nicht in kurbeln.

Andere Tipps

habe ich verwendet, um alle drei so ist hier meine $ 0,02.

Ich möchte wirklich für Doug Schmidt stimmen und respektieren die alle Arbeit, die er getan hat, aber um ehrlich zu sein, finde ich ACE leicht Buggy und schwer zu bedienen. Ich denke, dass Bibliothek einen Neustart benötigt. Es ist schwer, das zu sagen, aber ich würde scheuen ACE weg für jetzt, es sei denn es besteht ein zwingender Grund ist TAO zu verwenden, oder Sie benötigen einen einzigen Code-Basis C laufen ++ auf beiden Unix-Varianten und Windows. TAO ist fabelhaft für eine Reihe schwieriger Probleme, aber die Lernkurve ist sehr intensiv, und es gibt einen Grund CORBA eine Reihe von Kritikern hat. Ich denke nicht nur Ihre Hausaufgaben, bevor sie eine Entscheidung entweder zu verwenden.

Wenn Sie in C ++ codieren, ist boost in meinem Kopf ein Kinderspiel. Ich verwende eine Reihe der Low-Level-Bibliotheken und finden sie wesentlich. Eine schnelle grep meines Codes zeigt shared_ptr, program_options, regex, bind, Serialisierung, foreach, property_tree, Dateisystem, tokenizer, verschiedene Iterator Erweiterungen, alogrithm und mem_fn. Diese sind meist Low-Level-Funktionen, die wirklich sollten in den Compiler sein. Einige Boost-Bibliotheken sind sehr allgemein gehalten; es kann Arbeit sein, sie zu bekommen zu tun, was Sie wollen, aber es lohnt sich.

Poco ist eine Sammlung von Utility-Klassen, die Funktionalität für einige sehr konkrete gemeinsame Aufgaben bieten. Ich finde, die Bibliotheken sind gut geschrieben und intuitiv. Ich habe nicht viel Zeit zu verbringen Dokumentation studieren oder dumme Testprogramme zu schreiben. Ich bin derzeit mit Logger, XML, Zip und Net / SMTP. Ich begann Poco verwenden, wenn libxml2 mich zum letzten Mal irritiert. Es gibt auch andere Klassen, die ich verwenden könnte, aber nicht versucht haben, z.B. Data :: MySQL (ich bin glücklich mit mysql ++) und Net :: HTTP (Ich bin glücklich mit Libcurl). Ich werde den Rest von Poco versuchen, schließlich, aber das ist keine Priorität an dieser Stelle.

Viele POCO Benutzer abrechnen es neben Boost, so ist es offensichtlich, dass es Anreize für die Menschen in beiden Projekten sind. Boost ist eine Sammlung von qualitativ hochwertigen Bibliotheken. Aber es ist kein Rahmen. Wie bei ACE, habe ich es in der Vergangenheit und nicht wie das Design. Darüber hinaus hat seine Unterstützung für die alten nicht-konforme Compilern der Code-Basis in einer hässlichen Art und Weise geformt ist.

Was wirklich POCO unterscheidet, ist ein Design, das mit Java oder C # skaliert und eine Schnittstelle mit einem reichen Bibliothek Verfügbarkeit erinnert an die man bekommt. Zu diesem Zeitpunkt wird das am schärfsten von POCO fehlt, was ist asynchron IO.

I ACE habe für eine sehr hohe Leistungsdatenerfassungsanwendung mit Echtzeit-Einschränkungen verwendet. Ein einzelner Thread Griffe I / O von mehr als dreißig TCP / IC-Socket-Verbindungen und einer seriellen Schnittstelle. Der Code läuft auf 32- und 64-Bit-Linux. Ein paar der vielen ACE Klassen ich verwendet habe, sind die ACE_Reactor, ACE_Time_Value, ACE_Svc_Handler, ACE_Message_Queue, ACE_Connector. ACE war ein Schlüsselfaktor für den Erfolg unseres Projektes. Es dauert eine erhebliche Anstrengung zu verstehen, wie die ACE-Klassen zu verwenden. Ich habe alle Bücher über ACE geschrieben. Jedes Mal, wenn ich hatte, um alle Funktionen unseres Systems verlängern es dauert in der Regel einige Zeit, zu untersuchen, was die Menge an Code zu tun und dann erforderlich ist sehr klein. Ich habe ACE sehr zuverlässig gefunden. Ich habe auch ein wenig Code von Boost-verwenden. Ich habe nicht die gleiche Funktionalität in Boost-sehen. Ich würde eine oder beide Bibliotheken.

Ich habe vor kurzem einen neuen Job und die Arbeit an einem Projekt, das ACE und TAO verwendet. Nun, was kann ich sagen, ist, dass ACE und TAO Arbeit und vollständig ihre Aufgaben zu erfüllen. Aber die gesamte Organisation und Gestaltung der Bibliotheken sind sehr entmutigend ...

Zum Beispiel besteht der Hauptteil der ACE von Hunderten von Klassen mit „ACE_“ ab. Es scheint, wie sie Namespaces seit Jahrzehnten ignoriert haben.

Darüber hinaus viele der ACE Klassennamen bieten keine nützlichen Informationen auch nicht. Oder können Sie sich vorstellen, welche Klassen wie ACE_Dev_Poll_Reactor_Notify oder ACE_Proactor_Handle_Timeout_Upcall können verwendet werden?

Additonally wird die Dokumentation von ACE wirklich fehlt, so es sei denn, Sie ACE auf die harte Weise lernen wollen (es ohne gute Dokumentation ist wirklich schwer ..), würde ich nicht ACE empfehlen verwenden, es sei denn, Sie wirklich ein href benötigen < = "http://en.wikipedia.org/wiki/TAO_%28software%29" rel = "noreferrer"> TAO CORBA , wenn Sie brauchen CORBA nicht, gehen Sie vor und verwenden einige moderne Bibliotheken ..

Die ACE Socket-Bibliotheken sind solide. Wenn Sie in dem Hafen eine Standard-Implementierung von Sockets versuchen, können Sie nichts falsch machen. Der ACE-Code hält sich an einem starren Entwicklungsparadigma. Die höhere Ebene Konstrukte sind ein wenig verwirrend zu verwenden. Das starre Paradigma verursacht einige Anomalien mit Ausnahmebehandlung. Es gibt oder verwendet, um Situationen zu sein, wo String-Wert-Paare in eine Ausnahme: null mit einer des Paares geführt wird bewirkt, dass eine Ausnahme in der Ausnahme, dass Sie verwirren wird. Die Tiefe der Klasse Schichtung ist mühsam beim Debuggen. Ich habe nie versucht, die anderen Bibliotheken so kann nicht einen intelligenten Kommentar machen.

Boost-genießt ein „in der Nähe von STL“ -Status durch die Zahl der Menschen auf dem C ++ Standards Committee, die auch Entwickler steigern werden. Poco und ACE nicht in den Genuss dieser Leistung, und von meiner anekdotische Erfahrung Boost ist weiter verbreitet.

Allerdings POCO als Ganzes mehr ist um netzwerkartigen Material zentriert. Ich bleibe Boost so kann ich Ihnen nicht helfen, aber das Plus für Boost ist sein (relativ) weit verbreitet.

Boost-groß ist, habe ich nur gute Dinge über POCO gehört (aber nie benutzt), aber Ich mag ACE nicht und würde es in Zukunft vermeiden. Obwohl Sie Fans von ACE finden finden Sie auch viele Kritiker finden, die Sie nicht dazu neigen, mit Boost oder poco (IME) zu bekommen, mir, dass ein klares Signal sendet, dass ACE nicht das beste Werkzeug ist (obwohl es tut, was es sagt auf der Dose).

Von denen, die ich habe immer nur wirklich ACE verwendet. ACE ist ein großer Rahmen für die plattformübergreifende Enterprise-Networking-Anwendungen. Es ist extrem vielseitig und skalierbar und kommt mit TAO und JAWS für eine schnelle, leistungsstarke Entwicklung von ORB und / oder Web-basierten Anwendungen.

Das Aufstehen zu beschleunigen damit etwas entmutigend sein kann, aber es gibt eine Menge Literatur darauf und kommerzielle Unterstützung zur Verfügung.

Es ist etwas schwer aber so für kleinere Anwendungen kann es ein bisschen zuviel des Guten sein. Lesen Sie die Zusammenfassung für POCO klingt es wie sie für ein System sind mit dem Ziel, die auf Embedded-Systemen ausgeführt werden kann, so gehe ich davon aus kann es in einem viel leichter genutzt werden. Ich kann es jetzt geben einen Wirbel: P

Ich denke, es ist wirklich wichtig, eine Meinung, gibt es kaum eine richtige Antwort.

Nach meiner Erfahrung mit dem Schreiben von tragbarem Win32 / Linux-Server-Code (15+ Jahre), ich persönlich boost / ACE unnötig aufgebläht finden und führe Wartung Gefahren (auch als „DLL-Hölle“ genannt) für den kleinen Vorteil, den sie geben.

ACE scheint auch schrecklich veraltet zu sein, es ist ein „c ++ Bibliothek“, geschrieben von „c-Programmierer“ in den 90-er und es zeigt wirklich meiner Meinung nach. Nun ist es so, jetzt bin ich Re-Engineering das Projekt mit Pico geschrieben, wie es mir scheint es, vollständig die ACE Idee folgt, aber in modernere Begriffe, nicht viel besser dazu.

Auf jeden Fall für hohe Leistung, effizient, elegant Server-Kommunikation könnten Sie besser dran, nicht von ihnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top