Boost C++ 库

...世界上最受尊敬和设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码规范

版本 1.87.0

版本 1.87.0

2024 年 12 月 12 日 00:52 GMT

文档

下载
平台文件SHA256 哈希值
unixboost_1_87_0.tar.bz2af57be25cb4c4f4b413ed692fe378affb4352ea50fbe294a11ef548f4d527d89
boost_1_87_0.tar.gzf55c340aa49763b1925ccf02b2e83f35fdcf634c9d5164a2acb87540173c741d
windowsboost_1_87_0.7zdb6b7d77a2286ebe79d4aa7252c08b051d271fd8b013b6b18bc7a966552c1139
boost_1_87_0.zipf367a218d27b23b568956bacf56d08d2c1d9647211337136be8cac5cb2ff0828
* 这些下载链接由 The C++ Alliance 提供资助。

新库

  • Parser: 用于构建解析器的框架,来自 Zach Laine。

更新的库

  • Asio:
    • 增加了对使用字节跨度和字节跨度序列作为缓冲区序列的支持。这意味着它们可以直接传递给 I/O 操作,例如 async_read
    • 增加了对通用处置的支持,通用处置是一种可用于测试异步操作是否完成且没有错误的类型。这包括 error_codeexception_ptr,但可以通过专门化 disposition_traits 类模板来扩展到用户类型。标准类型 std::error_codestd::exception_ptr 被识别为处置。
    • boost::asio::use_future 完成令牌、基于 boost::asio::awaitable<> 的协程、boost::asio::spawn()boost::asio::experimental::cancellation_condition 增加了处置支持。
    • 增加了 execution_context::service_maker 抽象基类。service_maker 是传递给执行上下文构造函数的对象,允许在上下文构建时添加服务。
    • 增加了 boost::asio::config,它提供对与执行上下文关联的配置参数的访问。该类旨在供 asio 内部使用,或者由构建在 asio 之上的库或用户提供的抽象使用,并且通常用于微调行为,例如启用或禁用某些优化。具体的配置源,例如 boost::asio::config_from_envboost::asio::config_from_concurrency_hintboost::asio::config_from_string,可以传递给 io_contextthread_pool 构造函数。
    • 添加了 Asio 的 io_contextthread_pool 实现识别的初始配置参数集。
    • 移除了一些先前已弃用的工具。
    • 弃用了 basic_io_objectdeadline_timer
    • 为关联的绑定器添加了右值限定的 operator() 重载。
    • 增加了对模块化构建结构的支持。
    • 修复了返回仅移动类型的功能的 spawn()
    • 修复了 co_composed 以使其不需要概念支持。
    • 修复了 epoll 反应器,使其在 fork 后不会尝试重新注册常规文件描述符。
    • 修复了 ssl::detail::engine 移动赋值中的内存泄漏。
    • 修复了定义了 BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING 时的编译错误。
    • 修复了使用 Clang 19 时的编译错误。
    • 更改了 thread_pool::join() 以确保它停止随后使用 thread_pool::attach() 添加到线程池的线程。
    • 修复了传递给 io_uring_prep_write_fixedio_uring_prep_read_fixed 的偏移量,当它们用于面向流的操作时。
    • 有关更多详细信息,请参阅 修订历史
  • Atomic:
    • 修复了内存重新分配时原子等待状态列表的初始化。(#72)
  • Beast:
    • API 更改
      • basic_fields::insert() 添加了 error_code 重载。
      • websocket::stream::get_status 添加了重载,以查询 permessage-deflate 状态。
    • 修复
      • 修复了在 http::basic_stream 中调用 net::dispatch 时发生的 move 后使用错误,这会导致超时时出现 bad_executor 异常。
      • 删除了启动函数中的修改操作。
      • 修复了 teardown_tcp_op 中的取消处理。
      • 在调用 on_finish_impl 之前,在 basic_parser 中设置 state_
      • clamp 函数中删除了 static 说明符。
      • 解决了测试中的 -Wattributes 警告。
      • 解决了测试中无法访问的代码警告。
    • 改进
      • beast::http 命名空间中的类型添加了前向声明头文件
      • 使 http::parser 能够使用带有 error_code 重载的 basic_fields::insert()
      • http::basic_parser 中将 header_limit_ 应用于 trailer 标头
      • 改进了 http::basic_parser 以更早地返回 http::error::header_limit
      • 增加了对模块化 boost 构建结构的支持
    • 致谢
      • Jackarain, Saleh Hatefinya, René Ferdinand Rivera Morell
  • Charconv:
    • 修复了使用 __ibm128 作为 long double 格式对 PPC64LE 架构的支持
    • 修复了 Windows ARM64 平台上的内在函数用法
    • 修复了使用 std::float128_t__float128 格式化具有指定精度的定点数
  • Cobalt:
    • 移除了 get_executor 返回常量引用的要求
    • 添加了 experimental/composition。
  • Compat:
    • 添加了 to_array.hpp (由 Ruben Perez Hidalgo 贡献.)
  • Filesystem:
    • 正如在 1.84.0 中宣布的那样,不再支持 Windows 10 之前的版本。
    • 在 Windows 上,canonical 现在基于 GetFinalPathNameByHandleW WinAPI 函数。 这样做的一个副作用是驱动器盘符被转换为大写,这使得生成的路径更具互操作性。 (#325)
    • v4: 如果输入路径具有尾部目录分隔符,则 canonical 不再在结果路径中生成尾部目录分隔符。
    • 如果使用可转换为 path 的用户定义类型和一个或多个 Source 类型的参数调用 path 构造函数或成员函数,则默认选择转换为 path。 这可以在某些情况下解决参数转换歧义,但也可能导致不太理想的转换路径。 如果需要不同的转换路径,建议用户使用显式类型转换。 (#326)
    • 添加了对 FreeBSD 9 及更早版本上 dirfd 作为宏的情况的解决方法。 (#328)
  • Flyweight:
    • 添加了 concurrent_factory,这是一个基于来自 Boost.Unordered 的并发容器的工厂,可在多线程场景中提供出色的性能。
    • 将先前记录为不抛出的 boost::flyweight 操作标记为 noexcept (问题 #15).
  • Geometry:
    • 改进
      • 在部分代码中使用 using 代替 typedef
      • 在部分代码中使用别名现代化元函数
      • 增加对模块化构建结构的支持
      • 完整的 CMake 覆盖 (添加了 github actions cmake 测试)
      • 改进文档工作流程
      • 更新 Qt 和 WxWidgets 示例
      • 添加 enumerate 以准备 17 和 23
    • 重大更改
      • 移除已弃用的重缩放代码
    • 已解决的问题
      • #1309 修复一些缺失的 qbk 包含
      • #1226 #1326 修复环的额外舍入
      • #1293 #1294 #1295 修复通过非聚集环的遍历
      • #893 #1299 修复非联合条件的阻塞环
      • #1342 修复丢弃与触摸结合的起始转弯
      • #1288 #1345 修复了处理(不完美的)触摸
      • #1279 修复了 covered_by 的不正确结果
      • 各种错误和警告的修复
  • Iterator:
    • function_output_iterator 现在符合 std::output_iterator 概念。(#85)
  • Interprocess(进程间通信):
  • JSON:
    • 直接序列化。
    • 为 Boost.JSON 类型添加 GDB pretty printer。
    • 转换为结构体时忽略未知键。
    • 简化了 value_to 的异常包装行为。
    • 移除了已弃用的 initializer list 行为。
    • 移除了已弃用的类型别名。
    • 在 ARM64 上的 MinGW 上使用正确的 64 位全乘法。
    • 修复了 parse_into 处理错误大小的元组的问题。
    • 检查输入大小是否大于序列允许的大小。
    • 修复了 value_ref 在 GCC 14 上发生段错误的问题。
  • LexicalCast:
    • 删除对 Boost.Integer 的依赖,从而缩短编译时间。
  • Log(日志):
    • 使用 C++ 标准库中的等效项替换了 Boost.Thread 同步原语。这可能会提高多线程性能,但也具有面向用户的后果
      • 不再支持 Boost.Thread 线程中断。Boost.Log 不再特殊处理 thread_interrupted 异常,Boost.Thread 使用该异常来实现线程中断。此异常将像任何其他异常一样处理。特别是,用户指定的异常处理程序现在可能会使用挂起的 thread_interrupted 异常来调用。
      • 对于定时等待操作,超时现在使用 std::chrono 时间单位。这意味着 bounded_ordering_queueunbounded_ordering_queue 类支持的命名参数 ordering_window 现在需要一个 std::chrono::duration 值,而不是来自 Boost.DateTime 的 boost::posix_time::time_duration
      • 如果线程同步原语指示错误,则会抛出 std::system_error 异常,而不是 Boost.Thread 异常类型。
    • strictest_lock 添加了对 C++ 标准库锁类型的支持。
  • Math(数学):
    • 重大更新。
    • 许多特殊函数和分布现在支持 CUDA (NVCC 和 NVRTC) 和 SYCL
    • 添加了 mapairy、holtsmark 和 saspoint5 分布,请参见 1163
    • 添加了 landau 分布,请参见 1159
    • 修复了 beta quantile 中的意外异常,请参见 1169
  • Mp11:
    • 添加了 mp_lambda (由 Joaquin M Lopez Munoz 贡献)
  • Multiprecision(多精度):
    • 使 float128 成为可平凡复制的
    • 即使在非 GNU 模式下,也使 __float128 成为浮点类型
  • MySQL:
    • 实验性 API 的重大更改:
      • 重新设计了 connection_pool 中的线程安全功能,以克服用户体验发现的一些设计缺陷。已将布尔选项 thread_safe 添加到 pool_params(默认为 false)。设置后,某些池函数会更改行为,以便可以安全地并发使用它们。这通过内部创建一个 strand,在需要时分派到它,并重新连接取消信号来实现。当 pool_params::thread_safefalse 时,通常的 Asio 执行器语义适用,没有开销。
      • 已删除 pool_executor_params,替换为 pool_params::connection_executorpool_params::thread_safe
      • 已完全删除 connection_pool::async_get_connection 中的内置超时功能。此函数现在支持每个操作的取消,因此可以使用 asio::cancel_after 实现相同的功能。
      • 销毁 connection_pool 现在会取消未完成的异步操作,就像其他 Asio I/O 对象一样。这可以防止资源泄漏:未完成的 async_run 操作会延长池的生命周期,直到操作完成,这可能导致池对象永远不会被销毁。
      • 如果在连接可用之前取消了 async_get_connection 操作,则该操作现在始终会失败,并显示 client_errc::pool_not_runningclient_errc::no_connection_availableclient_errc::pool_cancelled,具体取决于池的状态(以前,它会失败,并显示 client_errc::timeout 或内部 async_connect 操作遇到的最后一个错误代码)。此信息现在包含在输出诊断对象中。
      • 已删除 client_errc::timeoutclient_errc::cancelled
      • 在未运行的池上调用 async_get_connection 不再立即失败,而是等待调用 async_run
      • sequence 现在返回一个拥有的类型。这使得它可以安全地与延迟异步操作中的 with_params 一起使用。 format_sequence_view 已重命名为 format_sequence
      • sequence 已移动到单独的头文件 boost/mysql/sequence.hpp
    • any_connection、客户端 SQL 格式化(包括 format_sqlwith_params)和 connection_pool 已升级到稳定的 API。
    • 现在建议新代码使用 any_connection,而不是 connection 及其别名 tcp_connectiontcp_ssl_connectionunix_connection
    • 添加了 with_params,一个新的 ExecutionRequest,它封装了一个查询模板字符串和参数以扩展查询。执行时,它使用客户端 SQL 格式化来扩展查询,并将其发送到服务器进行执行。这是运行带有参数的简单查询的新推荐方法。
    • 添加了 with_diagnostics,一个适配器完成令牌,它转换异步函数抛出的异常以包含 diagnostics 对象,以匹配同步抛出函数的工作方式。
    • with_diagnostics(asio::deferred) 现在是 any_connectionconnection_pool 中所有操作的默认完成令牌。这使得诸如 co_await conn.async_connect(params) 之类的表达式的行为与 conn.connect(params) 完全相同。请注意,尚未更新 connection 及其类型别名以匹配此行为。
    • connection_pool 中的异步函数现在支持每个操作的取消。
    • 所有异步操作现在都支持 asio::cancel_afterasio::cancel_at 和类似的完成令牌,这些令牌需要一个绑定的执行器传递给 asio::async_initiate 的初始化。
    • connectionany_connection 现在通过令牌的立即执行器分派立即完成。
    • 修复了一个问题,该问题导致尝试使用以前未连接的 any_connection 时发生崩溃。
    • field 中潜在抛出构造函数中删除了不正确的 noexcept 说明符。
    • 修复了一个可能导致写入缓冲区大小超过配置的缓冲区大小限制的问题。
    • 大幅更新了文档和示例,使其更相关并反映新的推荐最佳实践。
  • Optional(可选):
    • **破坏性更改。** 放弃了对 C++03 的支持。现在需要的最低版本是 C++11;至少需要一些 C++11 功能。
    • 删除对 Boost.Utility 的依赖。
    • 删除对 Boost.Predef 的依赖。
    • 删除对 Boost.StaticAssert 的依赖。
    • 删除对 Boost.Move 的依赖。
    • 更快地实现了一些关系运算。
    • **警告。** 在未来的版本中,我们计划将范围接口引入 optional 中,以便 std::ranges::range<optional<T>> 将为 true。这可能会影响基于诸如 std::ranges::range 之类的谓词做出决策的程序中的重载解析。
    • 标签 in_place_initin_place_init_if 变为 inline constexpr,从而减少了可执行文件中的占用空间。 这解决了 issue #103
  • PFR:
    • 添加了 boost::pfr::for_each_field_with_name 函数。非常感谢 LenaPR#171
    • 对于具有较大尺寸和较少字段数的结构,编译时间得到了显著改进。非常感谢 Zachary WassallPR#120
    • 修复了 pragma 指令。
    • 初步支持 C++20 模块。 更多信息请参见文档。
    • 修复了 core_name14_disabled.hpp 中未使用的变量警告。感谢 Anarthal (Rubén Pérez)PR#183PR#187
    • C++17 中聚合的字段计数默认限制从 100 增加到 200。
    • 修复了关于 GCC 不知道 -Wundefined-var-template 的警告。
    • 多个编译时间方面的细微改进。
  • Process:
    • (v2) 实现了在 Windows 上取消 async_wait。
    • (v2) 添加了 FORCE_DISABLE_CLOSE_RANGE
    • (v2) ext:多个针对 BSD 和 Solaris 的 ext 修复。
    • (v2) 现在不可用的 ext 函数可以编译并给出 operation_not_supported 错误(包括 IOS)
    • (v2) 多个链接修复
    • (v2) 从链接库中移除了 filesystem - 现在使用的 filesystem 库只会影响头文件
    • (v1) 为 1.88 添加了弃用通知。
  • SmartPtr:
    • 不再支持 C++03,需要 C++11 编译器。 这包括 GCC 4.8 或更高版本,以及 MSVC 14.0 或更高版本。
    • 由宏 BOOST_SP_ENABLE_DEBUG_HOOKS, BOOST_SP_USE_STD_ALLOCATOR, BOOST_SP_USE_QUICK_ALLOCATOR, BOOST_AC_USE_SPINLOCK, BOOST_AC_USE_PTHREADS, BOOST_SP_USE_SPINLOCK, 和 BOOST_SP_USE_PTHREADS 启用的功能已被弃用,并且将在未来的版本中删除对其的支持。
  • Stacktrace:
    • 添加了 Boost::stacktrace_from_exception CMake 目标。非常感谢 int mianPR#189
    • 不要在 MSVC 上为静态构建导出 boost_stacktrace_impl_return_nullptr。非常感谢 huangqinjinPR#186
    • 修复了在使用 Windows OS 下的 clang 时与 ole32.libDbgeng.lib 的自动链接。
    • 修复了文档中缺少的命名空间。感谢 Mats TaraldsvikPR#181
    • 修复了 std::exception 缺少的包含。感谢 Julien SchuellerPR#178
    • 修复了 GCC 报告的类型转换错误。感谢 agent_JPR#175
    • 修复了从 CLI 设置 B2 from_exception 功能。感谢 Dmitry ArkhipovPR#194
  • STLInterfaces:
    • 更正了序列容器 swap 的错误记录的要求;预期的返回类型是 void,而不是 bool。 (#71)
    • [[no_unique_address]] 添加到 view_adaptor.hpp 中适配器的数据成员。 (#65)
    • 为支持它的最新版本的 Clang 和 MSVC 启用推导 this,但不要通过 __cpp_explicit_this_parameter 公布该支持。 (PR#68)
  • Test:
    • 修复了对带有虚拟条件的 clang tidy 的支持 PR#348
    • 修复了与 clang 的动态链接 PR#431
  • Unordered:
    • 重大更新。
    • 添加了并发的、基于节点的容器 boost::concurrent_node_mapboost::concurrent_node_set
    • 向并发容器添加了 insert_and_visit(x, f1, f2) 和类似操作,这些操作允许在插入后立即访问元素(相比之下,insert_or_visit(x, f) 仅在插入发生时访问元素)。
    • 使访问在某些 boost::concurrent_flat_set 操作中被独占锁定,以允许安全地修改元素 (PR#265)。
    • 在 Visual Studio Natvis 中,支持使用花哨指针的分配器的任何容器。这适用于任何花哨指针类型,只要为花哨指针类型编写了适当的 Natvis 自定义点“Intrinsic”函数。
    • 为所有容器和迭代器添加了 GDB 美化打印机。对于具有使用花哨指针的分配器的容器,只有在为花哨指针类型本身编写了适当的美化打印机时,这些才能工作。
    • 修复了开放寻址容器的 std::initializer_list 赋值问题 (PR#277)。
    • 允许将不可复制的 callable 传递给并发容器的 insert_{and|or}_[c]visitstd::initializer_list 重载,方法是在内部将 callable 的 std::reference_wrapper 传递给迭代器对重载。
  • URL:
    • feat:set_params 支持 encoding_opts。 (#856)
    • refactor:API 中没有已弃用的 variant2 别名。 (#857)
    • refactor:query_rule 一致的解释。 (#864)
  • UUID:
    • 恢复了构造 constexpr uuid 的能力,该能力在 1.86 中不小心丢失了。

测试的编译器

Boost 的主要测试编译器是

  • Linux
    • Clang, C++03: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++17: 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • GCC, C++03: 4.6.3, 11, 12
    • GCC, C++11: 4.7.3, 4.8.5, 11, 12
    • GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11, 12
    • GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11, 12
    • GCC, C++20: 8.0.1, 9.1.0, 10, 11, 12
  • OS X
    • Apple Clang, C++03: 11.0.3
    • Apple Clang, C++11: 11.0.3
    • Apple Clang, C++14: 11.0.3
    • Apple Clang, C++17: 11.0.3
    • Apple Clang, C++20: 11.0.3
  • Windows
    • Visual C++: 10.0, 11.0, 12.0, 14.0, 14.1, 14.2, 14.3

致谢

Marshall Clow, Glen Fernandes 和 Ion Gaztañaga 管理了此版本。