版本 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 设施添加了对提议的标准执行器的支持。
-
提供的执行器现在满足提议的标准执行器的要求。这些类也继续满足现有的网络 TS 执行器模型的要求。
-
所有 I/O 对象、异步操作和实用程序都将与新的提议的标准执行器以及现有的网络 TS 执行器互操作。
-
引入了
any_io_executor
类型别名,作为所有 I/O 对象的默认运行时多态执行器。这默认为execution::any_executor<>
模板。如果出于向后兼容性的需要,可以定义BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
以使用旧的asio::executor
多态包装器。 -
可以通过定义
BOOST_ASIO_NO_TS_EXECUTORS
来禁用对现有网络 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<>
写入操作以线性化 gather-write 缓冲区序列。 -
当定义了
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:
-
为
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
。定义此项以识别来自现在可能过时的 网络 TS 的执行器的使用。 -
Asio 默认将使用 标准执行器 模型。您可以通过定义
BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
来阻止此行为,在这种情况下,默认将使用网络 TS 模型。设置此标志不会阻止程序显式使用标准执行器模型中的执行器。 -
我们很想知道您或您的公司如何使用 Beast,请考虑在 使用 Beast 的公司和个人 列表中添加一个条目。
-
有关更改的完整列表,请参阅完整的 发行说明。
-
-
Bimap:
-
更正分配器用法(修复 C++20 编译)。 (Glen Fernandes)
-
-
Config:
-
实现
BOOST_NO_CXX11_OVERRIDE
和BOOST_OVERRIDE
。 (Glen Fernandes)
-
-
Core:
-
实现了分配器访问实用程序,这些实用程序为每个工具提供了
allocator_traits
的替代方案,并具有单独的 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
的重载。
-
-
Filesystem:
-
删除了 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
现在返回来自 OS 的实际错误代码。以前,该函数将返回错误代码 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
操作的实现。 -
已弃用: 使用 MSVC 兼容编译器在 Windows 上自动链接到系统库已被弃用,并将在未来的版本中删除。这会影响链接到 Boost.Filesystem 静态库的用户。建议用户更新其项目构建系统,以使用 Boost.Filesystem 的共享库,或在链接器命令行中显式指定 Boost.Filesystem 的依赖项。Boost.Filesystem 共享库的用户不受影响。
-
-
Flyweight:
-
维护工作。
-
-
Format:
-
更正分配器用法(修复 C++20 编译)。 (Glen Fernandes)
-
-
GIL:
-
已删除
-
重大更改:删除了对 Boost.Variant 的依赖
-
-
致谢
-
Samuel Debionne, Pranam Lashkari, Mateusz Loskot, Debabrata Mandal
-
-
Heap:
-
更正了
skew_heap
中顶部节点的销毁。 (Glen Fernandes) -
更正并简化了分配器的使用。 (Glen Fernandes)
-
-
LexicalCast:
-
修复了 Embarcadero 编译器的问题(感谢 Edward Diener)。
-
Log:
-
错误修复
-
syslog sink 后端现在验证用户设置的本地和目标地址的 IP 版本。地址必须具有与 sink 后端构造上
ip_version
命名参数中指定的 IP 版本相同的 IP 版本(默认情况下,假定为 IPv4)。当地址是通过主机名解析获得时,仅考虑具有匹配 IP 版本的地址。 (#119)
-
-
新功能
-
各种组件的移动构造函数和赋值运算符被标记为
noexcept
。 -
添加了一个新的
range_manip
流操作符,可用于输出范围的元素,可以选择用分隔符分隔。 -
添加了一个新的
tuple_manip
流操作符,可用于输出元组或任何其他异构序列的元素,可以选择用分隔符分隔。 -
添加了一个新的
optional_manip
流操作符,可用于输出可选存在的值。
-
-
有关更多详细信息,请参阅 changelog。
-
-
Mp11:
-
提高了大型
N
的mp_with_index<N>
的编译性能。 -
添加了
tuple_transform
(由 Hans Dembinski 贡献)。
-
-
Nowide:
-
该库现在需要符合 C++11 标准的编译器和 stdlib
-
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_ENABLE_LEGACY_SUPPORT_FOR
可用于在使用较新版本的 Outcome 时启用旧命名和功能的别名到较新的命名和功能。 -
概念现在具有蛇形命名风格而不是驼峰命名风格。当 Outcome 首次实现时,人们认为 C++ 20 概念将具有驼峰命名风格。这在 C++ 20 发布之前已更改,Outcome 的概念也已类似地重命名。这不会破坏 Outcome v2.1 中的任何代码,因为提供了兼容性别名。但是,针对 Outcome v2.2 编译的代码需要升级,除非
OUTCOME_ENABLE_LEGACY_SUPPORT_FOR
设置为210
或更低。 -
概念现在位于
OUTCOME_V2_NAMESPACE::concepts
命名空间中。以前,概念位于convert
命名空间中,现在它们位于自己的命名空间中。 -
添加了新概念
basic_result<T>
和basic_outcome<T>
。最终用户发现is_basic_result<T>
和value_or_error<T>
之间存在无益的差距,他们想要一个概念来匹配basic_result
类型,但又不是完全其中之一。添加了填补该空白的概念。 -
操作
TRY
从 Outcome v2.2 开始以不同的方式工作。这是一个严重的代码破坏性更改,它更改了使用OUTCOME_TRY()
的语法。可以在 Outcome v2.1 和 v2.2 之间的更改列表中找到适用于升级代码的正则表达式。
-
-
错误修复
-
#224 Xcode 11.4(目前最新版本)中 Apple 附带的 clang 尚未修补修复 LLVM clang 的补丁,该补丁修复了
noexcept(std::is_constructible<T, void>)
编译失败的问题,这是我多年前最初提交的。因此,放弃等待 Apple 修复他们的 clang,为 Outcome 添加一个解决方法。 -
备用存储无法在 no-value policy 类中使用。由于当时编写代码时明显犯了一个愚蠢的错误,备用存储 API 的原型错误,导致它们无法在 policy 类中工作。抱歉。
-
-
-
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 variadics 的特性,包括
__VA_OPT__
(PR#75) -
实现了
__has_include
(PR#102) -
引入了新的示例:
check_macro_naming
,对 Boost 本身很有用 (PR#97) -
修复了 C++20 中删除
std::allocator
成员导致的编译问题 (PR#72) -
修复了 Xpressive lexer 和
token_statistics
示例 (PR#79) -
修复了 lexertl lexer (PR#78)
-
确保 hook 也对预定义的宏运行 (PR#87)
-
各种小的 bug 修复
-
C++98/03 支持现已弃用,将在 1.77 版本中移除
-
-
YAP:
-
修复了占位符的编译错误;它们现在在一般情况下工作,尤其是在 yap::print() 中工作。
-
将所有 YAP 都设为 constexpr。
-
修复了 yap::print() 中正确值类别的打印。
-
文档澄清。
-
Updated Tools
-
Boostbook:
-
将生成的文档的编码从 US-ASCII 更改为 UTF-8。(Glen Fernandes)
-
Compilers Tested
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 管理了此版本。