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
* 下载链接由 C++ 联盟 的拨款支持。

新增库

  • 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<>-based 协程、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 时的移动后使用问题,该问题导致超时时出现 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_ 应用于尾部标头
      • 改进了 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 格式化指定精度的 fixed 问题
  • Cobalt:
    • 删除了 get_executor 返回 const ref 的要求
    • 添加了 experimental/composition。
  • Compat:
    • 添加了 to_array.hpp(由 Ruben Perez Hidalgo 贡献。)
  • Filesystem:
    • 正如 1.84.0 中所宣布的,不再支持 10 之前的 Windows 版本。
    • 在 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 示例
      • 添加枚举以准备 C++17 和 C++23
    • 重大更改
      • 移除已弃用的重新缩放代码
    • 已解决的问题
      • #1309 修复一些缺少的 qbk 包含
      • #1226 #1326 修复环上的额外舍入
      • #1293 #1294 #1295 修复遍历非聚类环的问题
      • #893 #1299 修复非并集条件下的阻塞环
      • #1342 修复与接触组合时丢弃起始转弯的问题
      • #1288 #1345 修复处理(不完美)接触的问题
      • #1279 修复 covered_by 不正确的结果
      • 各种错误和警告的修复
  • 迭代器:
    • function_output_iterator 现在符合 std::output_iterator 概念。(#85)
  • 进程间通信:
  • JSON:
    • 直接序列化。
    • 为 Boost.JSON 类型添加 GDB pretty 打印机。
    • 转换为结构体时忽略未知键。
    • 简化了 value_to 的异常包装行为。
    • 已弃用的初始化列表行为已被移除。
    • 已弃用的类型别名已被移除。
    • 在 ARM64 上的 MinGW 中使用正确的 64 位完整乘法。
    • 修复 parse_into 处理错误大小元组的问题。
    • 检查输入大小是否大于序列允许的大小。
    • 修复 value_ref 在 GCC 14 上出现段错误的问题。
  • LexicalCast:
    • 放弃了对 Boost.Integer 的依赖,从而缩短了编译时间。
  • 日志:
    • 使用 C++ 标准库中的等效项替换了 Boost.Thread 同步原语。这可能会提高多线程性能,但也会对用户产生影响
      • 不再支持 Boost.Thread 线程中断。Boost.Log 不再对 Boost.Thread 用于实现线程中断的 thread_interrupted 异常进行特殊处理。此异常将像任何其他异常一样处理。特别是,现在可以使用挂起的 thread_interrupted 异常调用用户指定的异常处理程序。
      • 对于定时等待操作,超时现在使用 std::chrono 时间单位。这意味着 `bounded_ordering_queue` 和 `unbounded_ordering_queue` 类支持的 `ordering_window`命名参数现在需要一个 `std::chrono::duration` 值,而不是 Boost.DateTime 中的 `boost::posix_time::time_duration`。
      • 如果线程同步原语指示错误,则会抛出 std::system_error 异常,而不是 Boost.Thread 异常类型。
    • strictest_lock 添加了对 C++ 标准库锁类型的支持。
  • 数学:
    • 重大更新。
    • 许多特殊函数和分布现在支持 CUDA (NVCC 和 NVRTC) 和 SYCL
    • 添加了 mapairy、holtsmark 和 saspoint5 分布,请参阅 1163
    • 添加了 landau 分布,请参阅 1159
    • 修复了 beta 分位数中的意外异常,请参阅 1169
  • Mp11:
    • 添加了 mp_lambda (由 Joaquin M Lopez Munoz 贡献)
  • 多精度:
    • 使 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 中所有操作的默认 completion token。这使得诸如 co_await conn.async_connect(params) 的表达式与 conn.connect(params) 的行为相同。请注意,connection 及其类型别名尚未更新以匹配此行为。
    • connection_pool 中的异步函数现在支持按操作取消。
    • 所有异步操作现在都支持 asio::cancel_afterasio::cancel_at 以及类似的 completion token,这些 token 需要绑定 executor 到传递给 asio::async_initiate 的发起操作。
    • connectionany_connection 现在通过 token 的 immediate executor 分派立即完成的操作。
    • 修复了尝试使用先前未连接的 any_connection 时导致崩溃的问题。
    • field 中可能抛出异常的构造函数中删除了不正确的 noexcept 说明符。
    • 修复了可能导致写入缓冲区大小超过配置的缓冲区大小限制的问题。
    • 对文档和示例进行了大量更新,使其更具相关性并反映新的推荐最佳实践。
  • 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 的警告。
    • 多项编译时间的小改进。
  • 进程:
    • (v2)实现了在 Windows 上取消 async_wait。
    • (v2)添加了 FORCE_DISABLE_CLOSE_RANGE
    • (v2)ext:多个针对 BSD 和 Solaris 的 ext 修复。
    • (v2)不可用的 ext 函数现在可以编译并给出 operation_not_supported 错误(包括 IOS)。
    • (v2)多个链接修复。
    • (v2)从链接库中删除了 filesystem - 使用哪个 filsystem 库现在仅影响头文件。
    • (v1)为 1.88 添加了弃用通知。
  • SmartPtr:
    • 不再支持 C++03,需要 C++11 编译器。这包括 GCC 4.8 或更高版本,以及 MSVC 14.0 或更高版本。
    • BOOST_SP_ENABLE_DEBUG_HOOKSBOOST_SP_USE_STD_ALLOCATORBOOST_SP_USE_QUICK_ALLOCATORBOOST_AC_USE_SPINLOCKBOOST_AC_USE_PTHREADSBOOST_SP_USE_SPINLOCKBOOST_SP_USE_PTHREADS 启用的功能已被弃用,对它们的支持将在未来版本中删除。
  • Stacktrace:
    • 添加了 Boost::stacktrace_from_exception CMake target。非常感谢 int mianPR#189
    • 在 MSVC 上进行静态构建时,不导出 boost_stacktrace_impl_return_nullptr。非常感谢 huangqinjinPR#186
    • 修复了在 Windows 操作系统下使用 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
    • 为支持但未通过 __cpp_explicit_this_parameter 公告该支持的最新版本 Clang 和 MSVC 启用推导 this。(PR#68
  • 测试:
    • 修复了对带有虚拟条件的 clang tidy 的支持 PR#348
    • 修复了使用 clang 进行动态链接的问题 PR#431
  • 无序:
    • 重大更新。
    • 添加了基于节点的并发容器 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 pretty-printers。对于使用花哨指针的分配器的容器,只有在为花哨指针类型本身编写了正确的 pretty-printer 时,这些才起作用。
    • 修复了开放寻址容器的 std::initializer_list 赋值问题(PR#277)。
    • 允许将不可复制的可调用对象传递给 std::initializer_list 重载的并发容器的 insert_{and|or}_[c]visit,方法是将可调用对象的 std::reference_wrapper 内部传递给迭代器对重载。
  • URL:
    • 功能:set_params 支持 encoding_opts。(#856
    • 重构:API 中没有弃用的 variant2 别名。(#857
    • 重构:query_rule 一致的解释。(#864
  • UUID:
    • 恢复了在 1.86 中无意丢失的构造 constexpr uuid 的能力。

测试的编译器

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 管理了此版本。