boost / ACE



  • Hallo Leuts!

    Seit ein paar Tagen schaue ich mir im Web alle möglichen Artikel und Beispiele zu boost und auch zu ACE an. Ich habe mir das auf meinem Linux-System auch installiert, und muss sagen, beides sind sehr mächtige Pakete.

    Soweit ich das bis jetzt überschaue, bedienen diese Pakete zwar ganz unterschiedliche Anforderungen, aber überlappen doch in einigen Bereichen.

    - boost: Sammlung von libraries
    - ACE: (ziemlich dickes) framework, bestehend aus unterschiedlichen libraries inklusive einiger Pattern-Implementierungen

    Ich suche dabei nach Lösungen für Threading, asynchrones I/O, Trace utilities und eine Reiher anderer Standard-Lösungen, die sich in der Praxis bewährt haben.

    Nun würde ich gerne wissen, ob von Euch jemand zu diesen Paketen Erfahrungen hat, und mir vielleicht sagen kann, inwieweit beides nebeneinander in einem Projekt koexistieren kann? Wo ergänzen sich beide Projekte, woe schliessen sie sich vielleicht sogar aus? Welches Paket ist flexibler zu handhaben und in eigene Entwicklungen zu integrieren?

    Es ist einfach zu viel Stoff, um das ohne eigene Erfahrung selber beantworten zu können. Danke schon mal für Hilfe.

    Grüsse
    emax



  • Hi,
    ich habe bereits mit dem ACE Framework gearbeitet, könnte Dir also einige Fragen dazu beantworten.

    Bei boost sieht es allerdings anders aus. Ich habe mich mit ein paar der Bibliotheken beschäftigt.

    Du solltest genauer formulieren, was Du machen musst.

    • Die Tracing Sachen aus ACE haben wir nicht genommen -haben selber was geschrieben.
    • Fürs Threading nutze ich ACE, weil es enorm leistungsstark und ausgereift ist, allerdings soll boost::threads ja auch sehr gut sein.
    • Des Weiteren habe ich UDP, TCP, Serielle Kommunikation (jeweils Synchron und asynchron) mit ACE implementiert.
    • Ich habe auch schon das TAO framework, welches quasi auf ACE aufsetzt, benutzt, um eine CORBA basierte Anwendung zu erstellen

    Die ACE Mailing List hilft einem relativ gut. Die oft so hoch geschworenen Bücher ACE Programmers Guide und co. sind meiner Meinung nach ihr Geld nicht wert.

    Zu den jeweiligen boost libs gibt es hier einige Spezialisten im Forum.
    Tendentiell spricht nichts dagegen sowohl ACE als auch Boost in einem Projekt einzusetzen.



  • ACE ist ein älteres Framework, das bedeutet natürlich, das es gereift und gut getestet ist. Aber andererseits bevorzugt es eben Programmierstile die man heute in C++ nicht mehr so macht und es ist eben sehr umfangreich.

    Boost dagegen ist ein modernes Framework, was darauf auszielt die Dinge in C++ zu ergänzen, die im Standard fehlen, die man aber zum alltäglichen Programmieren braucht. Daher werden auch einige Dinge von Boost im neuen C++-Standard aufgenommen werden.

    Ich glaube in dem Bereich, den du suchst ist Boost noch nicht so weit. Es gibt zwar schon eine Threading-Library und eine async I/O Library wird gerade aufgenommen. Aber evaluiere die Eigenschaften am besten genau. Es spricht ja auch nichts dagegen Boost und ACE zu benutzen, besonders da Boost einigen Komfort in die C++-Programmierung einführt.



  • Danke für die Tipps.

    Was ich machen möchte ...

    Das ist einn bischen kompliziert. Zum einen werde ich in diesem Jahr ein Projekt technisch leiten, in dem ich sicher vor Fragen stehen werden, die eine Auseinandersetzung mit Boost und/oder ACE erfordern.

    Insbesondere wird für hochperformante Servanwendungen möglicherweise ein Proactor-Pattern sinnvoll werden, und das gibts Fix und Foxi in ACE. Andererseits scheint mir ACE ein sehr grosser Dampfer zu sein, der, verglichen mit dem, was ich von Boost gesehen habe, schwerfälliger wirkt. Wirkt, wohlgemerkt, es ist ein Bauchgefühl, nichts Substantiierbares.

    Zum anderen möchte ich mir für die Zukunft einfach eine persönliche Strategie überlegen, mit der ich auch anspruchsvolle Projekte bewältigen kann. Es hat keinen Sinn, komplizierte Architekturen auf der grünen Wiese selber zu bauen, wenn es bereits ausgetestete Libraries von echten Gurus gibt, auch wenn das sicher Spass machen würde: es ist zu teuer.

    Wenn es hier Boost-Spezies gibt, wen (oder wo) kann ich da am besten fragen?

    Grüsse
    emax



  • Also Fragen zu Boost kannst du hier im Subforum oder im C++ Subforum stellen. Entweder jemand liest es oder nicht. Sinnvolle Threadtitel sollten schon sein.

    Ich selbst sehe Boost als unverzichtbar an, egal in welchem Bereich man arbeitet (Spiele, Server, Anwendungen usw.). Man kann Boost auch problemlos mit anderen Libs und Frameworks parallel nutzen. Schliesslich hat es selbst den Anspruch, Standard zu werden. Und viele Boost-Libraries haben es ja bereits in den nächsten ISO-C++2009-Standard geschafft, in dem sie im ISO-C++ TR1 aufgenommen wurden. Kenne auch jemanden, der in seiner Firma C++ für wissenschaftliche Berechnungnen auf Clustern nutzt, und da ist Boost auch mit im Einsatz. Boost wird auch von Adobe offiziell eingesetzt, viele andere Firmen nutzen es auch. Es ist also kein Spielzeug. Boost wird mittlerweile in vielen Büchern ("C++ Kochbuch", "Effektiv C++ Programmierung" u.a.) den Lesern empfohlen und auch behandelt.

    ACE selbst habe ich nie benutzt. Ich weiß nur eines: ich habe versucht ACE anhand der Online-Doku (die wiederrum leider dürftig ist!) zu verstehen. Es gibt ja ein Buch dazu, das man auf jeden Fall bestellen sollte. Aber so wie ich das sehe (ohne Buch), ist ACE ein alter Elefant. Ich weiß nicht, ob das wirkich für neue Projekte eingesetzt werden sollte? Rein von der Benutzungsfreundlichkeit für die Programmierer, die damit arbeiten sollen... die tun mir jetzt schon leid. 😉 Performance außen vor gelassen. Ist aber nur mein pers. _Eindruck_ von ACE... keine praktische Erfahrung.

    Ich würde mich da eher nach Alternativen Umschauen:
    http://www.mico.org/
    http://appinf.com/poco/
    Weiß nicht, ob die das abdecken, was du eigentlich machen willst.

    Du schreibst, es geht um hoch perfomante Server-Anwendungen. Mico ist ja speziell für Corba. Spielt das mit eine Rolle?

    Oder darf es auch kein Framework sein? Sondern nur eine Basis-Library? Dann sollte man sich asio anschauen:
    http://asio.sf.net bzw. http://asio.sourceforge.net/asio-0.3.7/doc/index.html
    Ist auch in Boost akzeptiert und wird in einem der nächsten Release mit ausgeliefert (solange muß/kann man es separat herunter laden). asio wird vielleicht auch in den TR2 aufgenommen. Das C++ Komitee hat zumindest Interesse bekundet. Wenn ihr also mit einer Basis-Lib als Startpunkt auskommt, ist dieser Kandidat auch nicht verkehrt.

    Proactor-Pattern schreibst du?
    http://asio.sourceforge.net/asio-0.3.7/doc/design/designproactor.html

    Zur Zeit gibts leider das Problem, das man unter C++ für alles eine Lösung findet, aber vieles (wie Rüdiger sagt) nach heutigem C++-Stand vom Design her unmodern ist. Das Design von Libraries und Frameworks wird erst jetzt die letzten wenigen Jährchen moderner und somit flexibler und vorallem intuitiver für den Lib-Anwender. Und ACE gehört zu der Zeit die davor war.

    Wenn der C++ TR2 rauskommt (leider erst nach 2009) werden wir auch endlich eine Basis-Netzwerk Bibliothek im Standard haben, und dann wird sich daraus im C++-Netzwerk-Framework-Markt nochmal was ändern (zum besseren).



  • Hallo Artchi,

    danke für die Tipps. Die asio - Implementierung hatte ich auch schon ins Auge gefasst, das könnte ein Weg sein. Mit ACE geht es mir auch so wir Dir: ein Elefant. Allerdings sind dort die wichtigsten Design-Patterns realisiert (Proactor, Reactor, Leader-Follower etc.), ein nicht zu unterschätzender Vorteil. Dummerweise sind diese so tief in das Framework eingebunden, dass es schwierig wäre, sich diese Teile rauszuschnippeln. Die gesamte Implementierung ist viel stärker miteinander verwoben, als das bei Boost der Fall ist: man kann bei boost relativ leicht einzelne Bausteine verwenden, ohne auch alles andere schlucken zu müssen.

    Ich denke, ich werde in Richtung boost weiter recherchieren, zumal es sich zeigt, dass diese Sachen zumnindest teilweise zum Standard werden könnten. Und selbst wenn nicht: alleine die Tatsache, dass das erwogen wird, zeigt, wie gut sich die boost-Sachen in eine portable Programmierung integrieren lassen.

    Grüsse
    emax



  • Naja, du kannst ACE und Boost einfach nicht vergleichen, vorallem was das "verwobene" angeht. ACE ist ein spezielles Framework, wogegen Boost einfach "nur" eine Bibliothekssammlung ist (die Betonung liegt auf Sammlung!). Gut, man könnte ACE vielleicht serviceorientierter Designen, dann wäre alles nicht so verwoben. Aber nun, ACE ist halt ein _alter_ Elefant.

    Boost und Standard: da hast du was falsch verstanden. Boost Libs (es geht nur um einzelne, nicht alle!) sind im nächsten Standard drin. Die kommen da nicht nur vielleicht oder wahrscheinlich rein. Brauchste blos in den TR1 schauen, da steht drin, was heute für C++2009 abgesegnet wurde. Und TR1 ist einfach nur ein Vorstufe oder Eingewöhnungschance für Compiler-Hersteller und Anwender, wenn 2009 alles tuti kompletti fertig ist. boost.regex, boost.smart_pointer u.a. sind im TR1 drin.


Anmelden zum Antworten