版本 1.78.0
版本 1.78.0
2021年12月8日 格林尼治标准时间03:45
平台 | 文件 | SHA256 哈希值 |
---|---|---|
Unix | boost_1_78_0.tar.bz2 | 8681f175d4bdb26c52222665793eef08490d7758529330f98d3b29dd0735bccc |
boost_1_78_0.tar.gz | 94ced8b72956591c4775ae2207a9763d3600b30d9d7446562c552f0a14a63be7 | |
Windows | boost_1_78_0.7z | 090cefea470bca990fa3f3ed793d865389426915b37a2a3258524a7258f0790c |
boost_1_78_0.zip | f22143b5528e081123c3c5ed437e92f648fe69748e95fa6e2bd41484e2986cc3 |
已知问题
这些是来自库作者的补丁,这些补丁在发布时发现太晚而无法修复。
新增库
-
没有新的库。
更新的库
-
Asio:
-
添加了一个 io_uring 后端,可以选择将其用于所有 I/O 对象,包括套接字、计时器和 posix 描述符。
-
增加了对文件的支持,新增了用于面向流和随机访问文件的新类。此功能目前支持 Windows 上的 I/O 完成端口和 Linux 上的 io_uring。
-
增加了对 POSIX 和 Windows(当 I/O 完成端口可用时)上的可移植管道的支持。
-
增加了对注册缓冲区的支持,在使用 io_uring 后端时进行了优化。
-
增加了对通道的实验性支持,可用于将完成作为消息发送和排队。
-
实现了对
experimental::coro
的改进。 -
在使用 MSVC 运行时,禁用了Clang上的
aligned_alloc
。 -
更改为使用更快的实现方式来处理
ip::network_v4::canonical()
。 -
为常见用途添加了模板特化以缩短编译时间。
-
将
io_context
执行器的大小减小到单个指针。 -
增加了
execution::any_executor
和any_io_executor
的小对象缓冲区大小。 -
修复了禁用可变参数模板时的多签名处理问题。
-
修复了与新版本GCC和Clang.
-
的兼容性问题。修复了在 Solaris 上的编译问题。
-
修复了使用 MSVC 构建时针对 Qt 定义宏的防御措施。
-
改进了
ssl
设施发出的错误消息。 -
修复了
bind_executor
与完成标记的兼容性问题。 -
修复了定义
BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
时的构建错误。 -
为
awaitable<>
添加了缺少的移动赋值运算符。 -
修复了由于分配的内存对齐不正确导致在 MSVC 中使用协程时发生的访问冲突。
-
修复了
experimental::parallel_group
中的一个清理问题,该问题发生在执行上下文关闭但并行操作仍处于挂起状态时。 -
对并发提示的文档进行了澄清。
-
添加了关于 C++20 协程错误处理技术的文档。
-
修复了各种警告。
-
有关更多详细信息,请参阅修订历史记录。
-
-
断言:
-
添加了
source_location::to_string
.
-
-
原子:
-
在 Android 上对非 IPC 等待和通知操作使用进程本地 futex 操作。
-
增加了对仅定义
SYS_futex_time64
系统调用的 Linux 目标的支持,例如 riscv32。 -
为 clang 8 上 32 位 x86 目标上 64 位类型的
std::alignment_of
的错误结果添加了解决方法。 -
自 Mac OS 10.12、iOS 10.0、tvOS 10.0 或 watchOS 3.0 起,为 Darwin 系统上的等待和通知操作添加了 ulock 后端支持。
-
在 Windows 上,更正了atomic-type::always_has_native_wait_notify与目标 Windows 8 或更高版本时相应的容量宏之间的差异。该库现在将直接使用公共头文件中的
WaitOnAddress
和相关 API,因此如果用户通过定义BOOST_USE_WINAPI_VERSION
、_WIN32_WINNT
或类似宏来要求 Windows 8 或更高版本,则需要用户链接synchronization.lib
。该库会在支持自动链接的编译器(例如 MSVC)上自动链接。 -
在提供清除填充位方法的编译器上,添加了对具有填充位类型的支持(联合除外)。gcc 11 和 MSVC 14.2(编译器版本 19.27)及更高版本以及支持类似内在函数的其他编译器都支持此功能。在不允许清除填充位的编译器上,仍然普遍不支持具有填充的类型,但 x86 目标上的 80 位
long double
除外。定义了一个新的BOOST_ATOMIC_NO_CLEAR_PADDING
容量宏,以指示何时不支持清除填充。 -
atomic_ref
和ipc_atomic_ref
的初始化构造函数不再使用原子指令来清除引用对象中的填充位。这降低了原子引用构造的成本。 -
对于枚举、类和浮点类型,
atomic
和ipc_atomic
的初始化构造函数现在是constexpr
。对于类和浮点类型,如果编译器支持constexpr
std::bit_cast
,则构造函数是constexpr
,该类型没有填充字节,并且不需要填充来实现本机原子操作。 -
根据 C++20,
atomic
和ipc_atomic
的默认构造函数现在执行包含对象的初始化值。对于没有用户定义的默认构造函数的类型,这意味着默认构造的原子将被初始化为零。 -
添加了针对 AIX 上由汇编程序工具不支持数字标签引起的编译错误的解决方法。(PR#50)
-
添加了针对 Visual Studio 2015 Update 3 之前的编译错误的解决方法。(#52)
-
有关更多详细信息,请参阅更改日志。
-
-
Beast:
-
此维护更新带来了一些小的错误修复和更新的 CI 报告。
-
修复了 zlib 实现中的安全漏洞 CVE-2016-9840。
-
修复了 WebSocket permessage_deflate 实现。这将导致使用 Beast WebSockets 时压缩性能的提高。
-
删除了测试流和测试框架对 RTTI 的依赖。您现在可以使用我们便捷的测试流来检查您的嵌入式异步通信代码!
-
我们很想知道您或您的公司如何使用 Beast,请考虑在使用 Beast 的公司和个人列表中添加一个条目。
-
有关更改的完整列表,请参阅完整的发行说明。
-
-
核心:
-
在
<boost/core/cmath.hpp>
中添加了一个通用实现,当定义了BOOST_CORE_USE_GENERIC_CMATH
或平台未在<cmath>
中提供必要的设施时启用。 -
添加了
boost::core::type_name
,这是一个实用函数,它以字符串形式返回类型的名称。 -
添加了
boost::span
,这是 C++20 的std::span
的 C++11 实现(Glen Fernandes)。
-
-
描述:
-
添加了
has_describe_enumerators
、has_describe_bases
、has_describe_members
。 -
添加了
enum_to_string
、enum_from_string
。 -
添加了关系运算符和流插入运算符。
-
添加了
descriptor_by_name
、descriptor_by_pointer
。
-
-
文件系统:
-
v4:如果路径以目录分隔符结尾,则
path::filename
和path::iterator
不再返回隐式尾随点(“.”)元素。而是返回一个空路径,类似于 C++17 std::filesystem。这也影响了根据迭代器或文件名定义的其他方法,例如path::stem
、path::compare
或lexicographical_compare
。例如,path("a/b/") == path("a/b/.")
不再成立。(#193) -
v4:
path::lexically_normal
不再生成尾随点(“.”)元素,并且在规范化路径中尾随点点(“..”)元素后省略目录分隔符。 -
v4:
path
追加操作现在考虑追加路径中的根名称和根目录。如果追加的路径是绝对路径,或者存在根名称并且与源路径不同,则结果路径等效于追加的路径。如果存在根目录,则结果是基于源路径根名称的根目录和相对路径。否则,行为类似于 v3。(#214) -
path::lexically_normal
现在将规范化路径的根名称中的目录分隔符转换为首选分隔符。 -
优化了
path::assign
、path::append
、path::concat
及其对应运算符的重载,避免了不必要的路径复制并减少了代码冗余。 -
在 POSIX 系统上,如果
p
以根目录开头,则修复了absolute(p, base)
返回带有根名称base.root_name()
的路径。在这种情况下,p
已经是一个绝对路径,应该按原样返回。 -
如果输入路径完全由点 (".") 和点点 ("..") 元素组成,则
create_directories
不再报告错误。该实现不再在内部使用递归,因此可以更好地防止极长路径上的堆栈溢出。 -
在 Windows 上,
remove
现在支持删除只读文件。该操作将尝试在删除之前重置只读属性。请注意,如果操作失败并且属性的原始值未能恢复,则这可能会导致只读属性保持未设置状态。 这也会影响remove_all
。(#216) -
remove_all
现在在出错时返回static_cast< uintmax_t >(-1)
,类似于 C++17 std::filesystem。 -
修复了当用户代码包含
boost/filesystem/path.hpp
但不包含boost/container_hash/hash.hpp
并且编译器设置为保留未使用的内联函数时,关于对 Boost.ContainerHash 函数的未解析引用的链接错误。 (#215) -
添加了针对 MSVC 和兼容编译器在发布版本中消除路径全局清理的解决方法。如果 Boost.Filesystem 共享库在进程中重复加载和卸载,这可能会导致内存泄漏。 (#217)
-
-
几何图形:
-
JSON:
-
库的独立模式已弃用。
-
允许外部库前向声明
value_to
和value_from
。 -
修复了数字解析中的有符号整数溢出问题。
-
在 MSVC 上添加了对
/Zc:implicitNoexcept-
的支持。
-
-
Lambda2:
-
当第一个参数是流时,在
operator<<
和operator>>
中添加了特殊情况,以允许std::cout << _1
。 -
添加了
operator->*
。 -
添加了
first
、second
。
-
-
日志:
-
一般更改
-
向进程间消息队列的接收方法添加了对 C++17
std::byte
类型的支持。 -
在 Windows 上,当为 Windows 8 或更高版本构建库时,库将在版本命名空间中使用
nt62
标记来表示目标操作系统 ABI。例如,版本命名空间可以命名为v2_mt_nt62
。此名称将成为库导出的所有符号的一部分。在构建 Boost 和代码时,请始终使用BOOST_USE_WINAPI_VERSION
宏来请求最低目标 Windows 版本。 -
改进了
dump
流操纵器的 SSSE3 和 AVX2 实现的性能。 -
添加了对 CMake 构建系统的支持。目前仅支持库构建,Boost.Build 仍用于运行测试。
-
有关更多详细信息,请参阅更改日志。
-
-
多索引容器:
-
向基于键的索引添加了
contains
(问题 #35)。 -
向基于键的索引添加了
merge
操作。该功能在许多方面超出了(无序)关联容器的标准规范,最显著的是-
源索引可以是任何类型,包括非基于键的索引。
-
提供了部分合并:例如,
x.merge(y,first,last)
仅合并 [first
,last
) 范围内的y
元素。
-
-
先前版本的排序和随机访问索引的
splice
具有破坏性,即将元素复制插入到目标中,然后从源中删除。现在,splice
基于节点转移,就像基于键的索引中的merge
一样,并且已类似地扩展为接受任何类型的源索引:实际上,splice
可以被视为基于键的索引中merge
提供的相同功能的前端。出于向后兼容性的原因,如果源容器和目标容器具有不相等的分配器,则splice
的破坏性行为将保留。 -
已记录了索引迭代器类型仅依赖于
node_type
及其multi_index_container
中索引的位置(哈希索引除外,其中唯一性/非唯一性也是一个依赖项)。这对merge
或splice
传输的元素的迭代器的有效性有影响。此属性是 C++ 标准邮件列表中所谓的SCARY 迭代器的变体。 SCARYness 目前(2021 年 8 月)并未强制用于标准容器。 -
迭代器 SCARYness 现在也在安全模式下保留。
-
-
Nowide:
-
重大更改:
utf8_codecvt
的 UTF-32 特化的do_unshift
现在正确返回noconv
而不是ok
-
删除了 UTF-16 输出的
utf8_codecvt
中不必要的分支 -
在 MSVC 中使用
utf8_codecvt
和 unicode 字符类型时抑制弃用警告 -
修复在
filebuf
已分配内部缓冲区后设置自定义缓冲区 (setbuf
) 时可能发生的 double-free
-
-
PFR:
-
添加了缺少的
#include <memory>
用于包含std::addressof
-
修复了处理空聚合时出现的 -Wzero-length-array 警告
-
修复了在 msvc 编译器 <= 1920 上的编译问题(感谢 Alexey Romanov,即 @alexey-romanov)
-
添加了基本的 CMakeLists.txt 支持(感谢 @pdimov,即 Peter Dimov)
-
多项文档改进,包括指向 https://github.com/apolukhin/pfr_non_boost 的链接
-
添加了 misc/strip_boost_namespace.sh 脚本以移除
boost::
和BOOST_
前缀
-
-
Predef:
-
版本 1.13.1
-
修复 "epoch" 的拼写错误。
-
在 sparc.h 中添加缺少的括号(来自 tkoecker)。
-
更新文档以使用 Rouge 代码样式和 Amber 常规样式。
-
-
系统:
-
为
error_code
添加了对源位置的支持。 -
添加了
error_code::to_string
、error_condition::to_string
、error_code::what
。 -
system_error::what()
现在包含源位置(如果存在)。 -
添加了
result<T, E = error_code>
,一个持有值或错误的类,定义在<boost/system/result.hpp>
中。
-
-
Variant2:
-
添加了
<boost/variant2.hpp>
。 -
添加了
unsafe_get<I>
。 -
添加了
visit_by_index
。 -
添加了
operator<<
。
-
更新了工具
-
构建:
-
包含 B2 版本 4.7.2 的发行版。
-
已测试的编译器
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 管理了此次发布。