Boost C++ 库

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

版本 1.86.0

版本 1.86.0

2024 年 8 月 14 日 16:07 GMT

文档

下载
平台文件SHA256 哈希值
unixboost_1_86_0.tar.bz21bed88e40401b2cb7a1f76d4bab499e352fa4d0c5f31c0dbae64e24d34d7513b
boost_1_86_0.tar.gz2575e74ffc3ef1cd0babac2c1ee8bdb5782a0ee672b1912da40e5b4b591ca01f
windowsboost_1_86_0.7z413ee9d5754d0ac5994a3bf70c3b5606b10f33824fdd56cf04d425f2fc6bb8ce
boost_1_86_0.zipcd20a5694e753683e1dc2ee10e2d1bb11704e65893ebcc6ced234ba68e5d8646
* 下载链接由 C++ 联盟的拨款支持。

新库

  • 没有新库。

更新的库

  • Asio:
    • 更改了 default_completion_token 特征的主模板,以选择 deferred 作为默认完成令牌。因此,大多数异步操作的启动函数默认将返回一个延迟的异步操作。
    • 添加了 is_completion_condition 特征,并为 async_readasync_read_atasync_writeasync_write_at 的重载添加了缺失的默认完成令牌。
    • 添加了 is_connect_condition 特征,并在完成令牌为默认值时,使用它来消除 async_connect 重载的歧义。
    • 扩展了完成令牌适配器 as_tuplebind_allocatorbind_cancellation_slotbind_executorbind_immediate_executorredirect_error,以允许它们用作部分完成令牌适配器。
    • 添加了 cancel_aftercancel_at 完成令牌适配器。
    • 更改了所有完成令牌适配器,以确保它们在适配期间正确传播异步操作的 I/O 执行器。
    • co_composed 移出了 experimental 命名空间。
    • 添加了 composed,它从有状态的实现创建启动函数对象。它类似于 co_composed,但用于常规函数对象而不是 C++20 协程。
    • 更改了 detached 完成令牌,使其可以与具有多个完成签名的异步操作一起使用。
    • 更改了 async_initiate,以允许空的完成签名可变参数列表,这表明异步操作永远不会完成。
    • 添加了 async_initiate 的重载,这些重载会自动推导完成令牌的类型。
    • 添加了 async_immediate,它实现了一个立即完成的简单异步操作,如果可用,则使用关联的即时执行器。
    • 启用了基于 SFINAE 的 associator 特征的部分特化。
    • 许多错误修复、编译器/平台兼容性改进和小优化。
    • 各种文档和示例的更新。
    • 有关更多详细信息,请参阅修订历史
  • Atomic:
    • 在 OpenBSD 上使用 futex(2) 系统调用,因为最近的 OpenBSD 版本已删除对 syscall(2) 的支持。
  • Beast:
    • API 变更
      • 添加了 HTTP 状态码 418 I'm a teapot
    • 修复
      • read_size_hint_db() 中的窄化转换。
      • 使用默认完成令牌时,重载会产生歧义。
      • http::basic_fields 移动赋值运算符中位置错误的 static_assert。
      • WebSocket 部分写入操作中 bytes_transferred 的下溢。
      • websocket::stream::read_size_hint() 不会超过 read_message_max
      • 测试中的各种警告。
      • 示例中 SSL 关闭操作的错误处理。
      • 注释 zlib 中的 fallthrough case。
      • basic_stream::ops::transfer_op 中过期计时器的处理。
      • test::basic_stream 构造函数重载中的歧义。
      • http::parser 中最终块的部分解析。
    • 改进
      • server_flex_awaitable 示例中的优雅关闭。
      • 简化的 awaitable 示例。
      • 添加了 fuzzing 目标。
      • 删除了一些示例中多余的 std::bind 用法。
      • ssl_stream 不使用 flat_stream
    • 文档
      • ssl_streamflat_stream 标记为已弃用。
      • net::ssl::stream 在代码片段和示例中是规范的。
      • 添加了 SSL/TLS Shutdown Procedure 部分。
    • 致谢
      • tyler92, Ruslan Zakirov, Orgad Shaneh, Alexander Kernozhitsky
  • Charconv:
    • 修复了对 PPC64LE 架构的支持。
    • 修复了对 Alpine linux 等平台的支持,这些平台提供了 <quadmath.h> 头文件,但没有编译后的库。
    • 修复了整数类型 from_chars 中的第一个字符模式匹配。
    • 修复了基数大于 10 的整数的溢出检测。
    • 添加了对 std::float16_tstd::bfloat16_t 的原生支持,而不是使用交换格式。
  • Cobalt:
    • 添加了对 asio::cancel_after 的支持
    • 使 asio::deferred 可 co_await,因为它​​是 asio 的默认令牌
    • 添加了 noop 实用程序
    • 添加了对堆栈协程/纤程的实验性支持
    • 修复了通道和协程类型的可移动性
  • Compat:
    • 添加了 bind_front.hppbind_back.hppinvoke.hppmem_fn.hppinteger_sequence.hpptype_traits.hpp
    • 添加了 function_ref.hpp
  • Core:
    • 添加了 boost/core/pointer_in_range.hpp 头文件,其中包含一个 pointer_in_range 函数模板,用于检查指针是否在给定范围内 (Glen Fernandes)。
    • 修复了抽象类的 type_name。 (#172)
    • 修复了禁用原生 wchar_t 类型的 MSVC 编译错误 boost/core/type_name.hpp。 (#173)
    • 为 MSVC bug 添加了一个解决方法,该错误在与嵌套类一起使用时会导致 empty_value 编译错误。 (PR#175)
  • CRC:
    • 不再支持 C++03;需要 C++11 编译器。(包括 GCC 4.6 或更高版本,以及 MSVC 10.0 (VS 2010) 或更高版本。)
    • 移除了对 Array、Config、Integer 和 TypeTraits 的依赖。该库现在是独立的。
  • Filesystem:
    • is_empty 操作现在更好地防止并发文件系统修改。
    • 在 POSIX 系统上,如果对除常规文件或目录之外的文件调用 is_empty,则现在指示错误。
    • 在 Windows 上,修复了 file_sizeis_empty 对符号链接而不是符号链接引用的文件进行操作的问题。 (#313)
    • 如果条目引用的文件不存在,directory_entry::refresh 不再抛出异常。这使得 directory_entry::statusdirectory_entry::symlink_status 以及基于它们的方法的行为类似于等效的独立操作。文件不存在的事实仍然通过相应的 directory_entry::refresh 重载返回的 error_code 指示,或者可以通过测试 directory_entry::statusdirectory_entry::symlink_status 调用返回的文件类型是否为 file_type::file_not_found 来查看。 (#314)
    • 修复了 weakly_canonical 测试路径元素是否存在于当前路径而不是调用中指定的基础路径的相对路径,如果输入路径是相对路径。
    • 在 Windows 上,修复了当输入路径以“..”开头时 weakly_canonical 产生不正确结果路径的问题。 (#311)
  • Format:
    • 不再支持 C++03;需要 C++11 编译器。(包括 GCC 4.7 或更高版本,以及 MSVC 12.0 (VS 2013) 或更高版本。)
  • Function:
    • 移除了对 Boost.TypeTraits 的依赖。
    • 带回了在 1.85 中意外丢失的 argN_type typedef。
  • GIL:
    • 已添加
      • istream_deviceostream_device 类添加了 tell()error() 函数 (PR#747)。
    • 已更改
      • 不要忽略 color_converted_view 函数中的自定义颜色转换器 (PR#726)。
      • 为与 WinAPI 上的 min()max() 宏冲突添加了解决方法 (PR#745)。
      • GIL 中 boost::filesystem 的使用现在可以在 CMake 中通过选项 BOOST_GIL_USE_BOOST_FILESYSTEM 进行配置 (PR#743)。
    • 已修复
      • 修复了 convolve_2d 中的卷积 (PR#723)
      • 标准化 Gaussian 2D 内核以避免变暗 (PR#725)
      • 修复了 std::wstring 的路径字符串转换函数中错误的缓冲区大小,避免了在使用与 std::wstring 路径相关的 I/O 函数时发生缓冲区溢出 (PR#746)。
    • 致谢
      • Christoph Gringmuth, Christopher Kormanyos, nicolacandussi, Dirk Stolle, Olzhas Zhumabek
  • Graph:
    • 重大更新:C++14 是新的最低标准;这部分是由依赖关系(至少 C++11)决定的,部分是出于选择。如果您需要支持旧标准,请联系维护者。
    • 移除对 Boost.Regex 的直接依赖。
    • 修复了由于未显式包含通用头文件而导致的几个编译错误。
    • isomorphism: 修复文档,忽略 vertex_max_invariant 参数,转而廉价地计算上限,修复了关联属性映射的错误,将空间效率从最大不变量大小的线性提高到 g1 大小的线性。
    • boykov_kolmogorov_max_flow: 修复了命名参数重载。
    • adj_list_edge_iterator: 修复了可能未初始化的警告。
    • hawick_circuits: 添加了一个参数来选择性地限制搜索深度,从而导致提前返回可能不是最优的答案。
    • disjoint_sets: 通过删除对集合代表的冗余查找来提高 link_sets 的性能。
    • maximum_adjacency_search: 重构和更多测试。
    • property: 使用 BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS 删除浪费的空间。
    • labeled_graph: 修复 remove_labeled_vertex,使其也实际删除标签。
    • r_c_shortest_paths: 修复了单解变体并不总是返回最短路径的错误。
    • read_graphviz: 修复了堆栈溢出 (oss-fuzz issue 66719) 和非关键字子图解析。
    • 许多其他杂项改进:断开的链接、错别字等。
  • JSON:
    • 不推荐支持低于 5.0 版本的 GCC,并将在 Boost 1.88.0 中停止支持
    • 向抛出访问器函数添加了 source_location 参数。
    • 解析选项以容忍无效的 UTF-16 代理对,并生成 WTF-8
    • 添加了返回 system::result 的访问器函数。
    • 处理直接解析中缺失的错误情况。
  • LexicalCast:
    • 修复了包含一个或多个 \0 字符的 std::basic_string_viewboost::basic_string_view 的转换。问题在 1.85.0 中引入。
  • leaf:
    • 更优化的 verbose_diagnostic_info 实现。
    • 错误修复。
    • 向类 result<> 添加了 [[nodiscard]]。
  • Locale:
    • conv::utf_to_utf 中添加了对自定义分配器的支持
    • 默认情况下不构建示例
  • Log:
    • 修复了在 CMake 中用于编译 MinGW-w64 上的事件日志资源文件时,windres.exe 问题的解决方法。 (PR#231)
  • Math:
    • 修正了无穷大处的 Bessel 函数结果,请参阅 1143
    • 提高了非中心 T 数值稳定性,请参阅 scipy20693
    • 修正了无穷大处 float_next/float_prior 的行为。
    • 防止了非中心 beta 中的虚假下溢,请参阅 scipy20693
    • 提高了 Heuman Lambda 精度。
    • 改进了 Skew Normal 寻根,请参阅 1120
    • 许多小修复和改进的代码覆盖率。
  • Multiprecision:
    • 确保 eval_convert_to() 不会因超大数字而终止,请参阅 618
    • 修复了 sinc 实现以匹配 Boost.Math 的行为。
    • 修复了 cpp_int 模运算中的除零错误。
    • 修复了大于 128 位的整数的下溢行为一致性,请参阅 626
  • MySQL:
    • 长期弃用的函数 querystart_queryexecute_statementstart_statement_execution(及其异步等效项)已被删除。
    • 实验性 API 的重大更改
      • identifier 类(客户端 SQL 格式化)已被删除。请改用新的格式说明符功能。
      • 自定义格式化程序的必需接口已更改,以适应新的格式说明符 API。
      • any_connection::async_connect 现在要求其 connect_params 参数保持活动状态,直到操作完成。采用 const connect_params* 的重载已被删除。
      • character_set::name 现在是一个 const char* 而不是 string_view,因为 MySQL 字符集名称不能包含 NULL 字符。
      • any_connection 内部缓冲区现在限制为 64MB。如果您需要读取或写入大于该值的数据行,请增加 any_connection_params::max_buffer_sizeconnection 及其辅助 typedef 不受限制。
      • any_connection_params::initial_read_buffer_size 重命名为 initial_buffer_size
      • pool_params::initial_read_buffer_size 重命名为 initial_buffer_size
    • 新的实验性 API:管道。管道可以通过在单个网络数据包中合并多个请求来提高效率。管道可用于运行文本查询、准备、执行和关闭语句、重置会话状态以及设置连接的字符集。
    • 客户端 SQL 格式化现在开箱即用地支持范围。可以使用新的 sequence 函数进一步自定义格式化。使用此功能可以显着简化批处理插入和批处理查找等用例。
    • 客户端 SQL 格式化现在支持格式说明符,这些说明符修改值的格式化方式。{:i} 将字符串格式化为动态 SQL 标识符,{:r} 输出原始未转义的内容
    • 静态接口 (static_resultsstatic_execution_state) 现在使用 pfr_by_namepfr_by_position 支持 Boost.Pfr 类型。添加了 underlying_row_t 以支持此类类型。
    • datedatetime 现在可以从 C++20 std::chrono::local_time 构造和转换为 C++20 std::chrono::local_time
    • 添加了 any_connection_params::max_buffer_size,它允许设置连接内部缓冲区的限制。
    • 添加了 is_fatal_error,它允许用户现在区分致命错误(需要关闭并重新打开连接)和非致命错误代码。
    • 添加了 formattable_ref,一种类型擦除的引用类型,可以引用任何满足 Formattable 概念的类型。
    • 修复了 MSVC 下的 ODR 违规,当 Boost.MySQL 与其他也使用不同翻译单元中的 asio::coroutine 的代码一起使用时,可能会导致发布版本崩溃。
  • Odeint:
    • 添加了 CMake 选项 BOOST_NUMERIC_ODEINT_NO_ADAPTORS 以减少依赖项,请参阅 82
    • 修复了 MPI 的 CMake 检测。
  • Process:
    • 将旧的 boost.process 移动到 v1 子文件夹和内联命名空间。 弃用了 process/*.hpp v1 头文件
    • 将 v2 转换为编译库。
    • 修复了在 alpine linux / musl 上的用法
  • Stacktrace:
    • 重大新功能:Windows 上来自任意异常的堆栈跟踪std::stacktrace::from_current_exception() 现在可以在 Windows 平台上运行。非常感谢 huangqinjin 的实现 PR#159 现在在 POSIX 和 Windows 上,from_current_exception() 函数返回当前异常对象的堆栈跟踪,就像堆栈跟踪是在抛出异常的点捕获的一样。
    • 修复了包含很少使用的 Windows SDK 头文件的问题,这些头文件可能会与其他使用 Windows SDK 的代码冲突。感谢 Marat Abrarov 修复了该问题 PR#157
    • 构建选项 boost.stacktrace.from_exception 现在可以在 MacOS 上正常工作。感谢 Peter Dimov 的修复 PR#166
    • 修复了 assert 表达式中的错别字。感谢 Kilian Henneberger 的错误报告 #164
    • 修复了阴影警告。感谢 Nigel Stewart 的错误报告 #141
    • 为 AIX 添加了 dladdr 最小支持。非常感谢 Clément Chigot 的实现 PR#114
    • 添加了 Boost::stacktrace CMake 别名,该别名引用平台上 Boost.Stacktrace 的最佳受支持实现。感谢 Alex 的功能 PR#167
    • CMake 的重大改进:多次修复,添加了许多新测试,改进了 CI。非常感谢 Peter Dimov 的所有改进。
    • 修复了通过 PATH 查找进程时 addr2line 的工作。感谢 Schreischildkroete 的错误报告和 Jens Richter 的修复 #72
  • Test:
    • 修复了配置步骤中的 -Wundef
    • 修复了 MSVC 上无法访问的返回编译错误。
  • Unordered:
    • 当头文件 <memory_resource> 可用时,添加了容器 pmr 别名。别名 boost::unordered::pmr::[container] 指的是带有 std::pmr::polymorphic_allocator 分配器类型的 boost::unordered::[container]
    • 配备了开放寻址和并发容器,以内部计算和提供受哈希函数质量影响的统计指标。此功能由全局宏 BOOST_UNORDERED_ENABLE_STATS 启用。
    • Avalanching 哈希函数现在必须通过 is_avalanching typedef 标记,其中嵌入的 value 常量设置为 true(通常,将 is_avalanching 定义为 std::true_type)。using is_avalanching = void 已弃用,但允许向后兼容。
    • 为容器和迭代器添加了 Visual Studio Natvis 框架自定义可视化效果。这适用于所有使用原始指针的分配器的容器。在此版本中,如果容器的分配器使用花哨指针,则不支持容器和迭代器。这可能会在以后的版本中解决。
  • UUID:
    • 重大更新。
    • 不再支持 C++03,需要 C++11 编译器。(包括 GCC 4.8 或更高版本,MSVC 14.0 (VS 2015) 或更高版本,以及 MinGW-w64。)
    • 将 Boost 依赖项的数量从 39 个(总计)减少到仅 5 个。
    • 已更新以反映较新的 RFC 9562
    • 添加了基于时间的 UUID 生成器。
    • 许多其他改进,请参阅修订历史
  • Wave:
    • 用更安全的 vsnprintf 替换了一个 vsprintf 的用法
    • 修复的错误
      • #197: 不正确的有符号溢出处理(UB 和缺少除法检查)
  • WinAPI:
    • 添加了 BOOST_USE_WINAPI_VERSION CMake 选项,允许用户指定 Boost 要面向的 Windows 版本。

更新的工具

  • BoostBook:
    • DTD已更新:现在允许在 method-group 元素内使用 constructorcopy-assignmentdestructor 元素。
    • Doxygen 生成的文档中进行了许多修复和改进
      • 修复了 Doxygen 生成的枚举值初始化器中重复的等号。
      • 禁用了函数参数的字母排序。可以通过将新的 boost.sort.params XSL 参数设置为 1 来重新启用排序。
      • 增加了对自定义类成员分组的支持。请参阅 Doxygen 标签 @name@{/@}
      • 增加了对 Doxygen 引用类、方法、枚举、变量等的支持(请参阅 @ref 标签)。
      • 增加了对 @remark@important 标签的支持。
      • 增加了对 @parblock 标签的支持,该标签可用于在期望单个段落作为参数的标签下放置多个段落(例如 @returns)。
      • 引用实现细节的模板参数默认值现在被隐藏,类似于函数参数默认值。
      • 改进了未命名枚举的呈现方式。不再显示类似 @0 的合成名称,如果名称对于引入枚举文档的链接是必要的,则名称将被省略或显示为 [unnamed]
      • 将“另请参阅” (@sa) 块更改为内联显示,类似于“返回值”。
      • 修复了多个异常规范 (@throws) 的呈现。
      • 增加了对抛出行为的自由格式描述的支持。如果 @throws 标签后的异常类型为“~”,则从输出中省略异常类型,并且以下描述直接显示在“Throws”部分中。
      • 移除了返回类型和模板参数中的冗余空格。
  • 构建:

测试编译器

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