ACE vs Boost vs POCO

rah*_*hul 91 c++ boost ace poco-libraries

我已经使用Boost C++库很长一段时间了.我非常喜欢用于网络编程的Boost Asio C++库.然而,我被介绍到另外两个库:POCO自适应通信环境(ACE)框架.我想知道每个人的好坏.

Dan*_*eer 85

正如rdbound所说,Boost具有"接近STL"的地位.因此,如果您不需要其他库,请坚持使用Boost.但是,我使用POCO因为它对我的情况有一些好处.关于POCO IMO的好处:

  • 更好的线程库,尤其是Active Method实现.我也喜欢你可以设置线程优先级的事实.

  • 比网络库更全面boost::asio.不过boost::asio也是一个非常好的图书馆.

  • 包括不在Boost中的功能,例如XML和数据库接口等.

  • 它比Boost更集成为一个库.

  • 它具有干净,现代和易懂的C++代码.我发现它比大多数Boost库更容易理解(但我不是模板编程专家:)).

  • 它可以在很多平台上使用.

POCO的一些缺点是:

  • 它的文档有限.这有点抵消了源易于理解的事实.

  • 它拥有比Boost小得多的社区和用户群.因此,如果您在Stack Overflow上提出一个问题,那么获得答案的机会少于Boost

  • 它将与新的C++标准集成得如何,还有待观察.你肯定知道它不会成为Boost的问题.

我从未使用过ACE,因此我无法对其进行评论.据我所知,人们发现POCO比ACE更现代,更易于使用.

Rahul评论的一些答案:

  1. 我不知道多才多艺和先进.在POCO线程库提供了一些功能,是不是在提升:ActiveMethodActivityThreadPool.IMO POCO线程也更易于使用和理解,但这是一个主观问题.

  2. POCO网络库还支持更高级别的协议,如HTTP和SSL(也可能在boost::asio,但我不确定?).

  3. 很公平.

  4. 集成库的优势在于具有一致的编码,文档和一般的"外观和感觉".

  5. 跨平台是POCO的一个重要特征,这与Boost无关.

同样,你应该只考虑POCO它是否提供了你需要的一些功能,而不是Boost.

  • POCO完全[根据Boost许可证授权](http://pocoproject.org/license.html)(供将来参考). (10认同)
  • 根据我对 POCO 的了解,事情似乎并没有增加: 1. boost 线程似乎更加通用和先进。2. POCO在哪些方面更加通用?3. 我只对网络感兴趣。XML 和数据库与我无关。4. 集成为一个库?我不确定这是好事还是坏事?5. Boost 我相信(对于 boost::asio 也是如此)也是非常跨平台的。 (2认同)
  • Poco 的优势之一是它的编译时间要快得多。因为 Boost 通常依赖于头文件中的大量代码,所以编译时间可能很慢。使用 poco 有更多的动态链接,可以减少编译时间。还有一个安全优势,因为用户可以更新 .so/.dll 而无需重新编译所有内容。 (2认同)

小智 26

我已经使用了所有这三个,所以这是我的0.02美元.

我真的想投票支持Doug Schmidt并尊重他所做的所有工作,但说实话,我发现ACE有些笨拙并且难以使用.我认为图书馆需要重启.这很难说,但是我现在回避ACE,除非有令人信服的理由使用TAO,或者你需要一个代码库来在Unix变种和Windows上运行C++.TAO对于许多困难问题都很棒,但是学习曲线非常激烈,而且CORBA有很多批评者的理由.我想在做决定之前先做好功课.

如果您使用C++进行编码,那么在我看来,提升是一个不费脑子的事情.我使用了许多低级库并发现它们必不可少.我的代码的快速grep揭示了shared_ptr,program_options,regex,bind,serialization,foreach,property_tree,filesystem,tokenizer,各种迭代器扩展,alogrithm和mem_fn.这些主要是低级功能,实际上应该在编译器中.一些boost库非常通用; 让它们做你想做的事可能是有效的,但这是值得的.

Poco是一组实用程序类,它们为一些非常具体的常见任务提供功能.我发现这些库编写得很好,直观.我不必花太多时间学习文档或编写愚蠢的测试程序.我目前正在使用Logger,XML,Zip和Net/SMTP.当libxml2最后一次激怒我时,我开始使用Poco.还有其他类我可以使用但尚未尝试过,例如Data :: MySQL(我很高兴使用mysql ++)和Net :: HTTP(我对libCURL很满意).我最终会尝试其余的Poco,但这不是优先考虑的问题.


Ale*_*lex 20

许多POCO用户报告将其与Boost一起使用,因此很明显,两个项目中的人都有激励措施.Boost是一系列高质量的图书馆.但它不是一个框架.至于ACE,我过去曾经使用它,并不喜欢这个设计.此外,它对古老的不兼容编译器的支持已经以丑陋的方式塑造了代码库.

真正区别于POCO的是一种可扩展的设计,以及具有丰富库可用性的界面,让人想起Java或C#带来的那些.此时,POCO中最缺乏的是异步IO.


小智 11

我已经将ACE用于具有实时约束的非常高性能的数据采集应用程序.单个线程处理来自30多个TCP/IC套接字连接和串行端口的I/O. 代码在32位和64位Linux上运行.我使用的许多ACE类中的一些是ACE_Reactor,ACE_Time_Value,ACE_Svc_Handler,ACE_Message_Queue,ACE_Connector.ACE是我们项目成功的关键因素.理解如何使用ACE类需要付出很大的努力.我有关于ACE的所有书籍.每当我不得不扩展我们的系统功能时,通常需要一些时间来研究要做什么,然后所需的代码量非常小.我发现ACE非常可靠.我还使用了Boost的一些代码.我在Boost中看不到相同的功能.我会使用其中一个或两个库.


sme*_*lin 10

我最近得到了一份新工作,并参与了一个使用ACE和TAO的项目.好吧,我能说的是,ACE和TAO的工作并完全完成了他们的任务.但是图书馆的整体组织和设计非常艰巨......

例如,ACE的主要部分包含数百个以"ACE_"开头的类.好像他们几十年来一直忽略名称空间.

此外,许多ACE的类名也没有提供有用的信息.或者你能猜出类似ACE_Dev_Poll_Reactor_NotifyACE_Proactor_Handle_Timeout_Upcall可以使用哪些类?

另外,ACE的文档确实缺乏,所以除非你想学习ACE的方法很难(没有任何好文档真的很难......),我不建议使用ACE,除非你真的需要TAO用于CORBA,如果你不需要CORBA,继续使用一些现代库..


小智 7

ACE套接字库是可靠的.如果您尝试移植套接字的标准实现,则不会出错.ACE代码坚持严格的开发范式.较高级别的构造使用起来有点混乱.僵化的范例导致一些异常处理异常.有或者曾经是这样的情况:字符串值对被传递到异常中,其中一对为null,导致异常抛出异常将使您陷入困境.调试时,类层次的深度很繁琐.我从未尝试过其他图书馆,因此无法做出明智的评论.


rlb*_*ond 5

由于C++标准委员会中的人数也是Boost开发人员,Boost享有"接近STL"的地位.Poco和ACE不享受这种好处,从我的轶事经验来看,Boost更为普遍.

然而,POCO作为一个整体更多地集中在网络类型的东西.我坚持Boost所以我无法帮助你,但Boost的优势在于它(相对)广泛使用.