提倡倡导 - 需要帮助

时间:2009-09-17 06:36:24

标签: c++ boost

  

可能重复
  Is there a reason to not use Boost?
  What are the advantages of using the C++ BOOST libraries?

好的,高级别的问题是“请告诉我你认为最有效的论据,为什么整个Boost或其某些特定部分应该在我们公司的系统上编译并在软件工程标准中得到认可”。

我需要的详细信息:

  • 很乐意接受两个积极的论点(为什么要安装),以及我可能听到的可能反驳的反驳(见下面的问题背景)。

  • 应该针对技术软件工程团队成员和/或非常技术高级管理人员进行争论 - 换句话说,对于后者,论证的细节可能/应该是虽然技术性很强,但论证的主旨应该是“如何将公司X资金与公司Y资金相比,将其作为将其添加到我们的工具集中的成本”。

问题的背景:

  • 我是一家拥有数百名开发人员的公司的开发人员,其中许多人都使用C ++。

  • 我从我心爱的Perl开发点重新分配到了我正在进行C ++开发的团队。到目前为止,我发现很多我可以在Perl中轻松完成的事情,在C ++中非常困难/繁琐(以foreach循环为例),任何时候我点击其中一个,答案50%可能最终成为“你不能在标准C ++中这样做,但你可以用Boost“

  • 来做到这一点
  • 我们的工具包包括一些传统的RogeWave库,以及非常复古的非常有限数量的Boost库(例如没有正则表达式,没有foreach)。

  • 任何开发都必须使用由Software Engineering团队编译和审查的库。这是一条艰难而快速的规则。

  • 由于各种原因(例如,努力做到这一点;功能与RogeWave相冲突,例如RegEx;安装和使用任何新软件的风险; SE的成本),SE团队对添加新库有一定的抵抗力教育开发人员等...)。如果提供足够的业务需求或主要说服成本/效益比率论证,他们将添加库,但他们的门槛很高。

所以,我正在寻找Boost的哪些部分如此精彩(具有确切的成本/收益估计)的示例,安装它们对于软件工程来说显然是值得的。

提前感谢任何想法/建议/示例。

请不要将此问题标记为主观,因为我正在寻找可衡量的答案,而不仅仅是美妙的感受:)

6 个答案:

答案 0 :(得分:15)

无论我在过去十年里工作过什么,当他们有自己的智能指针类时,我发现了错误 - 通常在几周内。而且,不,我从来没有看过它希望找到错误。

我养成了从TR1 smart pointer proposal发布以下引用的习惯:

  

Boost开发人员发现共享所有权智能指针非常难以正确实现。其他人也做了同样的观察。例如,Scott Meyers [Meyers01]说:

     
    

“STL本身不包含引用计数智能指针,并且编写一个好的指针 - 一直可以正常工作 - 非常棘手,除非必须,否则你不想这样做。我发布了代码对于1996年更有效的C ++中的引用计数智能指针,尽管它基于已建立的智能指针实现并将其提交给经验丰富的开发人员进行广泛的预发布审查,但有效的错误报告已经流行了多年。参考计数智能指针可能失败的微妙方式的数量是显着的。“

  

这个以及我发现的bug的详细分析通常让我将boost libs合并到代码库中。 :)

答案 1 :(得分:10)

在我看来,你这样做是错误的。由于添加新库的提议将遇到很多阻力,因此甚至不必费力争取将作为一个整体。选择你的战斗。

找到知道的特定Boost库(了解您将要使用的应用程序)将非常有用并节省时间和金钱。然后建议添加这些。

我可以轻松列出我发现有用的Boost库,以及为什么我认为它们很棒,但我不知道它们是否会在您的应用程序中使用任何

推动包含单个增强库,然后可能随着时间的推移,其中很多都将包括在内,每个人都可以更简单地包含所有Boost。

答案 2 :(得分:7)

  1. 这是一个不受特定公司控制的开放标准(无许可费用)
  2. 这是跨平台
  3. 专业设计/编写,非常快速/高效的广泛测试
  4. 您的团队可以自行编译开源实现。
  5. Boost很快将成为标准C ++ STL的一部分
  6. 这是2005年关于Dobbs博士讨论即将推出的C ++ 0x标准的一篇略显陈旧的文章。

    http://www.ddj.com/cpp/184401958

答案 3 :(得分:2)

我必须在Solaris系统上使用Roguewave中旧的Vintage.h ++维护一个组件。

在Solaris上,如果我们想使用boost,我们需要使用gcc,或者使用标准的STLport实现的SunStudio(而不是Roguewave)。而且由于Tools.h ++需要旧标准的Roguewave预标准实现 - 在Solaris上 - 我不得不放弃提升。

最后,我重新编写了一些我需要的类似升级功能的简化版本。

如果您处于相同的情况(*),您将无法从Roguewave库移动来轻松提升。在这个操作中有一个不可忽略的成本,例如两个库中的指针容器具有完全不同的接口。

(*)我们不能慢慢地改变旧代码的位来逐步使用boost。在这种情况下,迁移必须是激进的,并且通过更时髦,甚至更好的方式同时更改Tools.h ++的每一次出现。

注意:大多数人都能够在旧项目中逐步使用提升,并且可能会错过一个非常重要的技术点。因此我的否定答案。

答案 4 :(得分:2)

Boost是一个很好的工具,也是我们产品开发中非常宝贵的一部分(如果没有smart_ptr,我们就会迷失方向)......但是因为它的变化如此之快,所以发布的稳定性也会受到影响。

例如,我们很乐意在他们出来的时候尽快推出Boost的新版本,而不必考虑两次。直到我们被1.35线程库中的一个错误所困扰,该错误产生偶然(即难以调试)但是严重错误。幸运的是,我们在向公众发布任何内容之前就确定了这个问题,并且可能会回到1.34。

从那时起,我们就采用了特定的版本,对其进行了广泛的测试,并且在没有令人信服的理由的情况下进行了更新。

答案 5 :(得分:1)

以下是提倡提升的两个建议:

谁在使用Boost?http://www.boost.org/users/uses.html

许多重大项目使用提升:(例如,adobe photoshop,CERN)

提升项目费用http://www.boost.org/development/index.html

聘请团队从头开始编写提升需要多少钱?那里有一个漂亮的(有点花哨的)计算器,有助于将它放在透视中。