【问题标题】:ACE vs Boost vs Poco vs wxWidgetsACE vs Boost vs Poco vs wxWidgets
【发布时间】:2010-10-20 02:51:10
【问题描述】:

我在ACEBoostwxWidgets 方面拥有丰富的经验。我最近发现了POCO 库。有没有人使用过它们,以及它们在性能和可靠性方面与 ACE、Boost 和 wxWidgets 相比如何?

我对用 POCO 替换 ACE 特别感兴趣。我一直无法让 ACE 使用带有 x64 目标的 VS2008 进行编译。我主要使用 ACE_Task,所以我想我可以用 Poco 的线程和消息队列替换它们。

我感兴趣的 POCO 的其他一些部分是 HTTPServer、HTTPClient 和 LayeredConfiguration。这些库与 Boost 和 wxWidgets 中的库类似,但我尝试将 wxWidgets 的使用限制在 GUI 组件中,并且可比较的 Boost 库......很难。

我对任何人都可以分享的关于 POCO 的任何经验感兴趣,无论好坏。

【问题讨论】:

  • 如果您在使用 ACE 时遇到问题,请通过 riverace.com 联系 Steve Huston - 他已经在 ACE 上工作了很长时间。当我在前一家公司与 ACE 一起工作时,我和他谈到了我们遇到的问题,他很好而且非常乐于助人。我们最终购买了他的支持,每一分钱都值得。
  • 您的标题具有误导性,就好像您在比较苹果和橙子一样。我还是不明白你为什么提到 wx 和 boost?
  • POCO 和 Boost 之间有很大的重叠(例如共享指针、asio、program_options)。同样,POCO 和 wxWidgets 也有不少重叠。

标签: c++ boost ace poco-libraries


【解决方案1】:

我不时使用 POCO 的一部分,发现它是一个非常好的库。几年前我基本上放弃了 ACE,但 POCO 包含一些相同的模式 - Task、Reactor 等。我从来没有遇到过任何问题,所以我不得不假设它是稳定的。

我喜欢的一些方面:

  • 它是一个很好的集成 OOP 层次结构,因此组件之间可以很好地协同工作。它比像 Boost 这样零碎的东西更有凝聚力。

  • 源代码可用且非常清晰。您无需花费大量时间来了解它在做什么(ACE,至少我上次查看源代码)或成为模板向导(Boost)。

  • 组件遵循标准 C++。异常源自 std::exception;他们没有重新发明另一个字符串类等等。

  • 令人惊讶的全面。那里的内容比乍一看要多得多。

缺点:

  • 个人喜好问题,但作者几乎坚持每个头文件一个类的模型,因此您最终会包含许多不同的文件。

  • 文档有限。大多数是 doxygen 类型的 API 页面和一些指向源示例的 PDF。它是可用的,但考虑到库的大小,最初很难确定您是否充分利用了这些组件。

  • 如果围绕它建立了一个活跃的社区,我从未找到它。该软件包由一些欧洲公司维护,他们有一个 wiki,但我发现它并不活跃或有用。

考虑到所有因素,缺点很小。我认为这是一个非常好的图书馆,一定会推荐它。

【讨论】:

    【解决方案2】:

    我从未使用过 ACE,但我使用过 Boost 和 Poco。我真的很喜欢 Poco 的编码风格。包是一致的,源代码易于阅读。它们不像 boost 那样疯狂。以我的经验,我花了几个小时阅读如何使用 boost——序列化包、指针映射容器等——而很少花时间阅读如何使用 Poco 的东西。我会说他们有很好的设计并在需要的地方使用模板。

    不利的一面是,他们有 API 文档,但没有关于如何使用包的大量文档。为此,您通常会查看示例源代码或它们的单元测试源代码。

    我的 HTTPServer 在 Windows/Linux 上运行,没有任何明显错误。

    因此,将其归为 1 种积极体验。

    【讨论】:

      【解决方案3】:

      在我看来,boost 对新的 C++ 库的吸引力最大,其中许多被即将到来的 C++ 标准接受这一事实不言而喻。

      我自己使用 ACE 和 Boost,我选择它们的原因是它们成熟(尤其是 ACE)有一个庞大而强大的用户社区,可以确保它们得到维护和增强,并且我可以获得高质量的专业支持。我们使用Remedy IT 来支持我们的 ACE/TAO,并且非常满意。

      由于 ACE 是一个比 Boost 更古老的库,并且它的目标之一是支持更奇特的(如嵌入式)平台,因此它不像 Boost 那样使用那么多前沿的 C++ 技术。我正在使用 ACE 和 Boost 的混合物,并且对这种组合非常满意。

      我不太明白你为什么把 wxWidgets 放在比赛中,因为它主要是一个图形 UI 库。但是如果我必须做一些 C++ UI 项目,我会选择QT,主要是因为这也是一个广泛使用的库(所有 KDE 桌面都构建在 QT 之上),因此维护得很好,我可以访问庞大的用户群提供问题和支持。

      【讨论】:

      • wxWidgets 确实定义了它自己的字符串和集合类以及许多用于文件/套接字等的跨平台实用程序类。这是 C++ 编译器支持 STL(或模板!)之前的遗产。
      • 一个常见的误解是 wxWidgets 只是 GUI 的东西,但它还有很多。
      • @Jere.Jones QT 也是如此,但这并不意味着我会将它用于非 UI 的东西:-)
      • 对我来说,QT 的问题在于 moc... wxWidgets 可以做很多事情而无需 moc 之类的东西。此外,wxWidgets 可以编译为单独的库,因此您可以只拥有应用程序中使用的部分,这与 QT 不同。 (我可能在这个问题上错了,但我想我不是)
      猜你喜欢
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      相关资源
      最近更新 更多