Boost
发布
arrow_drop_down
最新发布 (1.90.0)
2025年12月10日
依赖项
本次发布新增了 1个依赖项(在1个库中),并移除了 16个依赖项(在10个库中)。
平台 文件 SHA256 哈希
Unix boost_1_90_0.tar.bz2 49551....fc305
boost_1_90_0.tar.gz 5e93d....7eea9
Windows boost_1_90_0.7z 78413....695b2
boost_1_90_0-bin-msvc-all-32-64.7z d92b9....81303
boost_1_90_0-msvc-14.1-32.exe cd24f....6307e
boost_1_90_0-msvc-14.1-64.exe 6d103....aeafa
boost_1_90_0-msvc-14.2-32.exe 8fe7c....6f4e5
boost_1_90_0-msvc-14.2-64.exe b29c6....7276c
boost_1_90_0-msvc-14.3-32.exe e1528....31b3e
boost_1_90_0-msvc-14.3-64.exe b4b90....cfb4e
boost_1_90_0.zip bdc79....9973c

版本 1.90.0

新库

  • OpenMethod:

    • 使用 C++17 及以上版本,通过 Jean-Louis Leroy 实现的 Open-(multi-)methods。

更新的库

  • Asio

    • 添加了 `execution::inline_exception_handling` 属性,用于描述内联执行时所做的异常处理保证。

    • 添加了 `inline_executor`,它总是内联执行提交的函数。

    • 将 `associated_executor` 的默认候选执行器从 `system_executor` 更改为 `inline_executor`。

    • 添加了 `inline_or_executor<>` 适配器和 `inline_or()` 辅助函数,它将在可能的情况下内联执行,否则委托给另一个执行器。

    • 添加了 `dispatch`、`post` 和 `defer` 的重载,这些重载接受一个函数对象以在目标执行器上运行,并将结果传递给完成处理程序。

    • 添加了 `redirect_disposition` 完成令牌适配器,作为 `redirect_error` 的通用对应项。

    • 使用 `[[deprecated]]` 属性注解了已弃用的项。

    • 添加了一个新的配置参数“reactor”/“reset_edge_on_partial_read”,它决定在使用 `epoll` 时部分读取是否消耗边缘。

    • 添加了新的配置参数“reactor”/“use_eventfd”和“reactor”/“use_timerfd”,它们分别用于确定 `epoll` 后端是否使用 `eventfd` 和 `timerfd`。

    • 添加了 `BOOST_ASIO_DISABLE_TIMERFD` 的缺失预处理器检查。

    • 实现了 `std::source_location` 支持的编译时特性检查,以及 `std::experimental::source_location`。

    • 停止使用已弃用的 `boost::array::c_array()` 函数。

    • 修复了 `asio::awaitable` 移动赋值中的资源泄漏。

    • 修复了 `ssl` 流移动赋值中的内存泄漏。

    • 修复了 `kqueue` 反应器中的线程消毒器问题。

    • 修复了 `io_uring` 后端中的处理程序跟踪参数。

    • 修复了 `boost::asio::detail::null_thread` 中的未使用参数警告。

    • 将基于宏的协程实现更改为确保 `__COUNTER__` 使用时的确定性 case 标签。

    • 修复了同步 SSL 流 `shutdown`,将其 `error::eof` 重新映射为 `async_shutdown` 的方式。

    • 将 Windows 上的 `stream_file` 和 `random_access_file` 改为将文件路径视为 UTF-8 编码的字符串。

    • 在 `experimental::parallel_group` 和 `experimental::ranged_parallel_group` 中添加了检查,以检测空操作集。

    • 移除了 `_FORTIFY_SOURCE` 的解决方法,并为 `ip::basic_resolver_results` 添加了地址长度检查。

    • 修复了 `experimental::coro` 以防止 `max` 作为宏。

    • 更新了对较新 `libc++` 版本的 `std::aligned_alloc` 的检测。

    • 各种文档修复和改进。

    • 请参阅 boost_at:/doc/libs/latest//doc/html/boost_asio/history.html[修订历史]获取更多详细信息。

  • Beast:

    • http::parser 默认拒绝非标准尾部字段。

    • http::basic_parser 为尾部字段使用专用回调。

    • http::field 常量已更新。

    • 修复了 `flat_buffer` 和 `multi_buffer` 中的分配器移动/复制赋值。

    • 修复了 websocket permessage-deflate 在部分消息消耗时出现的错误。

    • http::buffer_body 忽略空块。

    • 添加了 `http::basic_fields::contains` 成员函数。

    • 移除了对 Boost.Preprocessor 和 Boost.StaticAssert 的依赖。

  • Bloom:

    • 添加了批量模式插入和查找以提高性能。

    • 对 `block`、`fast_multiblock32` 和 `fast_multiblock64` 的查找实现进行了无分支处理,从而带来了一些性能提升,尤其是在混合成功/不成功的查询中。

  • Charconv:

    • 修复了 CMake 中用于交叉编译的 quadmath 检测。

    • 修复了一个问题,该问题在于浮点 `to_chars` 中,足够大的缓冲区会出现“不足够大”的错误。

  • Compat:

    • 添加了 `to_underlying.hpp`(由 Braden Ganetsky 贡献)。

  • Container:

  • Conversion:

    • 删除了对 Boost.SmartPtr 的依赖。

  • Core:

    • 在 `boost/core/lightweight_test.hpp` 中定义的 `BOOST_TEST_THROWS` 和 `BOOST_TEST_NO_THROW` 宏的实现已更改,以避免在某些编译器上使用宏时出现编译器警告,尤其是在 `if`/`else` 块中。作为此更改的副作用,宏后的分号现在是必需的。(PR#205

    • 如果编译器提供了 `std::data` 和 `std::size`,则 `boost::data` 和 `boost::size` 现在是它们的别名。这解决了编译器同时找到 `boost::` 和 `std::` 备选方案时可能出现的歧义,例如由于 ADL。(PR#206

  • DLL:

    • 修复了将 `std::error_code` 传递给 `boost::system::error_code&` 的问题。非常感谢 Thomas Klausner 提供的修复。(PR#106

    • 修复了使用 CMake 的安装。非常感谢 Yury Bura 提供的修复。(PR#103

    • 修复了 `size` 变量的遮蔽。

  • DynamicBitset:

    • 添加了 C++20 迭代器。

    • 允许选择底层容器类型。

    • 添加了 C++20 或更高版本编译时的 constexpr 支持。

    • 提高了 push_back(), pop_back() 和 lowest_bit() 的效率。

    • 使从 basic_string 的构造函数显式。

    • 移除了几个依赖项。

    • 添加了 push_front(), pop_front(), find_first_off(), find_next_off() 以及从 C 风格字符串和 basic_string_view(后者在 C++17 或更高版本中)构造。

    • 更改了流插入器,以便在输出期间抛出异常时设置 badbit。

    • 使流提取器重新抛出来自底层向量的任何异常。

    • 将文档移植到 MrDocs 和 Antora。

  • Filesystem:

    • 在 `permissions` 操作成功完成时,清除传递的 `error_code` 参数。(PR#338

    • 在 Windows 上,为 Samba 3.0.2 共享(需要 SMB 签名)导致 `directory_iterator` 构造函数出现“无效签名”错误的情况添加了解决方法。(#334

  • Flyweight:

    • 修复了 Clang 19 及更高版本中由于支持 P0522R0 而导致的编译错误。

  • 几何:

  • GIL:

  • Interprocess:

  • JSON:

    • 移除了对 Boost.Align 和 Boost.StaticAssert 的依赖。

    • 切换到更快的哈希算法。

  • LexicalCast:

    • 增加了更多针对浮点特殊值到整数和布尔值转换的测试和修复。修复了从 `float` 到 `bool` 进行词法转换时的编译器警告 C4804。

    • 删除了对 Boost.TypeTraits 的依赖。非常感谢 Romain Geissler 完成了大部分工作。(PR#87

    • 从隐式转换为显式类型转换,以避免编译器警告。非常感谢 bmagistro 的 PR。(PR#85

    • 修复了文档中的错误。非常感谢 ivanpanch 的 PR。(PR#86

    • 修复了 `unsigned short` 到 `wstring` 转换时没有 `wchar_t` 内置类型出现的回归。

  • Locale:

    • 修复了 B2 构建文件,以避免在只请求静态库时构建各种 Boost 库的动态版本。(PR#266

    • 当请求 ISO8859-1 或 ISO8859-8 编码时,允许使用 Windows 代码页 1252 或 1255,而不是在所选 Windows 代码页不支持该 ISO8859 编码时使用“C”(经典)区域设置。

    • 为 Cygwins stdlib 中将某些长 UTF-8 序列转换为 UTF-16 时的一个问题启用了解决方法。

  • Log:

    • 修复了 `value_ref` 访问中遗漏的优化。

    • 修复了 `text_file_backend` 中日志文件轮换可能出现的长而无用的循环。如果日志文件名模式不包含文件计数器且日志文件大小超过 `rotation_size` 限制,则接收器后端将反复尝试打开具有不同计数器值的新日志文件,并最终每次都打开同一个文件。(#252

    • 使 `text_file_backend` 中的文件大小检查更能抵抗整数溢出。

  • 数学:

    • 添加了新的子库:反向模式自动微分。

    • 添加了新常量:`log_pi`。

    • 为 `logit`、`logistic_sigmoid` 和 `logistic` 分布添加了适当的提升策略支持。

    • 对特殊函数进行了大量的修复和边缘情况处理。

  • Mp11:

    • 更新了 `mp_reverse_fold` 以在固定大小列表上工作

  • MQTT5:

    • 移除了对 Boost.Spirit 的依赖。

    • 自动重连现在会在任何传输层错误上触发,而不是仅限于一组有限的白名单。(#38

    • 向 Logger 接口添加了 `at_transport_error` 回调。

  • MSM:

  • Multiprecision:

    • 对较新的 `cpp_double_fp_backend` 的测试和覆盖率进行了显著改进。

  • MySQL:

    • 弃用了对 Clang 4.0 以下版本的支持。这些编译器仍可能工作,但在 CI 中不会被积极测试。

    • 添加了测试以确保与 MySQL 9.x 兼容。

    • 添加了测试以确保与高达 20 的 Clang 版本和高达 15 的 GCC 版本兼容。

  • 解析器:

    • 修复了使用移动独占可调用对象与闭包时出现的格式错误(PR#284

    • 修复了 `GlobalState` 解析器模板参数中令人讨厌的 `const` 不兼容性(#250)。

    • 修复了在某些情况下使用排列解析器时出现的格式错误(#268)。

    • 修复了序列解析中的一个错误,该错误可能导致某些属性被后续解析器覆盖(#279)。

    • 修复了 opt-parsers 的处理问题,该问题可能导致 `std::optional` 属性在解析器失败时仍然包含一个值(#279#285)。

    • 多次运行时优化(#245PR#254PR#255PR#256)。

    • 适度的编译时和代码大小优化(#250)。

    • 使 `transform` 成为 `constexpr`(PR#275)。

    • 迁移与转发警告缓解(#272)。

    • 更正 `if_` 指令的属性类型的文档(#278)。

    • 更正了文档中的许多拼写错误(PR#271)。

  • PFR:

    • 添加了一个基于 C++26 解构到 pack 的实现,该实现**修复了库的绝大多数已知限制**并避免了过度的模板实例化。新的实现可以通过新的 `BOOST_PFR_USE_CPP26` 宏显式启用/禁用。非常感谢 Jean-Michaël Celerier 的 PR(PR#194)。

    • 对 CMake 的多个修复。非常感谢 Alexander Grund 的 PR!

  • Random:

    • 修复了从 SeedSeq 构建 xoshiro 系列生成器。

  • Redis:

    • 关于**取消**的重要更改

      • 改进了 `async_exec()` 中的每个操作支持,并添加了对 `asio::cancel_after` 的支持。请求现在可以在任何时候取消,并且取消不会以任何方式干扰其他请求。Pull request PR#310#226

      • 弃用了 `request::config` 中的 `cancel_on_connection_lost` 和 `cancel_if_not_connected` 标志。要限制 `async_exec` 可能花费的时间,请改用 `asio::cancel_after`。`cancel_on_connection_lost` 的默认值已更改为 `false`。Pull request PR#329PR#334

      • 弃用了使用 `operation::resolve`、`connect`、`ssl_handshake`、`reconnection` 和 `health_check` 调用 `cancel`。用户应改用 `cancel(operation::run)`。Pull request PR#321

      • 为 `async_run()` 添加了对每个操作取消的支持。问题 #319

    • 添加了对使用 `config::setup` 的**自定义设置请求**的支持。设置这些字段时,用户可以用任何其他任意请求替换库生成的 `HELLO` 请求。问题 #302 和 pull request PR#303

    • 弃用了 `request::config::hello_with_priority`。如果您需要优先执行请求,请改用 `config::setup`。Pull request PR#305

    • **Valkey** 长期支持:我们保证从本次发布开始兼容 Valkey。问题 #296

    • 添加了 `request::append()` 函数,用于连接请求对象。问题 #341

    • 健康检查器算法经过重新设计,以避免在重负载下出现误报。现在 `PING` 命令仅在连接空闲时发出,而不是定期发出。问题 #104

    • 添加了 `config::read_buffer_append_size`,它允许控制连接的读取缓冲区的扩展。Pull request PR#283

    • 添加了 `usage::bytes_rotated`,它测量从服务器读取和解析数据时的数据复制。Pull request PR#311

    • 错误修复

      • 修复了在将包含中间错误的响应解析为 `generic_response` 时导致抛出异常的 bug。问题 #287

      • 修复了 `connection` 和 `basic_connection` 的 `cancel()` 函数中的一些竞态条件,这些条件可能导致取消被忽略。问题 #318

      • 密码为空但用户名非默认的用户现在可以正确认证。问题 #298

      • 修复了一个问题,该问题可能导致 `HELLO` 期间的错误使得在重连期间后续的 `HELLO` 尝试失败。问题 #290

      • `HELLO` 期间的错误现在已正确记录。问题 #297

  • SmartPtr:

    • 已移除通过已弃用宏 `BOOST_SP_ENABLE_DEBUG_HOOKS`、`BOOST_SP_USE_STD_ALLOCATOR` 和 `BOOST_SP_USE_QUICK_ALLOCATOR` 启用的功能。

    • 头文件 `<boost/smart_ptr/detail/quick_allocator.hpp>` 已被标记为已弃用,将在未来版本中移除。

    • 不再支持定义 `BOOST_NO_CXX11_HDR_ATOMIC` 的配置;现在需要符合 C++11 标准的 `<atomic>`。

    • 已弃用的宏 `BOOST_AC_USE_SPINLOCK`、`BOOST_AC_USE_PTHREADS`、`BOOST_SP_USE_SPINLOCK` 和 `BOOST_SP_USE_PTHREADS` 不再起作用。

    • 不再使用平台特定的 `atomic_count`、`sp_counted_base` 和 `spinlock` 实现,并已移除。

    • 不再支持定义 `BOOST_NO_CXX11_HDR_MUTEX` 的配置;现在需要符合 C++11 标准的 `<mutex>`。

    • 已从 `boost/smart_ptr/detail/` 中移除了一些未使用的头文件。

  • Stacktrace:

    • 修复了缺失的包含。感谢 Orgad Shaneh 提供的修复!

    • 修复了 `libbacktrace_impls.hpp` 中的 URL。感谢 Jonathan Wakely

  • StaticString:

    • 在 C++26 中,使 `to_static_[w]string()` 与 `std::to_[w]string()` 对齐。

    • 在 `to_static_[w]string()` 中移除了对额外缓冲区的用法。

    • 添加了 `resize_and_overwrite()`。

  • STLInterfaces:

    • 修复了 GCC 14 时的格式错误(PR#80)。

    • 修复了使用移动独占可调用对象与闭包时出现的格式错误。

  • Test:

    • 修复了 Windows Clang 上的几个警告。

  • TypeIndex:

    • 删除了对 Boost.Core 的依赖。

    • 也在 CMake 中运行了所有测试。非常感谢 Alexander Grund 提供的一些修复和帮助。

  • URL:

    • `segments_view` 和 `segments_encoded_view` 获得了常量时间迭代器基础的子视图构造函数。

    • 添加了区域 ID 设置器(例如,用于 IPv6 链路本地地址)。

    • 主机设置器现在接受/传播区域 ID。

    • 修复:`resolve` 现在在所有情况下都会复制引用片段(#920)。

    • 修复:`encoded_host_address` 断言会考虑区域 ID。

    • 重构:将 `BOOST_STATIC_ASSERT` 替换为 `BOOST_CORE_STATIC_ASSERT`(#934)。

    • 重构:保留了片段子视图的绝对语义(#939)。

  • Uuid:

    • C++14 及更高版本中的 `string_generator` 现在是 `constexpr`。

    • 添加了头文件 `boost/uuid/constants.hpp`。

    • 将 `boost/uuid/uuid_generators.hpp` 重命名为 `boost/uuid/generators.hpp`。为兼容性保留了旧名称。

  • Variant2:

    • 更多函数被标记为 `constexpr`,包括 `~variant`。这在 C++20 之前无关紧要,但现在很重要。

测试的编译器

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 管理了此次发布。

贡献者

Peter Dimov
Peter Dimov
贡献者
Gennaro Prota
贡献者
Christopher Kormanyos
Christopher Kormanyos
贡献者
Alexander Grund
Alexander Grund
贡献者
Ion Gaztañaga
Ion Gaztañaga
贡献者
Matt Borland
Matt Borland
贡献者
Christian Granzin
贡献者
Nana Sakisaka
Nana Sakisaka
贡献者
Andrey Semashev
Andrey Semashev
贡献者
mzhelyez
贡献者
ivanpanch
贡献者
Rene Rivera
Rene Rivera
贡献者
Anarthal (Rubén Pérez)
Anarthal (Rubén Pérez)
贡献者
Christopher Kohlhoff
Christopher Kohlhoff
贡献者
Klemens Morgenstern
Klemens Morgenstern
贡献者
Mohammad Nejati
Mohammad Nejati
贡献者
Antony Polukhin
Antony Polukhin
贡献者
Alan de Freitas
Alan de Freitas
贡献者
Joaquin M. López Muñoz
Joaquin M. López Muñoz
贡献者
Zach Laine
Zach Laine
贡献者
Dmitry
Dmitry
贡献者
Nigel Stewart
Nigel Stewart
贡献者
spreadsort
spreadsort
贡献者
Maksym Zhelyeznyakov
贡献者
Vissarion Fisikopoulos
Vissarion Fisikopoulos
贡献者
Marcelo Zimbres
Marcelo Zimbres
贡献者
Andreas Buhr
贡献者
Oliver Kowalke
Oliver Kowalke
贡献者
E Kawashima
E Kawashima
贡献者
Tim Blechmann
Tim Blechmann
贡献者
Maksym Zhelyeznyakov
贡献者
Stefan Seefeld
Stefan Seefeld
贡献者
sdarwin
sdarwin
贡献者
James E. King III
James E. King III
贡献者
Bruno Iljazovic
贡献者
Andrew Johnson
Andrew Johnson
贡献者
Emil Dotchevski
Emil Dotchevski
贡献者
Dirk Stolle
Dirk Stolle
贡献者
Glen Fernandes
Glen Fernandes
贡献者
Maksym Zhelyeznyakov
贡献者
Christophe Henry
Christophe Henry
贡献者
henry-ch
贡献者
Vinnie Falco
Vinnie Falco
贡献者
bmagistro
贡献者
Barend Gehrels
Barend Gehrels
贡献者
John Maddock
John Maddock
贡献者
Frank Mori Hess
Frank Mori Hess
贡献者
Samuel Debione
Samuel Debione
贡献者
Tinko Bartels
Tinko Bartels
贡献者
Romain Geissler
Romain Geissler
贡献者
dependabot[bot]
贡献者
braden
braden
贡献者
Erik Bråthen Solem
贡献者
sigbjorn
贡献者
m4xG4
贡献者
warren
warren
贡献者
Vasanth Karanam
贡献者
Niall Douglas
Niall Douglas
贡献者
wmamrak
wmamrak
贡献者
Richard Thomson
Richard Thomson
贡献者
crueter
贡献者
Thomas Kent
Thomas Kent
贡献者
Jeremy W. Murphy
Jeremy W. Murphy
贡献者
Robert Adam
贡献者
Marcos Simental
贡献者
Dong Wang
贡献者
Miguel Company
贡献者
Zayd Rajab
贡献者
Stat1cV01D
贡献者
Ashish Sadanandan
Ashish Sadanandan
贡献者
AnonymousPC
贡献者
Lukas Friembichler
Lukas Friembichler
贡献者
ZHUO Qiang
贡献者
Hans Dembinski
Hans Dembinski
贡献者
Anthony Eden
Anthony Eden
贡献者
Thomas Höhlig
贡献者
Aditya Pillai
贡献者
greg7mdp
贡献者
zs
贡献者
Vladimir Prus
Vladimir Prus
贡献者
EelisVP
贡献者
Anton Gladky
贡献者
Sylvain Joubert
Sylvain Joubert
贡献者
Adem Budak
贡献者
Carlo Bramini
贡献者
chn
贡献者
Sergey Chebotarev
贡献者
Pavel P
贡献者
Joel de Guzman
Joel de Guzman
贡献者
dvtate
贡献者
Yury Bura
Yury Bura
贡献者
Jonathan Wakely
Jonathan Wakely
贡献者
newyork_loki
贡献者
Ta'am
贡献者
Francisco Tapia
Francisco Tapia
贡献者
Konvicka Filip
贡献者
Sébastien Loriot
贡献者
Juan Carlos Arevalo Baeza (JCAB)
贡献者
Arthur O'Dwyer
贡献者
Harsha Totakura
贡献者
me@kennethreitz.org
贡献者
Orgad Shaneh
Orgad Shaneh
贡献者
Hennadii Stepanov
Hennadii Stepanov
贡献者
Jenkins nedprod CI
贡献者
Marshall Clow
Marshall Clow
贡献者
biljazovic
贡献者
zjyhjqs
贡献者
Abhay Kumar
贡献者
chrisse74
chrisse74
贡献者
ericli-splunk
贡献者