为什么人们似乎暗示我宁愿不使用 Boost?
Why do people seem to insinuate I would rather not use Boost?
经常在这里看到关于 boost 的注释,例如
If you are fine with using Boost...
或
If you can use Boost...
我想知道,这是怎么回事?我应该厌倦什么?当不能我使用boost?不用boost的原因有哪些?在我看来,boost 是对 STL 的一个很好的扩展;有时非常重量级和笨拙,但仍然很棒。
我并不是真的征求有关提升的意见。我宁愿寻找一些具体的例子,在使用 boost 之前我应该三思而后行。
因为它不是 C++ 标准库(当然也不是 STL)的扩展。
它是一个第三方发行版,您必须在本地下载并安装(对于某些 Boost 库,如果您动态 link)在目标系统上。您必须管理和记录相关性。
我不会一一列举不可行的所有场景,但不言而喻,你不能总是使用非标准代码。不是每个人都在一个平台上工作,您可以在这个平台上简单地编写 yum install boost-devel
,编写代码并继续前进。计算机世界远远超出了商用台式 PC。
话虽这么说,大多数避免使用 Boost 的论据都非常薄弱,因为它具有极强的可移植性,而且大多数 Boost 库都是仅包含头文件的(这显着减少了打包开销)。
Seems like a lot of fuzz for nothing
我不认为 "if you can use Boost" 这个短语可以诚实地描述为 "a lot of [fuss]"。
When I can't use boost? In my opinion boost is great extension to STL,
sometimes very heavyweight and clumsy, but great nevertheless.
Boost 不是一个库,而是一个很大程度上独立的库 的集合,具有各自的品质。考虑到这一点,并考虑到我个人是大多数 Boost 的忠实粉丝,以下是我可以想到的不使用某些 Boost 库的一些原因:
- 自 C++11 以来,某些 Boost 库是多余的。
- 一些库没有得到广泛使用,因此需要您项目中的专业知识,当员工离开公司时更换这些知识可能会很昂贵。
- 开发人员出于政治原因而非技术原因必须遵守的公司准则。
- 您不保证将来会继续维护任何 Boost 库。出于简单的商业原因,今天为某些编译器编写的标准 C++ 代码很可能在 10 年后继续与同一供应商的更新编译器一起正常工作。使用 Boost,您必须希望有足够多的有能力的人对长期维护感兴趣。
- 没有任何一个 Boost 库像 C++ 标准库那样广泛地被记录,在无数的书籍和互联网上有如此多的 material。如果您对特定库有一些非常奇特的问题,谁会支持您?当然,使用标准 C++,您找到有相同问题(以及该问题的现有解决方案)的人的机会要高得多。
- 调试某些 Boost 代码可能比调试使用标准库的代码更困难。
除了@LightnessRacesInOrbit 的,我想说还有几个原因:
- Boost 在
.h
和 .hpp
文件中有 lot 代码,您需要将其包含在每个翻译单元中(使用相关部分Boost),并且这些文件充满了复杂和递归的宏使用以及智能 - 但同样是复杂的 - 模板使用。这种组合使您的编译速度大大降低。
- 默认情况下,Boost 并未随处安装,因此您并不总是可以使用它,因为 C++ 和标准 C++ 库是可用的。
- (实际上是一个新的原因)相当大一部分的 Boost 功能已经进入 C++11(更多在 C++14 中,更多在 C++17 中)。因此,到目前为止,对于 Boost 提供的部分功能,标准库甚至语言本身都有替代方案。
主要是维护。
一旦你增加了提升,你就必须保持它。要么获取更新(并维护任何要求更改代码的更改),要么冻结版本并自行修复错误。
两者都是昂贵的和后装的成本。对于一个以几十年为生命周期的项目来说,这样的成本是非常重要的。
经常在这里看到关于 boost 的注释,例如
If you are fine with using Boost...
或
If you can use Boost...
我想知道,这是怎么回事?我应该厌倦什么?当不能我使用boost?不用boost的原因有哪些?在我看来,boost 是对 STL 的一个很好的扩展;有时非常重量级和笨拙,但仍然很棒。
我并不是真的征求有关提升的意见。我宁愿寻找一些具体的例子,在使用 boost 之前我应该三思而后行。
因为它不是 C++ 标准库(当然也不是 STL)的扩展。
它是一个第三方发行版,您必须在本地下载并安装(对于某些 Boost 库,如果您动态 link)在目标系统上。您必须管理和记录相关性。
我不会一一列举不可行的所有场景,但不言而喻,你不能总是使用非标准代码。不是每个人都在一个平台上工作,您可以在这个平台上简单地编写 yum install boost-devel
,编写代码并继续前进。计算机世界远远超出了商用台式 PC。
话虽这么说,大多数避免使用 Boost 的论据都非常薄弱,因为它具有极强的可移植性,而且大多数 Boost 库都是仅包含头文件的(这显着减少了打包开销)。
Seems like a lot of fuzz for nothing
我不认为 "if you can use Boost" 这个短语可以诚实地描述为 "a lot of [fuss]"。
When I can't use boost? In my opinion boost is great extension to STL, sometimes very heavyweight and clumsy, but great nevertheless.
Boost 不是一个库,而是一个很大程度上独立的库 的集合,具有各自的品质。考虑到这一点,并考虑到我个人是大多数 Boost 的忠实粉丝,以下是我可以想到的不使用某些 Boost 库的一些原因:
- 自 C++11 以来,某些 Boost 库是多余的。
- 一些库没有得到广泛使用,因此需要您项目中的专业知识,当员工离开公司时更换这些知识可能会很昂贵。
- 开发人员出于政治原因而非技术原因必须遵守的公司准则。
- 您不保证将来会继续维护任何 Boost 库。出于简单的商业原因,今天为某些编译器编写的标准 C++ 代码很可能在 10 年后继续与同一供应商的更新编译器一起正常工作。使用 Boost,您必须希望有足够多的有能力的人对长期维护感兴趣。
- 没有任何一个 Boost 库像 C++ 标准库那样广泛地被记录,在无数的书籍和互联网上有如此多的 material。如果您对特定库有一些非常奇特的问题,谁会支持您?当然,使用标准 C++,您找到有相同问题(以及该问题的现有解决方案)的人的机会要高得多。
- 调试某些 Boost 代码可能比调试使用标准库的代码更困难。
除了@LightnessRacesInOrbit 的
- Boost 在
.h
和.hpp
文件中有 lot 代码,您需要将其包含在每个翻译单元中(使用相关部分Boost),并且这些文件充满了复杂和递归的宏使用以及智能 - 但同样是复杂的 - 模板使用。这种组合使您的编译速度大大降低。 - 默认情况下,Boost 并未随处安装,因此您并不总是可以使用它,因为 C++ 和标准 C++ 库是可用的。
- (实际上是一个新的原因)相当大一部分的 Boost 功能已经进入 C++11(更多在 C++14 中,更多在 C++17 中)。因此,到目前为止,对于 Boost 提供的部分功能,标准库甚至语言本身都有替代方案。
主要是维护。
一旦你增加了提升,你就必须保持它。要么获取更新(并维护任何要求更改代码的更改),要么冻结版本并自行修复错误。
两者都是昂贵的和后装的成本。对于一个以几十年为生命周期的项目来说,这样的成本是非常重要的。