tags:

views:

2551

answers:

6

I have been working with the Boost libraries for quite some time. I absolutely love boost asio library for network programming. However I was introduced to two other libraries: POCO and ACE framework. I would like to know the good and bad of each.

+1  A: 

Out of those I've only ever really used ACE. ACE is a great framework for cross-platform enterprise networking applications. It's extremely versatile and scalable and comes with TAO and JAWS for quick, powerful development of ORB and/or Web based applications.

Getting up to speed with it can be somewhat daunting, but there is a lot of literature on it, and commercial support available.

It's somewhat heavy though, so for smaller-scale apps it may be a bit of an overkill. Reading the summary for POCO it sounds like they're aiming for a system that can be run on embedded systems so I'm assuming it can be used in a much lighter way. I may now give it a whirl :P

Gerald
+3  A: 

Boost enjoys a "near STL" status due to the number of people on the C++ standards committee who are also Boost developers. Poco and ACE do not enjoy that benefit, and from my anecdotal experience Boost is more widespread.

However, POCO as a whole is more centered around network-type stuff. I stick to Boost so I can't help you there, but the plus for Boost is its (relatively) widespread use.

rlbond
+8  A: 

As rdbound said boost as a "near STL" status. So if you don't need another library, stick to boost. However, I use POCO because it has some advantages for my situation. The good things about POCO IMO:

  • Better thread library, especially a Active Method implementation. I also like the fact that you can set the thread priority.

  • More comprehensive network library than boost:asio. However boost::asio is also a very good library.

  • Includes functionality that is not in Boost, like XML, database interface, logging to name a few.

  • It is more integrated as one library than boost.

  • It has clean, modern and understandable c++ code. I find it far easier to understand than most of the boost libraries (bu I am not a template programming expert :)).

  • It can be used on a lot of platforms.

Some disadvantages of POCO are:

  • It has limited documentation. This somewhat offset by the fact that the source is easy to understand.

  • It has a far smaller community an user base than lets say boost. So if you put a question on SO for example, your chances of getting an answer are less than for boost

  • It remains to be seen how well it will be integrated with the ne C++ standard. You know for sure that it will not be a problem for boost.

I never used ACE so I can't really comment on it. From what I heard, people find POCO more modern and easier to use than ACE.

EDIT:

Added some answers to the comments by Rahul:

  1. I don't know about versatile and advanced. The POCO thread library provides some functionality that is not in boost: ActiveMethod and Activity, ThreadPool. IMO POCO threads are also easier to use and understand, but this is a subjective matter.

  2. POCO network library provides also support for higher level protocols like HTTP and SSL (possibly also in boost::asio, but I am not sure?).

  3. Fair enough.

  4. Integrated library has the advantage of having consistent coding, documentation and general "look and feel".

  5. Being cross-platform is an important feature of POCO, this is not an advantage in relation to Boost.

Again, you should probably only consider POCO if it provides some functionality you need and that is not in Boost.

Dani van der Meer
From what little I have learned about POCO, things dont seem to add up:1. boost thread seems much more versatile and advanced.2. POCO is more versatile in what ways?3. I am only interested in networking. XML and database do not concern me.4. Integrated as one library? I am not sure if thats a good or bad thing?5. Boost I believe (and that goes for boost::asio also) is also quite crossplatform.
rahul
@Rahul I tried to answer some of your points in the answer.
Dani van der Meer
I haven't looked at POCO recently, but it when I did look at it a few years ago I was put off by the fact that components seemed to use a mixture of licenses. Some used the Boost license, others were GPL. Some of the encryption stuff required a license for commercial use. I don't know what the current licensing situation is with POCO, but I would look at that carefully before using it.
Ferruccio
+1  A: 

Boost is great, I've only heard good things about POCO (but never used) but I don't like ACE and would avoid it in future. Although you will find fans of ACE you will also find many detractors which you don't tend to get with boost or poco (IME), to me that sends a clear signal that ACE is not the best tool (although it does what it says on the tin).

Patrick
ACE has been around for a very long time, and has had to support many legacy platforms over the years. This is one of the reasons why it isn't as modern Boost, for example. A great deal of extremely useful research and literature came out of ACE (see Doug Schmidt's CV) that others have been able to leverage and build on. Naturally, others will learn from mistakes made in older libraries and improve on them. Others will also come up with completely new ways of doing similar things as well. Don't be too hard on ACE.I'm also a big fan of Boost. Admittedly, I've never used POCO.
Void
+1  A: 

Many POCO users report using it alongside Boost, so it is obvious that there are incentives for people in both projects. Boost is a collection of high-quality libraries. But it is not a framework. As for ACE, I have used it in the past and did not like the design. Additionally, its support for ancient non-compliant compilers has shaped the code base in an ugly way.

What really distinguishes POCO is a design that scales and an interface with rich library availability reminiscent of those one gets with Java or C#. At this time, the most acutely lacking thing from POCO is asynchronous IO.

Alex
+1  A: 

I recently got a new job and work on a project that uses ACE and TAO. Well what i can tell is, that ACE & TAO work and fully accomplish their tasks... But the overall organisation and design of the libraries are quite daunting...
For example the mainpart of ACE consists of hundreds of classes starting with "ACE_"... seems like they've ignored namespaces for decades.
Additionally many of ACE's class names dont provide useful information either ...or can you guess what classes like ACE_Dev_Poll_Reactor_Notify or ACE_Proactor_Handle_Timeout_Upcall can be used for ??
Additonally the documentation of ACE is really lacking, so unless you want to learn ACE the hard way (it is really hard without any good documentation..), i would NOT reccomend using ACE, unless you really need TAO for CORBA, if you dont need CORBA, go ahead and use some modern libraries..

smerlin