版本 1.78.0
版本 1.78.0
2021 年 12 月 8 日 03:45 GMT
平台 | 文件 | 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
的改进。 -
禁用了
aligned_alloc
在clang当使用 MSVC 运行时。 -
更改为使用更快的实现用于
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 协程的错误处理技术的文档。
-
修复了各种警告。
-
有关更多详细信息,请查阅 修订历史。
-
-
Assert:
-
添加了
source_location::to_string
。
-
-
Atomic:
-
在 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)
-
有关更多详细信息,请参阅 changelog。
-
-
Beast:
-
此维护更新带来了小的错误修复和更新的 CI 报告。
-
修复了 zlib 实现中的安全漏洞 CVE-2016-9840。
-
修复了 WebSocket permessage_deflate 实现。这应该在使用 Beast WebSockets 时提高压缩性能。
-
删除了测试流和测试框架对 RTTI 的依赖。您现在可以使用我们方便的测试流来检查您的嵌入式异步通信代码!
-
我们很想知道您或您的公司如何使用 Beast,请考虑将条目添加到 使用 Beast 的公司和个人 列表中。
-
有关更改的完整列表,请参阅完整的 发行说明。
-
-
Core:
-
为
<boost/core/cmath.hpp>
添加了一个通用实现,当定义了BOOST_CORE_USE_GENERIC_CMATH
或当平台未在<cmath>
中提供必要的功能时启用。 -
添加了
boost::core::type_name
,一个实用程序函数,它以字符串形式返回类型的名称。 -
添加了
boost::span
,C++11 实现的 C++20 的std::span
(Glen Fernandes)。
-
-
Describe:
-
添加了
has_describe_enumerators
,has_describe_bases
,has_describe_members
。 -
添加了
enum_to_string
,enum_from_string
。 -
添加了关系和流插入运算符。
-
添加了
descriptor_by_name
,descriptor_by_pointer
。
-
-
Filesystem:
-
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
。
-
-
Log:
-
常规更改
-
为进程间消息队列的接收方法添加了对 C++17
std::byte
类型的支持。 -
在 Windows 上,当为 Windows 8 或更高版本构建库时,该库将在版本命名空间中使用
nt62
标签来表示目标 OS ABI。例如,版本命名空间可以命名为v2_mt_nt62
。此名称将是库导出的所有符号的一部分。在构建 Boost 和您的代码时,一致地使用BOOST_USE_WINAPI_VERSION
宏来请求最低目标 Windows 版本。 -
提高了
dump
流操作符的 SSSE3 和 AVX2 实现的性能。 -
添加了对 CMake 构建系统的支持。目前仅支持库构建,Boost.Build 仍用于运行测试。
-
有关更多详细信息,请参阅 changelog。
-
-
Multi-index Containers:
-
为基于键的索引添加了
contains
(issue #35)。 -
为基于键的索引添加了
merge
操作。该功能在许多方面超越了(无序)关联容器的标准规范,最值得注意的是-
源索引可以是任何类型,包括非基于键的索引。
-
提供了部分合并:例如,
x.merge(y,first,last)
仅合并y
中 [first
,last
) 范围内的元素。
-
-
先前版本的
splice
对于序列和随机访问索引是破坏性的,即元素被复制插入到目标中,然后从源中擦除。现在,splice
基于节点传输,就像基于键的索引中的merge
一样,并且已类似地扩展为接受任何类型的源索引:实际上,splice
可以被视为基于键的索引中merge
提供的相同功能的前端。出于向后兼容性的原因,在源容器和目标容器具有不相等的分配器的情况下,splice
的破坏性行为已保留。 -
索引迭代器类型仅依赖于
node_type
和索引在其multi_index_container
中的位置(哈希索引除外,其中唯一性/非唯一性也是依赖项)这一事实已被记录在案。这对通过merge
或splice
传输的元素的迭代器的有效性有影响。此属性是 C++ 标准邮件列表中所谓的 SCARY iterators 的变体。SCARY 性质目前(2021 年 8 月)不是标准容器的强制要求。 -
迭代器 SCARY 性质现在也在 安全模式 中保留。
-
-
Nowide:
-
重大更改:UTF-32 特化的
utf8_codecvt
的do_unshift
现在正确返回noconv
而不是ok
-
删除了 UTF-16 输出的
utf8_codecvt
中不必要的分支 -
在使用带有 unicode 字符类型的
utf8_codecvt
时,禁止 MSVC 中的弃用警告 -
修复了在
filebuf
已分配内部缓冲区后设置自定义缓冲区 (setbuf
) 时可能发生的双重释放
-
-
PFR:
-
为包含
std::addressof
添加了缺失的#include <memory>
-
修复了处理空聚合时的 -Wzero-length-array 警告
-
修复了 msvc 编译器 <= 1920 上的编译(感谢 Alexey Romanov aka @alexey-romanov)
-
添加了基本的 CMakeLists.txt 支持(感谢 @pdimov aka 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 常规样式。
-
-
System:
-
为
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<<
。
-
更新的工具
-
Build:
-
包括 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 管理了此版本。