版本 1.74.0
版本 1.74.0
2020 年 8 月 14 日 05:02 GMT
平台 | 文件 | SHA256 哈希 |
---|---|---|
unix | boost_1_74_0.tar.bz2 | 83bfc1507731a0906e387fc28b7ef5417d591429e51e788417fe9ff025e116b1 |
boost_1_74_0.tar.gz | afff36d392885120bcac079148c177d1f6f7730ec3d47233aa51b0afa4db94a5 | |
windows | boost_1_74_0.7z | 903fd40074de8dc733d2f0b6b0642e43b714653eaeb79289b12161b9567fae97 |
boost_1_74_0.zip | a0e7ce67c52d816708fdeccdd8c9725626ba61254c13c18770498cacd514710a |
新库
-
STLInterfaces: 一个 CRTP 基类库,用于简化 STL 视图、迭代器和序列容器的编写,作者是 Zach Laine。
更新的库
-
Asio:
-
为 Asio 的 I/O 功能添加了对建议的标准执行器的支持。
-
提供的执行器现在满足建议的标准执行器的要求。这些类也继续满足现有 Networking TS 执行器模型的要求。
-
所有 I/O 对象、异步操作和实用程序都将与新的建议标准执行器以及现有的 Networking TS 执行器互操作。
-
引入了
any_io_executor
类型别名,作为所有 I/O 对象的默认运行时多态执行器。默认值为execution::any_executor<>
模板。如果需要向后兼容,可以定义BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
以使用旧的asio::executor
多态包装器。 -
可以通过定义
BOOST_ASIO_NO_TS_EXECUTORS
来禁用对现有 Networking TS 执行器模型的支持。
-
-
添加了到
basic_waitable_timer
的转换移动构造和赋值。 -
在使用以下编译器时启用 C++20 协程支持gcc 10.
-
添加了启动可等待对象的
co_spawn
重载。 -
为
use_awaitable_t
的默认执行器适配器添加了新的构造函数重载,以实现执行器类型之间的转换。 -
通过添加成员
as_default_on()
和as_default_on_t<>
,添加了对使用detached_t
作为默认完成令牌的支持。 -
为
ssl::stream<>
添加了移动构造函数。 -
将
ssl::stream<>
写入操作更改为线性化收集写入缓冲区序列。 -
在定义
BOOST_ASIO_NO_DEPRECATED
时,添加了对已弃用的asio_handler_invoke
、asio_handler_allocate
和asio_handler_deallocate
钩子的编译时检测。 -
实施了许多性能优化。
-
为处理程序跟踪添加了源位置支持。
-
对以下工具进行了各种改进handlerviz.pl工具。
-
添加了handlerlive.pl工具,该工具处理处理程序跟踪输出以生成“活动”处理程序的列表。
-
添加了handlertree.pl工具,该工具过滤处理程序跟踪输出,仅包括生成指定处理程序的树中的那些事件。
-
为基于 clang 的 Embarcadero C++ 编译器添加了更改。
-
修复了当多个线程同时初始化 Windows I/O 完成端口后端时可能发生的死锁。
-
修复了当按左值传递时,
async_compose
与可复制处理程序一起工作的问题。 -
修复了
co_spawn
中的完成签名推导。 -
从
executor_binder
实现中删除了伪造的Executor
基类。 -
文档和示例中的各种修复和改进。
-
请查阅 修订历史 以获取更多详细信息。
-
原子操作:
-
为
atomic_ref
中的某些操作添加了缺少的const
限定符。 -
为 ARMv8-A 添加了对
yield
指令的支持。该指令在自旋循环中内部使用,以降低 CPU 功耗。 -
添加了对 C++20 等待和通知操作的支持。该实现包括涉及内部锁池的通用后端,以及适用于 Windows、Linux、FreeBSD、DragonFly BSD 和 NetBSD 的专用后端。原子类型提供了一个新方法
has_native_wait_notify
、一个静态布尔常量always_has_native_wait_notify
和一组功能宏,用于检测给定类型的实现是否支持本机等待和通知操作。 -
更改了
atomic_flag
的内部表示,以使用 32 位存储。这允许在某些平台上对atomic_flag
进行更有效的等待和通知操作。 -
添加了对内部锁池大小的构建时配置的支持。用户可以定义
BOOST_ATOMIC_LOCK_POOL_SIZE_LOG2
宏来指定锁池大小的二进制对数。默认值为 8,这意味着锁池的大小为 256,高于先前版本中使用的 64。 -
添加了对一组新的原子类型的支持,这些类型专用于 进程间通信:
ipc_atomic_flag
、ipc_atomic
和ipc_atomic_ref
。建议用户将使用非 IPC 类型进行进程间通信的代码移植到新类型。新类型提供与其非 IPC 类型相同的操作集,但有以下差异-
大多数操作都添加了一个前提条件,即
is_lock_free
为给定的原子对象返回true
。如果已知此前提条件在编译时未满足,则库将发出编译时错误。 -
所有提供的操作都是无地址的,这意味着原子对象(在
ipc_atomic_ref
的情况下 - 引用的对象)可能位于进程共享内存中,或者以多个不同的地址映射到同一进程中。 -
新的
has_native_wait_notify
操作和always_has_native_wait_notify
常量指示对本机进程间等待和通知操作的支持。如果不存在该支持,则使用忙循环来实现这些操作,这效率较低,但仍然是无地址的。还提供了一组单独的功能宏来指示此支持。
-
-
添加了 C++20 中引入的新
atomic_unsigned_lock_free
和atomic_signed_lock_free
类型。这些类型分别指示无锁且最好具有对等待和通知操作的本机支持的无符号或有符号整数的原子对象类型。 -
为 ARMv8-A(适用于 AArch32 和 AArch64)添加了新的 gcc 汇编程序后端。新的后端用于实现编译器内部函数不支持的操作(包括 AArch64 上的 128 位操作),并且还可以在编译器内部函数不可用时使用。支持小端和大端目标。AArch64 后端支持 ARMv8.1 和 ARMv8.3 中定义的扩展。
-
在基于 gcc 汇编程序块的传统 ARM 后端中添加了对大端目标的支持(此后端在 ARMv7 和更旧的目标上使用)。以前,后端假设小端内存布局,这对 64 位操作很重要。
-
通过使用
lock
前缀指令而不是mfence
,提高了 x86 上 seq_cst 存储和线程栅栏的性能。这意味着这些操作不再影响非临时存储,这在之前也没有保证。使用专门的指令和内部函数来排序非临时内存访问。 -
修复了 x86 目标上 80 位
long double
的功能宏,即使 128 位原子操作可用,也没有指示无锁操作。 -
修复了在 Alpha 目标上编译 gcc asm 块的问题。
-
在 gcc
__sync*
内部函数后端中,修复了大型对象(大于指针大小)的存储和加载操作可能不是原子操作的问题。该实现目前假设小型对象可以在所有现代架构上通过单个指令原子存储。
-
-
Beast:
-
此更新带来了错误修复和对 Boost.Asio 中以下更改的支持
-
Beast 支持
BOOST_ASIO_NO_DEPRECATED
。定义此项有助于识别你的 Beast 和 Asio 代码中使用了已弃用的 Asio 接口的区域。 -
Beast 还支持
BOOST_ASIO_NO_TS_EXECUTORS
。定义此项可识别现在可能过时的 Networking TS 中执行器的用法 -
Asio 默认将使用 标准执行器 模型。你可以通过定义
BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
来阻止此行为,在该行为中,将默认使用 Networking TS 模型。设置此标志不会阻止程序显式使用标准执行器模型的执行器。 -
我们很想知道你或你的公司如何使用 Beast,请考虑在 使用 Beast 的公司和个人列表中添加一个条目。
-
请参阅完整的 发行说明,了解更改的完整列表。
-
-
Bimap:
-
正确的分配器用法(修复 C++20 编译)。 (Glen Fernandes)
-
-
配置:
-
实现
BOOST_NO_CXX11_OVERRIDE
和BOOST_OVERRIDE
。 (Glen Fernandes)
-
-
核心:
-
实现了分配器访问实用程序,该实用程序为每个工具提供
allocator_traits
的替代方法,其中包含单独的特征和函数。它们尽可能支持 C++11 分配器模型,并为 C++98 兼容性提供后备。这些现在用于 Circular_Buffer、Wave、Lockfree、Heap、Smart_Ptr、Dynamic_Bitset、Format、Bimap 等中。 (Glen Fernandes)
-
-
Endian:
-
在
endian_reverse
中启用了范围枚举类型。 -
在
endian_reverse_inplace
中启用了bool
、enum
、float
、double
。 -
为数组添加了
endian_reverse_inplace
的重载。
-
-
文件系统:
-
删除了对 Windows 上对符号链接和硬链接支持的编译时检查。相反,使用运行时检查。 (PR#142)
-
修复了如果在同一符号链接被并发打开时,Windows 上的
read_symlink
可能会失败或在其他地方导致共享冲突错误的问题。 (#138) -
为
directory_entry
和error_code
添加了缺失的状态检查操作重载(例如is_directory(directory_entry, error_code&)
)。移除了不接受error_code
参数的重载中不正确的noexcept
规范。 -
copy_file
的实现已更新,以按照 C++20 的要求 ([fs.op.copy.file]/4.1) 对源文件和目标文件执行检查。特别是,如果源文件或目标文件不是常规文件,或者源路径和目标路径标识的是同一文件,则操作将失败。 -
在 POSIX 系统上,如果目标文件被覆盖,
copy_file
现在还会将源文件权限复制到目标文件。 -
新增:在 Linux 上添加了基于
sendfile
和copy_file_range
系统调用的copy_file
实现,这可以提高文件复制性能,尤其是在网络文件系统上。 -
已弃用:与
copy_file
操作一起使用的copy_option
枚举已弃用。作为替代,添加了新的枚举copy_options
(注意末尾的 's')。新枚举包含类似于 C++20 中copy_options
枚举的值。旧的枚举值会映射到新的枚举。旧的枚举将在未来的版本中移除。 -
新增:添加了
copy_options::skip_existing
选项,如果目标文件存在,该选项允许copy_file
操作成功而不会覆盖目标文件。 -
新增:添加了
copy_options::update_existing
选项,如果目标文件存在,并且其最后写入时间比替换文件旧,则该选项允许copy_file
操作有条件地覆盖目标文件。 -
新增:
copy_file
现在返回bool
,指示文件是否被复制。 -
新增,重大更改:
copy
操作已扩展和重构,以实现 C++20 [fs.op.copy] 中指定的行为。这包括支持copy_options::recursive
、copy_options::copy_symlinks
、copy_options::skip_symlinks
、copy_options::directories_only
、copy_options::create_symlinks
和copy_options::create_hard_links
选项。该操作会根据指定的选项执行其他检查。将copy
应用于具有默认copy_options
的目录,现在也会复制该目录中的文件(但不包括嵌套目录或这些目录中的文件)。 -
新增:添加了接受两个路径的
create_directory
重载。第二个路径是指向现有目录的路径,该路径用作创建目录时使用的权限属性的来源。 -
已弃用:
copy_directory
操作已弃用,赞成使用新的create_directory
重载。请注意,这两个操作的路径参数顺序相反。 -
在 POSIX 系统上,如果其中一个路径无法解析为文件,
equivalent
现在会返回来自操作系统的实际错误代码。以前,该函数会返回错误代码 1。(#141) -
equivalent
不再考虑文件大小和最后修改时间,以测试两个路径是否指向同一文件。如果在equivalent
调用期间修改了文件,这些检查可能会导致误报。 -
新增:添加了接受
error_code
参数的absolute
重载。 -
具有
current_path()
作为其参数默认值,并且还具有error_code
参数的操作,将使用current_path(error_code& ec)
重载来获取当前路径,以便通过error_code
参数报告其失败,而不是抛出异常。 -
space
现在会在出错时将space_info
结构成员初始化为 -1 值,如 C++20 ([fs.op.space]/1) 的要求。 -
在 Windows 上,
space
现在接受指向任意文件的路径,而不仅仅是目录。这类似于 POSIX 系统,并符合 C++20 中的操作描述。(#73) -
新增:为 Windows CE 添加了
temp_directory_path
的实现。(PR#25) -
新增:改进了对 Embarcadero 编译器的支持。(PR#130)
-
新增:添加了基于
getrandom
(Linux)、arc4random_buf
(OpenBSD/FreeBSD/CloudABI) 和 BCrypt (Windows) 系统 API 的unique_path
操作的实现。 -
已弃用:在 Windows 上使用 MSVC 兼容的编译器自动链接系统库已弃用,并将在未来的版本中移除。这会影响链接 Boost.Filesystem 静态库的用户。建议用户更新其项目构建系统,以使用 Boost.Filesystem 的共享库,或者在链接器命令行中显式指定 Boost.Filesystem 的依赖项。Boost.Filesystem 共享库的用户不受影响。
-
-
轻量级:
-
维护工作。
-
-
格式:
-
正确的分配器用法(修复 C++20 编译)。 (Glen Fernandes)
-
-
GIL:
-
已删除
-
重大更改:移除了对 Boost.Variant 的依赖
-
-
致谢
-
Samuel Debionne、Pranam Lashkari、Mateusz Loskot、Debabrata Mandal
-
-
堆:
-
正确销毁
skew_heap
中的顶部节点。(Glen Fernandes) -
正确并简化分配器的使用。(Glen Fernandes)
-
-
日志:
-
错误修复
-
syslog sink 后端现在会验证用户设置的本地和目标地址的 IP 版本。这些地址必须与 sink 后端构造时在
ip_version
命名参数中指定的 IP 版本相同(默认情况下,假定为 IPv4)。当通过主机名解析获得地址时,只考虑具有匹配 IP 版本的地址。(#119)
-
-
新特性
-
各种组件的移动构造函数和赋值运算符都被标记为
noexcept
。 -
添加了一个新的
range_manip
流操作器,可用于输出范围内的元素,可以选择用分隔符分隔。 -
添加了一个新的
tuple_manip
流操作器,可用于输出元组或任何其他异构序列的元素,可以选择用分隔符分隔。 -
添加了一个新的
optional_manip
流操作器,可用于输出可选存在的值。
-
-
有关详细信息,请参阅 变更日志。
-
-
Mp11:
-
提高了大型
N
的mp_with_index<N>
的编译性能。 -
添加了
tuple_transform
(由 Hans Dembinski 贡献)。
-
-
Nowide:
-
该库现在需要符合 C++11 标准的编译器和标准库。
-
LFS: 添加了对底层系统支持的 > 2 GB 文件 的支持。
-
通用的 UTF 转换函数现在可在
boost::nowide::utf namespace
中使用。 -
添加了对使用 UTF-8 路径的
stat
的支持。
-
-
Outcome:
-
公告
-
v2.1 分支预计将于 2020 年底停用,v2.2 分支将成为默认分支。您现在可以使用
better_optimisation
使用未来的 v2.2 分支。此分支对 Outcome v2.1 进行了许多重大更改,请参阅首页了解详情。
-
-
增强功能
-
重大更改:
void
结果和 outcome 不再在显式构造期间默认构造类型。以前,如果您从非错误的result<void>
显式构造result<T>
,则它会默认构造T
。这被发现会导致不必要的意外,因此已禁用。 -
新宏
OUTCOME_ENABLE_LEGACY_SUPPORT_FOR
。当使用较新版本的 Outcome 时,可以使用宏OUTCOME_ENABLE_LEGACY_SUPPORT_FOR
来启用较旧的命名和功能到较新的命名和功能的别名。 -
概念现在采用蛇形命名风格,而不是驼峰命名风格。当首次实现 Outcome 时,认为 C++ 20 的概念将采用驼峰命名风格。这在 C++ 20 发布之前已更改,并且 Outcome 的概念已进行了类似的重命名。这不会破坏 Outcome v2.1 中的任何代码,因为提供了兼容性别名。但是,除非
OUTCOME_ENABLE_LEGACY_SUPPORT_FOR
设置为210
或更低,否则针对 Outcome v2.2 编译的代码需要升级。 -
概念现在位于
OUTCOME_V2_NAMESPACE::concepts
命名空间中。以前,概念位于convert
命名空间中,现在它们位于自己的命名空间中。 -
添加了新概念
basic_result<T>
和basic_outcome<T>
。最终用户发现is_basic_result<T>
和value_or_error<T>
之间存在一个无用的差距,他们需要一个匹配basic_result
类型但又不完全是其中之一的概念。添加了填补该空白的概念。 -
从 Outcome v2.2 开始,操作
TRY
的工作方式有所不同。这是一个严重破坏代码的更改,它更改了使用OUTCOME_TRY()
的语法。可以在 Outcome v2.1 和 v2.2 之间的更改列表中找到适用于升级代码的正则表达式。
-
-
错误修复
-
#224 Xcode 11.4 (当前最新版本) 中 Apple 提供的 clang 尚未修补 LLVM clang 的修复程序,该修复程序修复了
noexcept(std::is_constructible<T, void>)
无法编译的问题,而我最初在几年前就提交了该问题。因此,放弃等待 Apple 修复其 clang,并向 Outcome 添加一个解决方法。 -
备用存储无法从无值策略类中使用。由于当时编写代码时明显的脑抽,备用存储 API 具有错误的原型,从而阻止了它们在策略类中工作。抱歉。
-
-
-
PolyCollection:
-
维护工作。
-
SmartPtr:
-
向
shared_ptr
、weak_ptr
、local_shared_ptr
添加了owner_equals
。 -
向
shared_ptr
、weak_ptr
添加了owner_hash_value
。 -
添加了
owner_equal_to
、owner_hash
。 -
为
shared_ptr
、local_shared_ptr
添加了std::hash
特化。 -
为
weak_ptr
添加了boost::hash
支持以及std::hash
、std::equal_to
特化。
-
-
Stacktrace:
-
修复了使用
-fno-exceptions
编译时出现的构建错误(感谢 Jeremiah Rodriguez #91)。
-
-
System:
-
operator bool()
现在返回failed()
,而不是value() != 0
。
-
-
Type_Traits:
-
实现了
conjunction
、disjunction
、negation
、is_trivially_copyable
、is_scoped_enum
和is_unscoped_enum
。(Glen Fernandes)
-
-
Variant2:
-
添加了对
visit
中派生类型的支持。 -
提高了许多(数百个)备选方案的编译性能。
-
添加了对
visit<R>
的支持。
-
-
Wave:
-
为可变参数实现了 C++20 功能,包括
__VA_OPT__
(PR#75) -
实现了
__has_include
(PR#102) -
引入了一个新的示例:
check_macro_naming
,它在 Boost 本身中很有用 (PR#97) -
修复了 C++20 中删除
std::allocator
成员导致的编译问题 (PR#72) -
修复了 Xpressive 词法分析器和
token_statistics
示例 (PR#79) -
修复了 lexertl 词法分析器 (PR#78)
-
确保在预定义的宏上也会运行钩子 (PR#87)
-
各种小的错误修复
-
现在已弃用 C++98/03 支持,将在 1.77 中删除
-
-
YAP:
-
修复了占位符的编译错误;它们现在在一般情况下工作,并且特别适用于 yap::print()。
-
constexpr 所有 YAP。
-
修复了 yap::print() 中打印的正确值类别。
-
文档澄清。
-
更新的工具
-
Boostbook:
-
将生成的文档的编码从 US-ASCII 更改为 UTF-8。(Glen Fernandes)
-
测试的编译器
Boost 的主要测试编译器是
-
Linux
-
Clang: 3.0, 4.0.1, 6.0.1
-
Clang, C++0x: 3.0
-
Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
-
Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, 6.0.1, 7.0.0, 8.0.0
-
Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
-
GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1
-
GCC, C++0x: 4.4.7
-
GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
-
GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1
-
GCC, C++17: 7.3.0, 8.0.1
-
Intel, C++14: 18.0
-
-
OS X
-
Apple Clang: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++17: 9.1.0, 10.0.0
-
Apple Clang, C++1z: 9.0.0
-
Apple Clang, C++2a: 10.0.0
-
-
Windows
-
GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
-
GCC, C++0x: 4.6.4
-
GCC, C++11: 4.7.3, 4.8.1, 4.9.3
-
GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
-
GCC, C++17: 7.1.0, 7.2.0, 7.3.0
-
Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
-
-
FreeBSD
-
Clang: 4.0.0
-
Clang, C++11: 4.0.0
-
Clang, C++14: 4.0.0
-
Clang, C++1z: 4.0.0
-
Boost 的其他测试编译器包括
-
Linux
-
Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1
-
Clang, C++0x: 3.0
-
Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
-
Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, 6.0.1, 7.0.0, 8.0.0
-
Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
-
GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1
-
GCC, C++0x: 4.4.7
-
GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
-
GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0
-
GCC, C++17: 7.3.0, 8.0.1
-
Intel, C++14: 18.0
-
-
OS X
-
Apple Clang: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++17: 9.1.0, 10.0.0
-
Apple Clang, C++1z: 9.0.0
-
Apple Clang, C++2a: 10.0.0
-
-
Windows
-
GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
-
GCC, C++0x: 4.6.4
-
GCC, C++11: 4.7.3, 4.8.1, 4.9.3
-
GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
-
GCC, C++17: 7.1.0, 7.2.0, 7.3.0
-
Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
-
-
FreeBSD
-
Clang: 4.0.0
-
Clang, C++11: 4.0.0
-
Clang, C++14: 4.0.0
-
Clang, C++1z: 4.0.0
-
致谢
Marshall Clow、Michael Caisse 和 Glen Fernandes 管理此版本。