Boost C++ 库

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

版本 1.79.0

版本 1.79.0

2022 年 4 月 13 日 14:22 GMT

文档

下载
平台文件SHA256 哈希值
unixboost_1_79_0.tar.bz2475d589d51a7f8b3ba2ba4eda022b170e562ca3b760ee922c146b6c65856ef39
boost_1_79_0.tar.gz273f1be93238a068aba4f9735a4a2b003019af067b9c183ed227780b8f36062c
windowsboost_1_79_0.7z6c97cf4f4a0eb00ed776c88065ab3f59e183fa5e65f6464ff94f92328352d9d6
boost_1_79_0.zip3634f9a85759311f321e587eace21799c0d0c946ff933e477a2f98885c54bbff
* 下载链接由 C++ 联盟的资助支持。

已知问题

这些是库作者提供的补丁,发现得太晚以至于无法在发布版本中修复。

  • Boost.JSON 的 array::erase 可能导致段错误,请参阅 #692补丁

新库

  • 没有新库。

更新的库

  • Asio:
    • 添加了 bind_allocator
    • 添加了 file_base::sync_all_on_write 标志。
    • 添加了 basic_file::release() 的缺失实现。
    • 为信号集添加了每个操作的取消支持。
    • recycling_allocator 作为公共接口的一部分公开。
    • 为许多函数添加了 nodiscard 属性。
    • 添加了 OpenSSL 3.0 兼容性。
    • 添加了将现有的 SSL* 采纳到 ssl::stream<> 中的支持。
    • 在所有构建配置中启用了 executor_work_guard<>
    • 在使用 clang 时启用了可移动的套接字 iostream。
    • 修复了 bind_cancellation_slotbind_executor 与旧式完成令牌的兼容性问题。
    • 修复了 experimental::appendexperimental::prependassociator 特化。
    • 修复了 associated_allocator 主模板。
    • 修复了io_uringsockets 的 async_receive_from 和 files 的 write_some_at 的实现。
    • 修复了io_uring功能检测。
    • 修复了 experimental::coro 的每个操作的取消。
    • 修复了 experimental::promise 的类型擦除完成处理程序中的内存管理。
    • 修复了 ssl::stream 的移动 operator= 实现。
    • 修复了当 BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULTBOOST_ASIO_SEPARATE_COMPILATION 都被定义时 any_io_executor 实现工作的问题。
    • 修复了当使用 sockatmark() 系统调用时 basic_socket::at_mark() 的实现。
    • 更改了 recycling allocator 以使用默认对齐作为分配的最小对齐。
    • 为 Apple clang 中明显的协程代码生成错误添加了一个解决方法。
    • 在 Windows 上,更改了文件支持以使用与 fopen() 相同的共享模式打开文件。
    • 在 Linux 上,修复了 UNIX 域套接字实现以正确处理 EAGAIN
    • 修复了 experimental::basic_channel::reset()experimental::basic_concurrent_channel::reset() 的实现。
    • 修复了 experimental::promise 中潜在的未定义行为。
    • 更改了 co_spawn 实现,在某些情况下通过执行器分派取消信号。
    • 修复了各种头文件包含问题。
    • 修复了各种警告。
    • 许多文档增强功能,包括
      • 添加了 Asio 异步模型的概述。
      • 根据异步模型重新编写了参考和需求文档。
      • 更新了 dispatch()post()defer() 的文档。
      • 记录了串行端口的每个操作的取消。
      • 阐明了为分配器做出的非并发保证。
      • 还原了 io_context 参考文档以使用 executor_work_guard
      • make_strand()make_work_guard()ip::address_v4ip::address_v6experimental::basic_channelexperimental::basic_concurrent_channel 添加了更详细的参考文档。
      • 重新排列和扩展了概述文档,以涵盖最近添加的功能。
    • 添加了一个 C++11 示例,展示了通过本地套接字传递文件描述符。
    • 添加了 C++14 示例,展示了在异步操作中包装基于回调的 API。
    • 有关更多详细信息,请参阅修订历史
  • 断言:
    • source_location().file_name()source_location().function_name() 现在返回 "" 而不是 "(unknown)"
    • std::source_location 添加了一个 source_location 构造函数。
    • 更改了 BOOST_CURRENT_LOCATION 以更紧密地匹配 std::source_location::current() 的行为,例如可在顶层使用或作为默认函数参数。
  • 原子操作:
    • 修复了通用 Windows 平台 (UWP) 的编译问题。(#54
    • 添加了 BOOST_ATOMIC_NO_DARWIN_ULOCK 配置宏。该宏影响 Darwin 系统上的编译,并禁用基于 ulock 的等待和通知操作实现。这可能有助于符合 Apple App Store 的要求。(#55
  • Beast:
    • 为 file_body 测试添加了缺失的 include。
    • 修复了 WebSocket 握手失败时的响应。
    • 修复了 file_posixfile_win32 的打开追加模式。
    • 修复了 Windows 上使用 append/append_existing 标志打开文件的问题
    • 修复了 file_win32file_stdio 的 clang-cl UTF8 路径处理。
    • 将 ARM64 构建添加到 drone CI。
    • 修复了 async_base 文档链接。
    • 为在 append/append_existing 模式下打开文件添加了测试。
    • 更新了 CI 以包含 gcc 11、clang 12、msvc 14.3。
    • 将单独的测试添加到 CMake 工作流程。
    • 我们很想知道您或您的公司如何使用 Beast,请考虑在 “使用 Beast 的公司和个人” 列表中添加条目。
    • 有关完整的更改列表,请参阅完整的发行说明
  • Core:
    • 使 boost::pointer_traits 对 SFINAE 友好,解决了 LWG3545。(Glen Fernandes)
    • 添加了使用各个分配器访问特性的 boost::allocator_traits。此实现支持 C++03 及更高版本。(Glen Fernandes)
    • 更新了分配器访问特性,以在 C++03 中支持大多数 C++11 分配器模型。(Glen Fernandes)
    • boost/iterator.hpp 已弃用,将在未来的版本中删除。该头文件定义了 boost::iterator 模板,它等效于 <iterator> 头文件中的 std::iterator。但是,由于 std::iterator 本身在 C++17 中已弃用,因此建议用户从其代码中删除 boost::iteratorstd::iterator 的使用。
    • 添加了 boost::core::verbose_terminate_handler,这是一个实用程序函数,旨在传递给 std::set_terminate,该函数将有关未捕获异常的信息打印到 stderr
  • Describe:
    • BOOST_DESCRIBE_STRUCT 中启用了 unions,并更新了示例以检查 std::is_union<T>
    • 添加了定义 fmtlib 类格式化程序的示例。
    • 添加了定义 fmtlib 枚举格式化程序的示例。
    • 添加了打印成员指针的示例。
  • 文件系统:
    • v3: path::replace_extension 现在根据 v3 定义的 path::extension 而不是 v4 定义工作。
    • 修复了路径追加和连接运算符的编译问题,这些运算符的参数类型可转换为 path 或兼容的字符串类型。(#223
    • 在支持 fdopendirO_NOFOLLOW 的 POSIX 系统以及 Windows 上,remove_all 现在受到 CVE-2022-21658 的保护。此漏洞是一个竞争条件,允许第三方进程将正在被 remove_all 并发处理的目录替换为目录符号链接,并导致 remove_all 跟随符号链接并删除链接目录中的文件,而不是删除符号链接本身。(#224
    • 在 Windows 上,在 removeremove_all 实现中,当操作系统支持时(Windows 10 1709 及更高版本),使用 POSIX 语义进行文件删除。当支持 POSIX 语义时,文件名会在文件被标记为删除后立即从文件系统命名空间中删除,即使它仍然打开并正在使用。使用旧的 Windows 语义,文件名会一直保留在文件系统命名空间中,直到文件的最后一个文件句柄关闭,这允许打开标记为删除的文件,并阻止创建具有相同名称的新文件。(#216
    • 在 Windows 上,removeremove_all 现在支持删除只读目录。之前已添加对删除只读非目录文件的支持。
    • 在 Windows 上,directory_iterator 内部实现已重新设计,以更好地利用现代 Windows API,这可能会提高处理符号链接时的性能。
    • 在 Windows 上,如果可能,尽早初始化内部 WinAPI 函数指针,以允许在全局构造函数中调用 Boost.Filesystem 操作。这仅在 MSVC、GCC、Clang 和兼容编译器上受支持。
    • 在 Windows 上,如果要调整大小的文件已打开,resize_file 不应再因错误而失败。
    • 在 Android 11.0 之前(API 版本 30),禁用了 statx 系统调用的使用。该系统调用被 seccomp 列入黑名单,并在运行时导致进程终止。(#229
    • 已弃用: boost/filesystem/string_file.hpp 头文件已弃用,将在未来的版本中删除。默认情况下,boost/filesystem.hpp 不再包含该头文件。建议用户自行实现该功能或迁移到其他实现。
    • 已弃用: Windows CE 支持已弃用,将在未来的版本中删除。Windows CE 多年来未经测试,可能无法正常工作。
  • Geometry:
    • 主要变更
      • PR#977 默认情况下禁用重缩放。这避免了集合运算和缓冲区中的许多相关错误。
    • 改进
      • PR#923 添加了用于笛卡尔点/几何的 closest_points 算法。
      • PR#939 添加了用于其他坐标系和几何组合(不包括 boxes)的 closest_points 算法。
      • PR#961 添加了 Web Mercator 投影。
      • PR#966 在 simplify 中使用了更高效的笛卡尔距离策略。
    • 已解决的问题
      • #956 simplify 算法的结果具有不正确的闭合。
      • #962 由于加载因子,R 树反序列化时发生运行时错误。
      • #971 在 ARM 平台上使用 long double 影响了 R 树插入时间。
    • Bugfixes
      • PR#936 包含极点的多边形的包络线。
      • PR#948 近子午线段的球面和地理包络线。
      • PR#974 用于 NaN 坐标的椭球归一化实用程序。
      • 集合运算和缓冲区中的各种修复。
  • Integer:
    • 优化了 integer_log2 实现以在内部使用位运算。这允许使用大多数现代 CPU 上可用的位指令。(#31
  • IO:
    • 添加了 boost::io::basic_nullbuf(一个空流缓冲区)和 boost::io::basic_onullstream(一个空输出流)(Glen Fernandes)。
  • Iterator:
    • counting_iterator 中,添加了对某些目标平台上 gcc 和 clang 以及兼容编译器支持的内置 128 位整数类型的支持。
    • 消除关于 counting_iterator 中已弃用的隐式复制赋值运算符的 gcc 警告。
  • JSON:
    • 该库的独立模式已移除。希望继续使用独立 JSON 的用户可以切换到 C++ 联盟的分支
    • 添加 std::error_code 重载。
    • boost::source_location 添加到 error_codes
    • 添加对 JSON Pointer 的支持。
    • 在序列化期间自然地增长字符串。
  • LEAF:
    • 支持 FreeRTOS 和其他嵌入式平台
    • 改进的诊断信息
    • 改进的配置宏
    • BOOST_LEAF_CHECK 在 __GNUC__ 下使用语句表达式
    • 修复了符号反解错误
  • Log:
    • 一般更改
      • text_file_backend 中,当使用文件轮换且日志文件名使用文件计数器时,添加了对追加到先前写入的日志文件的支持。
      • 破坏性更改: file_collector 接口已更改
        • scan_for_files 方法返回一个 scan_result 结构,其中包含扫描期间收集的信息;
        • 添加了 is_in_storage 方法,用于测试路径是否指向目标存储目录中的文件。
      • 添加了一个新的 invoke_manip 流操纵器,可用于将用户的函数注入到流输出表达式中。
    • Bug fixes
      • 修复了如果用户多次调用 text_file_backend::scan_for_files,并且第二次和后续调用未找到任何新文件,则文件计数器被设置为零的问题。(#179
    • 有关更多详细信息,请参阅变更日志
  • Multi-index Containers:
    • 将排名索引中 count 操作的效率从 O(log(n) + count) 提高到 O(log(n))。由 Damian Sawicki 贡献。
    • 维护工作。
  • Nowide:
    • 修复了一些平台上的编译问题(例如 MinGW-w64 和 Cygwin 上的 GCC 11)
    • 修复了当使用 BOOST_USE_WINDOWS_HWIN32_LEAN_AND_MEAN 时缺失 include 的问题
    • 当使用 boost::nowide::statboost::nowide::stat_t 时添加健全性检查
  • Optional:
    • 修复了 问题 #98
    • 修复了 问题 #92
    • 添加了对 BOOST_NO_IOSTREAM 的支持。
    • 现在对齐的存储使用 unsigned char 而不是 char 以避免 UB。
    • 现在使用 cv-unqualified value_type 与 placement new 以避免 UB。
  • Predef:
    • 版本 1.14.0
    • 添加了 LoongArch 的检测(来自 Zhang Na)。
  • QVM:
    • 在 C++17 下添加了 constexpr
    • 改进了单头文件分发
  • Smart Pointers:
    • 添加了 boost::get_allocator_pointer,以从 boost::allocate_unique 的结果中获取 Allocator 指针 (Glen Fernandes)。
  • System:
    • throw_exception_from_error 添加了一个 boost::source_location 参数。
    • errc::errc_tstd::error_codestd::errcstd::exception_ptr 添加了 throw_exception_from_error 重载。
    • result<T>::value 现在通过默认参数自动将 BOOST_CURRENT_LOCATION 提供给 throw_exception_from_error
    • 添加了一个采用源位置的 errc::make_error_code 重载。
  • ThrowException:
    • 添加了 boost::throw_with_location,对于不使用 Boost.Exception 的程序,它是 BOOST_THROW_EXCEPTION 的更轻量级替代方案。
  • Unordered:
    • 所有容器都已更新以支持异构 countequal_rangefind
    • 所有容器现在都实现了成员函数 contains
    • 已为所有容器实现了 erase_if
    • 所有容器都已更新以支持异构 eraseextract
    • 更改了 reserve 的行为以 eager allocate。
    • 测试套件中的各种警告修复。
    • 更新代码以在内部使用 boost::allocator_traits
    • 切换到 Fibonacci 哈希。
    • 更新文档以用 AsciiDoc 而不是 QuickBook 编写。
  • Variant2:
    • monostate 添加了 operator<<
  • Wave:
    • 现在构建 Wave 本身需要 C++11
    • 修复的错误
      • #135:C++20 中已弃用数组下标中的逗号运算符
      • #137:简单的未知指令 => 未调用 found_unknown_directive,剥离了 pound。
      • #138:空的 ifdef 块不为缺失的空格发出行指令
      • #143:解析 __has_include() 失败,带有尾随标记
      • #145:Sanitizer 抱怨 reset_version()
      • #147:不同枚举类型之间的按位运算已弃用

更新的工具

测试的编译器

Boost 的主要测试编译器是

  • Linux
    • Clang: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0
    • Clang, C++11: 3.4, 11.0.0
    • Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.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
    • Clang, C++20: 11.0.0, 12.0.0, 13.0.0
    • GCC: 4.6.3, 11
    • GCC, C++11: 4.7.3, 4.8.5, 11
    • GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11
    • GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11
    • GCC, C++20: 8.0.1, 9.1.0, 10, 11
  • OS X
    • Apple Clang: 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

致谢

Marshall Clow、Michael Caisse 和 Glen Fernandes 管理了此版本。