Boost C++ 库

...世界上最受尊敬和专家设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

版本 1.70.0

版本 1.70.0

2019年4月12日 格林尼治标准时间06:04

文档

下载
平台文件SHA256 哈希值
Unixboost_1_70_0.tar.bz2430ae8354789de4fd19ee52f3b1f739e1fba576f0aded0897c3c2bc00fb38778
boost_1_70_0.tar.gz882b48708d211a5f48e60b0124cf5863c1534cd544ecd0664bb534a4b5d506e9
Windowsboost_1_70_0.7zae2bb1b35d1f238e72e3f819b42336f4bd27c9ed2092aab5d87818ccb0c9161a
boost_1_70_0.zip48f379b2e90dd1084429aae87d6bdbde9670139fa7569ee856c8c86dd366039d
* 下载链接由 C++ 联盟 的资助支持。

已知问题

这些是来自库作者的补丁,这些补丁在发布时发现太晚而无法修复。请小心,因为它们没有经过正常的测试过程。

新库

  • Outcome: 一组用于报告和处理函数故障的工具,适用于 _直接_ 使用 C++ 异常处理不合适的上下文,作者 Niall Douglas。
  • Histogram: 快速且可扩展的多维直方图,具有方便的 C++14 接口,作者 Hans Dembinski。

已更新的库

  • Asio:
    • 此版本包含许多新功能、错误修复、性能增强和文档改进。显著的变化包括
      • 添加了将自定义 I/O 执行器与 I/O 对象(例如套接字)一起使用的功能。
      • 添加了具有 `initiate` 静态成员函数的新 `async_result` 形式。
      • 更新了协程 TS 支持并将其提升到 `asio` 命名空间。
      • 添加了新的 `DynamicBuffer_v2` 概念,它是可复制构造的。
      • 添加了新的 `async_compose` 函数,它简化了用户定义的异步操作的实现。
      • 添加了 `make_strand` 辅助函数。
      • 放宽了完成条件类型的要求,只要求可移动构造而不是可复制构造。
      • 为 `local::basic_endpoint` 添加了一个构造函数,它接受一个 `string_view`。
      • 将 noexcept 限定符添加到各种函数。
      • 添加了新的 `BOOST_ASIO_DISABLE_VISIBILITY` 配置 `#define`。
      • 启用回收用于使用多态执行器类型擦除函数对象的内存。
      • 更改接收操作以在数据报导向套接字上发生截断(`error::message_size`)时返回正确的传输字节数。
      • 当后端使用 `pthread_cond_timedwait` 时,修复了绝对超时的计算。
      • 更改基于范围的异步连接操作以推断 `EndpointSequence` 迭代器类型。
      • 修复了 `buffer_sequence_begin` 和 `buffer_sequence_end` 以防止隐式转换。
      • 确保在本地操作完成之前将 SSL 握手错误传播到对等方。
      • 在 SSL 关闭时抑制了 `eof` 错误,因为它实际上表示成功。
      • 添加了 OpenSSL 生成 `SSL_ERROR_SYSCALL` 结果而没有关联错误时的回退错误代码。
      • 更改组合异步读写操作以移动缓冲区序列对象。
      • 修复了关于 `OSMemoryBarrier` 弃用的 macOS 特定警告。
      • 修复了在 MSVC 11.0 中使用组合读写操作时发生的编译错误。
      • 改进了 `dispatch`、`post` 和 `defer` 文档。
      • 修复了使用 `system_executor` 时可能发生的 Windows 特定内存泄漏。
    • 有关更多详细信息,请参阅修订历史记录
  • Beast: **重大更新!!!**
    • 某些 API 已更改。
    • 参考在每个新项目旁边显示一个星号 ★。
    • Beast 需要你的帮助!
    • 更多教程,像专业人士一样编写代码!
    • `basic_stream` 和 `tcp_stream` 提供
      • 超时:`async_read_some`、`async_write_some` 在到期时完成 `error::timeout`!
      • 流量整形策略 `simple` 和 `unlimited`,或用户定义的 _RatePolicy_!
      • 使用 P1322R0 将 strand 直接放在套接字上,调用站点不再需要 `bind_executor`!
    • 基类 `async_base` 和 `stable_async_base` 并为你处理所有组合操作样板。
    • `ssl_stream` 提供了具有平面写入优化的可移动、可分配 SSL 流。
    • 所有异步操作都使用 Asio 的 `async_initiate` เพื่อให้สามารถรวมเข้ากับ Coroutines TS ได้อย่างมีประสิทธิภาพ
    • ⚡ **_更快的编译_**,定义 `BOOST_BEAST_SEPARATE_COMPILATION` 并在你的一个 .cpp 文件中 `#include `!
    • 有关更改的完整列表,请参阅完整的发行说明
  • Context:
    • #91:如果创建 ucontext 失败,则清理堆栈
    • #97:在 stack_context 中添加缺少的 BOST_CONTEXT_DECL
    • #98:修复 jump_i386_sysv_macho 向 x87 控制字写入垃圾数据
  • Coroutine2:
    • #28:不要在 pthread_cancel 上崩溃
  • DLL:
    • 新宏 BOOST_DLL_USE_STD_FS。将其定义为 `1` 以使 Boost.DLL 使用 C++17 的 `std::filesystem::path`、`std::system_error` 和 `std::error_code`(#21)。请注意,异常类型从 `boost::system::system_error` 更改为 `std::system_error`,因此请确保更新 `catch`es。
    • 对动态可加载检测和装饰逻辑进行了重大重写。现在,在加载失败的情况下会报告更精确的错误。添加了 `shared_library::decorate()` 函数,该函数返回库的修饰路径,而无需执行任何与平台相关的查询和检测。更喜欢使用 `shared_library::load` 和 `shared_library` 构造函数以获得更好的结果(非常感谢 Loïc Touraine 的工作 PR#23)。
    • CI 强化、文档更新、拼写错误修复、清理和许多可移植性修复。
  • 动态位集:
    • 由于旧 CPU 上未定义的行为,在 MSVC 上禁用了硬件辅助 popcount(在 1.69.0 中添加)。(#33 PR#35
  • Fiber:
    • #191:忽略未使用的参数警告
    • #196:修复 remote_ready_splk_ 上的高争用
  • 文件系统:
    • 修复了 `path` 实现中几个取消引用 `std::string::end()` 的实例。
    • 修复了目录迭代器构造函数和接受对 `error_code` 的引用的操作中内存不足情况下的程序终止问题。(#58
    • 修复了由于缺少 `path` 的静态成员定义而可能导致的链接错误。(#12759
    • 修复了 Linux 上目录迭代器递增操作中可能使用未初始化数据的问题。
    • 为目录迭代器添加了对可移动性的支持。
    • 为 `directory_entry` 添加了文件状态查询重载。这避免了在请求解引用目录迭代器结果的文件状态时,执行相对昂贵的操作系统查询。(PR#55
    • 重新设计了 `current_path` 和 `read_symlink` 的实现,以避免在损坏或被篡改的文件系统上可能出现的内存耗尽。这些函数现在对从操作系统接受的路径大小有一个内部限制,目前为 16 MiB。
    • 增加了 `copy_file` 使用的内部缓冲区的大小。
  • 整数库:
    • 添加了扩展欧几里得算法和模乘逆元函数。(Nick Thompson,PR#11
  • 日志库:
    • 新特性
      • 添加了在文本文件接收器后端收集文件之前生成另一个日志文件名的支持。这允许将追加到现有日志文件与日志文件名中的时间戳和文件计数器结合起来,从而实现文件收集。
    • 更多详细信息,请参阅更新日志
  • 数学库:
    • 新特性
      • 添加 Lanczos 平滑导数
      • 将 `numerical_differentiation.hpp` 从 `boost/math/tools/` 移动到 `boost/math/differentiation/finite_difference.hpp`。
      • 在 `tools/univariate_statistics.hpp` 中添加了均值、方差、偏度、峰度、中位数、基尼系数和中位数绝对偏差。
      • 在 `tools/bivariate_statistics.hpp` 中添加了相关系数和协方差。
      • 在 `tools/signal_statistics.hpp` 中添加了绝对基尼系数、Hoyer 稀疏性、oracle SNR 和 M[sub 2]M[sub 4] SNR 估计器。
      • 在 `tools/norms.hpp` 中添加了总变差、l0、l1、l2 和 sup 范数,以及相应的距离函数。
      • 为多项式添加了移动构造函数,支持复系数,添加了 `.prime()` 和 `.integrate()` 方法。
      • 在 `tools/roots.hpp` 中添加了 `quadratic_roots`。
      • 在 `roots.hpp` 中为牛顿法添加了对复值函数的支持。
      • 添加 Catmull-Rom 插值器。
  • Mp11 库:
    • 将 `mp_invoke` 重命名为 `mp_invoke_q`
    • 添加了 `mp_similar`
    • 添加了 `mp_set_union`、`mp_set_intersection`、`mp_set_difference`
    • 添加了 `mp_not_fn`
    • 添加了 `mp_transform_first`、`mp_transform_second`、`mp_transform_third`
    • 添加了 `mp_filter`
    • 添加了 `mp_eval_if_not`、`mp_eval_or`、`mp_valid_q`
    • 添加了 `mp_back`、`mp_pop_back`
  • 多索引容器库:
    • `size_type` 和 `difference_type` 现在定义为分配器的同名类型。这在绝大多数情况下不会有任何区别,但允许通过用户定义的分配器类型在某种程度上控制生成的内部结构(有关动机,请参阅问题 #17)。目前,参考部分中没有记录此更改(即,它具有半官方状态)。
    • 维护工作。
  • 高精度库:
    • 修复了 traits 类中的各种转换问题,检查与 Boost.Optional 的兼容性。
    • 在检查可转换性时,防止在任何旧类型上实例化 `std::numeric_limits`。请参阅 #98
    • 更新可变精度代码以考虑任意精度整数。请参阅 #103
    • 添加对 XML 序列化存档的支持。
    • 修复了 `mpf_float` 和 `mpfr_float` 中固定精度 iostream 格式化错误。请参阅 #113
    • 为 MPFR 本身可以更好地处理的特殊函数添加了更多重载。
    • 修复了通用 `exp` 实现中可能导致不变量失败的错误。
    • 修复了从浮点数到整数的通用转换,以避免未定义的行为。请参阅 #110
  • PolyCollection 库:
    • 在 Billy O'Neal 报告错误后(PR#9),改进了对有状态分配器和分配器传播 traits 的处理。
    • 修复了内部缓存结构中一个潜在的严重错误。
  • Spirit 库:
    • 删除了对已弃用的 `boost/detail/iterator.hpp` 头文件的引用。PR#432
    • X3
      • 整数解析器现在应该能够处理用户定义的类型。PR#429
      • **注意:**`check_overflow` trait 的默认实现现在依赖于 `std::numeric_limits::is_bounded` 而不是 `boost::integer_traits::is_integral`。
      • 删除了对纯解析的序列。现在它会触发编译时错误,而不是静默地解析序列并将最后一个值作为结果。PR#439
      • 使用 `BOOST_SPIRIT_INSTANTIATE` 修复了 `parse_rule` 实例化的问题,当:
        • 规则没有属性时。PR#455
        • 实际属性的类型与声明规则的类型不同时。PR#456 #457
      • 非常感谢 Xeverous 报告了 #453 中的回归问题。
      • 修复了规则中不需要的属性合成和无转换属性引用传递。#444 PR#449 PR#452
      • 删除了损坏的 1.0#INF 解析器。它的文档记录很差,而且从未工作过。#415 PR#458 #8699
      • 由于错误 PR#449 以及为了简化属性转换,未记录的 `make_attribute` trait 已被删除。PR#460
      • 如果您使用它来解决属性转换中的错误——从这个版本开始,它们应该不再需要了。
      • 整数値解析器现在遵循 `std::numeric_limits::digits10` 的值。PR#469
      • 修复了 `(Min % Base) == 0` 边界情况的 下溢检查。 PR#469
      • 修复了 IgnoreOverflowDigits=true 整数解析器溢出时的输出值。 PR#470
      • 容器属性元素被复制,但没有被移动。 PR#472
      • 删除了 `transform_attribute` 中对引用的特殊处理。 PR#480
    • V2
      • 修复了与 Boost.Endian 的宏名称冲突和命名空间冲突。 PR#349 PR#482
      • utree
        • 由于负值的左移,修复了标签获取器中的 UB。 PR#423
        • 修复了双重转换(`spirit::string -> std::string -> spirit::string`)。 PR#462
      • Qi
        • 为规则跳过类型问题添加了静态断言。 PR#427
        • `check_overflow` trait 的默认实现现在依赖于 `std::numeric_limits::is_bounded` 而不是 `boost::integer_traits::is_integral` PR#429
        • 整数解析器现在应该能够处理用户定义的类型。PR#429
        • **注意:**`check_overflow` trait 的默认实现现在依赖于 `std::numeric_limits::is_bounded` 而不是 `boost::integer_traits::is_integral`。
        • 删除了损坏的 1.0#INF 解析器。它的文档记录很差,而且从未工作过。#415 PR#458 #8699
        • 未记录的 `make_attribute` trait 已合并到 `transform_attribute` trait 中。 PR#471
        • `pre_transform`、`post_transform` 和 `fail_transform` 实用函数已被删除,改为直接使用 transform trait 的 `pre`/`post`/`fail`。 PR#467
        • 整数値解析器现在遵循 `std::numeric_limits::digits10` 的值。PR#469
        • 修复了 `(Min % Base) == 0` 边界情况的 下溢检查。 PR#469
        • 修复了 IgnoreOverflowDigits=true 整数解析器溢出时的输出值。 PR#470
        • 删除了 `transform_attribute` 中对引用的特殊处理。 PR#480
      • Lex
        • 修复了具有用户指定令牌类型的 lexer 默认构造函数中的 UB。 PR#420
    • Classic
      • 修复了当底层迭代器解引用运算符返回非引用类型时,`position_iterator` 形成对局部变量的引用。 PR#422 #9737
  • 堆栈跟踪库:
    • 针对 iOS 32 位 ARM 的构建修复(非常感谢 Ivan Ponomarev 提供的修复 PR#70
    • 修复了多个拼写错误、警告并更新了文档。
  • 测试库:
    • Boost.test v3.10 更多详细信息,请参阅更改日志
    • 重大更改
      • Boost.Test `minimal.hpp` 现在显示弃用警告,
      • 浮点比较的更改可能会导致在此版本之前静默不使用浮点比较逻辑的测试失败,
      • `unit_test_log_formatter` 的内部 API 更改,请参阅详细更改日志,
    • 新功能
      • 浮点比较已扩展到捕获非浮点和算术操作数:像 `BOOST_TEST(3.0001 == 3)` 这样的表达式现在使用 Boost.Test 的浮点支持,
      • 自定义数据集不再需要声明 `sample` 类型字段,
      • 将模板测试用例从 `std::tuple` 扩展到任何可变参数定义,
      • Windows 对定时测试的支持,
      • 测试套件上的定时测试,
      • 删除了对 Boost.Timer 的依赖,
      • 新的宏 BOOST_TEST_INFO_SCOPE 用于作用域上下文声明。
      • 改进了 BOOST_TEST_CONTEXT 的语法。
    • 错误修复和拉取请求
  • TypeIndex:
    • 添加了对 GHS C++ 编译器的支持(非常感谢 Brandon Castellano 提供的补丁 PR#28)。
    • 优化了字符串和类型比较(非常感谢 Andrey Semashev 提供的补丁 PR#23)。
    • 修复了 clang-win 编译问题(非常感谢 Peter Dimov 提供的补丁 PR#25)。
    • CI 强化。
  • TypeTraits:
    • 添加了 is_bounded_array 和 is_unbounded_array(Glen Fernandes)。
    • 添加了 copy_reference 和 copy_cv_ref(Glen Fernandes)。
    • 改进了对带 /clr 选项的 msvc 的支持。
    • 其他编译器兼容性修复。
  • Variant:
    • 进行了许多清理和内部改进,非常感谢 Nikita Kniazev(PR#55PR#56PR#57)和 Louis Dionne(PR#51)。
    • CI 强化。
  • uBlas:
    • 添加了张量框架(非常感谢 Cem Bassoy PR#65)。
    • 添加了基本的 OpenCL 支持(非常感谢 Fady Essam PR#59)。
    • 集成了基本的基准测试套件(非常感谢 Stefan Seefeld PR#57)。
    • CI 集成和强化

测试过的编译器

Boost 的主要测试编译器是

  • Linux
    • Clang:3.0、4.0.1、6.0.1
    • Clang,C++0x:3.0
    • Clang,C++11:3.0、3.1、3.2、3.3、3.4、4.0.1、6.0.1、7.0.0、8.0.0
    • Clang,C++14:3.5.0、3.6.0、3.7.1、3.8.0、3.9.1、4.0.0、4.0.1、5.0.2、6.0.1、7.0.0、8.0.0
    • Clang,C++17:5.0.2、6.0.1、7.0.0、8.0.0
    • GCC:4.4.7、4.5.3、4.6.3、5.4.0、8.0.1
    • GCC,C++0x:4.4.7
    • GCC,C++11:4.7.3、4.8.5、4.9.4、5.4.0、6.4.0、7.1.0、8.0.1
    • GCC,C++14:5.4.0、5.5.0、6.4.0、7.1.0、7.3.0、8.0.1
    • GCC,C++17:7.3.0、8.0.1
    • Intel,C++14:18.0
  • OS X
    • Apple Clang:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++11:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++14:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++17:9.1.0、10.0.0
    • Apple Clang,C++1z:9.0.0
    • Apple Clang,C++2a:10.0.0
  • Windows
    • GCC:3.4.5、4.1.2、4.2.4、4.3.3、4.4.0、4.5.4
    • GCC,C++0x:4.6.4
    • GCC,C++11:4.7.3、4.8.1、4.9.3
    • GCC,C++14:5.1.0、5.2.0、5.3.0、6.1.0、6.2.0、6.3.0、6.4.0
    • GCC,C++17:7.1.0、7.2.0、7.3.0
    • Visual C++:7.1、8.0、9.0、10.0、11.0、12.0、14.0、14.1
  • FreeBSD
    • Clang:4.0.0
    • Clang,C++11:4.0.0
    • Clang,C++14:4.0.0
    • Clang,C++1z:4.0.0

Boost 的其他测试编译器包括

  • Linux
    • Clang:3.0、3.8.1、3.9.1、4.0.1、5.0.2、6.0.1
    • Clang,C++0x:3.0
    • Clang,C++11:3.0、3.1、3.2、3.3、3.4、4.0.1、6.0.1、7.0.0、8.0.0
    • Clang,C++14:3.5.0、3.6.0、3.7.1、3.8.0、3.9.1、4.0.0、4.0.1、5.0.2、6.0.1、7.0.0、8.0.0
    • Clang,C++17:5.0.2、6.0.1、7.0.0、8.0.0
    • GCC:4.4.7、4.5.3、4.6.3、4.9.4、5.4.0、5.5.0、8.0.1
    • GCC,C++0x:4.4.7
    • GCC,C++11:4.7.3、4.8.5、4.9.4、5.4.0、6.4.0、7.1.0、8.0.1
    • GCC,C++14:5.4.0、5.5.0、6.3.0、6.4.0、7.1.0、7.3.0、8.0.1、8.1.0
    • GCC,C++17:7.3.0、8.0.1
    • Intel,C++14:18.0
  • OS X
    • Apple Clang:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++11:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++14:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++17:9.1.0、10.0.0
    • Apple Clang,C++1z:9.0.0
    • Apple Clang,C++2a:10.0.0
  • Windows
    • GCC:3.4.5、4.1.2、4.2.4、4.3.3、4.4.0、4.5.4
    • GCC,C++0x:4.6.4
    • GCC,C++11:4.7.3、4.8.1、4.9.3
    • GCC,C++14:5.1.0、5.2.0、5.3.0、6.1.0、6.2.0、6.3.0、6.4.0
    • GCC,C++17:7.1.0、7.2.0、7.3.0
    • Visual C++:7.1、8.0、9.0、10.0、11.0、12.0、14.0、14.1
  • FreeBSD
    • Clang:4.0.0
    • Clang,C++11:4.0.0
    • Clang,C++14:4.0.0
    • Clang,C++1z:4.0.0

致谢

Daniel James、Vladimir Prus、Marshall Clow 和 Michael Caisse 管理了此次发布。