I have decided that I don't like the C++ boost libraries with just two minor exceptions. The exceptions are the smart pointers that are part of TR1 and boost threads (along with their mutexes and condition variables). They're ok. I haven\'t used all of the rest but I have used
the following:
--filesystem
--named semaphores and named mutexes
--sockets (asio)
--POSIX date/time
I have also looked briefly at the graph library but not actually used it.
In the above cases my criticisms are the same:
- I have found several cases where the code does not work.
Examples include:
- filesystem: has difficulty with UNCs
- named semaphores/mutexes: does not cleanup properly and does not use the underlying WIN32 primitives on MS-Windows.
- sockets: Counterintuitive model that is contrary to the way that BSD sockets work. For example, async_accept does not do an asynchronous accept!
- The source code is template mania. It is VERY hard to understand. Compare this with Poco or ACE where the code does what you would expect, more-or-less how you would expect.
- The code does not have a clean separation for those parts of the implementation that are platform-dependant. This is very hard to do well but Poco manages to pull it off nicely. Boost fails dismally.
The more I look at boost, the less I like it. It seems to me that it is a prime example of what happens when you give a problem to academics to solve. You get a convoluted solution that only appeals to the Elite and is not very practical.
In future, I hope that I get the chance to use Poco for my foundation C++ classes.
No comments:
Post a Comment