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评论的一些答案:
我不知道多才多艺和先进.在POCO线程库提供了一些功能,是不是在提升:ActiveMethod和Activity和ThreadPool.IMO POCO线程也更易于使用和理解,但这是一个主观问题.
POCO网络库还支持更高级别的协议,如HTTP和SSL(也可能在boost::asio,但我不确定?).
很公平.
集成库的优势在于具有一致的编码,文档和一般的"外观和感觉".
跨平台是POCO的一个重要特征,这与Boost无关.
同样,你应该只考虑POCO它是否提供了你需要的一些功能,而不是Boost.
小智 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_Notify或ACE_Proactor_Handle_Timeout_Upcall可以使用哪些类?
另外,ACE的文档确实缺乏,所以除非你想学习ACE的方法很难(没有任何好文档真的很难......),我不建议使用ACE,除非你真的需要TAO用于CORBA,如果你不需要CORBA,继续使用一些现代库..
小智 7
ACE套接字库是可靠的.如果您尝试移植套接字的标准实现,则不会出错.ACE代码坚持严格的开发范式.较高级别的构造使用起来有点混乱.僵化的范例导致一些异常处理异常.有或者曾经是这样的情况:字符串值对被传递到异常中,其中一对为null,导致异常抛出异常将使您陷入困境.调试时,类层次的深度很繁琐.我从未尝试过其他图书馆,因此无法做出明智的评论.
由于C++标准委员会中的人数也是Boost开发人员,Boost享有"接近STL"的地位.Poco和ACE不享受这种好处,从我的轶事经验来看,Boost更为普遍.
然而,POCO作为一个整体更多地集中在网络类型的东西.我坚持Boost所以我无法帮助你,但Boost的优势在于它(相对)广泛使用.
| 归档时间: |
|
| 查看次数: |
64038 次 |
| 最近记录: |