版本 1.77.0
版本 1.77.0
2021 年 8 月 11 日 14:25 GMT
平台 | 文件 | SHA256 哈希 |
---|---|---|
unix | boost_1_77_0.tar.bz2 | fc9f85fc030e233142908241af7a846e60630aa7388de9a5fafb1f3a26840854 |
boost_1_77_0.tar.gz | 5347464af5b14ac54bb945dc68f1dd7c56f0dad7262816b956138fc53bcc0131 | |
windows | boost_1_77_0.7z | f2dd9722b21450daf5ce8ef82c2d99c7ec304f913ee6c6b7f047d5639503dda1 |
boost_1_77_0.zip | d2886ceff60c35fc6dc9120e8faa960c1e9535f2d7ce447469eae9836110ea77 |
新库
更新的库
-
Any:
-
添加了
boost::anys::basic_any
- 一种具有可定制的小对象优化功能的数据类型,其实例可以保存满足 ValueType 要求的任何类型的实例(非常感谢 Ruslan Arutyunyan @rarutyun)。如果您不确定是否真的需要它,请改用boost::any
。 -
开始使用 GithubActions CI 进行额外测试
-
-
Asio:
-
添加了对取消单个异步操作的支持。
-
添加了
associator
特性,用于泛型地转发关联器。 -
更改了 Asio 中实现的所有异步操作,以将它们的完成处理程序作为右值引用调用。
-
添加了对具有多个完成签名的异步操作的支持。
-
为
awaitable<>
添加了operator&&
和operator||
,以允许在并行中轻松等待协程。 -
添加了
experimental::as_tuple
完成标记适配器。 -
添加了
experimental::append
完成标记适配器。 -
添加了
experimental::prepend
完成标记适配器。 -
添加了
experimental::deferred
完成标记,该标记允许异步操作的延迟执行。 -
添加了
experimental::parallel_group
类和experimental::make_parallel_group
函数。 -
添加了
experimental::promise
,允许异步操作的急切执行和同步。 -
添加了
experimental::coro
类模板,这是一个 C++20 协程原语,能够组合异步等待(co_await
)和让步(co_yield
)。 -
向
ssl::stream<>
添加了移动赋值。 -
更改了
co_spawn
以将协程的初始步骤dispatch
到执行器。 -
当与异步操作一起使用时,为
any_executor
和any_io_executor
启用了额外的优化。 -
向
awaitable<>
添加了nodiscard
属性。 -
增加了默认回收分配器中的缓存槽数量。
-
更改了默认分配器行为以尊重对齐要求,以支持过度对齐的类型。
-
确保在反向名称解析中始终初始化结果字符串。
-
修复了
use_awaitable_t::executor_with_default
中的递归模板实例化问题。 -
修复了
any_io_executor
相等运算符以根据目标执行器正确返回结果。 -
修复了
strand<>
以避免使用可能已移动的执行器。 -
确保gcc测试不用于clang在检测编译器特性时。
-
禁用了对clang随 MSVC 一起提供的协程支持。
-
当定义了
OPENSSL_NO_SSL_INTERN
时,修复了与最近的 LibreSSL 的兼容性。 -
修复了
posix::basic_stream_descriptor
移动操作,以使用非默认的执行器。 -
有关更多详细信息,请参阅 修订历史。
-
-
Atomic:
-
添加了
make_atomic_ref
和make_ipc_atomic_ref
工厂函数,用于构造原子引用对象。 -
为
atomic_ref
和ipc_atomic_ref
添加了 C++17 模板参数推导指南,以允许在可以从构造函数参数推导时省略模板参数。
-
-
Beast:
-
此维护更新带来了小的错误修复和更新的 CI 报告。
-
我们很想知道您或您的公司如何使用 Beast,请考虑在 使用 Beast 的公司和个人 列表中添加一个条目。
-
有关更改的完整列表,请参阅完整的 发行说明。
-
-
Conversion:
-
修复了损坏的链接 (PR#23)。
-
开始使用 GithubActions CI 进行额外测试
-
Filesystem:
-
推出 Boost.Filesystem v4。 此库的新版本删除了 v3 的所有已弃用功能,并进行了一些破坏性的 API 更改,旨在使 Boost.Filesystem 更兼容 C++17 中引入的 std::filesystem。差异在发行说明和文档中使用 v3 和 v4 标签进行描述,并在单独的部分中进行总结。用户可以通过在编译代码时将
BOOST_FILESYSTEM_VERSION
宏定义为 3 或 4 来选择 Boost.Filesystem 版本。无需为每个库版本单独编译 Boost.Filesystem - 单个二进制文件同时支持 v3 和 v4。用户应避免在同一应用程序中使用 v3 和 v4,因为这可能会导致细微的错误。目前,v3 是默认值。在未来的版本中,v4 将成为默认值,最终将删除 v3。v4 功能正常,但仍处于开发阶段,未来可能会出现破坏性的 API 更改。 -
v4:
path::stem
和path::extension
不再将以点开头且没有其他点的文件名视为扩展名。以点开头的文件名通常被视为具有空扩展名的文件名。前导点用于指示大多数类 UNIX 系统上的隐藏文件。 (#88) -
新增: 改进了 Windows 上各种路径前缀的支持。添加了对本地设备前缀 ("\\.\") 和实验性 NT 路径前缀 ("\??\") 的支持。这些前缀将包含在路径的根名称中。请注意,在 Boost.Filesystem v3 中使用这些前缀可能会导致意外的结果(例如,
path("\\\\.\\").stem() == "\\\\"
)。建议仅在 Boost.Filesystem v4 中使用这些前缀。 -
重构了
path::lexically_normal
的实现,以消除规范化路径中重复的点 (".") 元素的一些情况。 -
新增: 在 Linux 上添加了对
statx
和getrandom
系统调用的运行时检测。如果系统调用在编译时存在,但在运行时因ENOSYS
而失败(例如,在限制系统调用的 Docker 容器中,即使在主机上可用),这将非常有用。(#172) -
新增: 添加了在库构建时禁用各种系统 API 使用的支持。当库配置脚本检测到某个 API 存在,但由于某种原因(例如,当运行时检测在目标系统上不起作用时)不能使用时,这将非常有用。有关详细信息,请参阅库文档中关于配置宏的描述。
-
新增: 为
copy_file
操作添加了copy_options::synchronize_data
和copy_options::synchronize
选项。这些选项允许将写入的数据和属性与永久存储同步。这些选项在性能方面代价很高,但可以确保复制数据的可靠性。请注意,自 Boost.Filesystem 1.74.0 以来,copy_file
在 POSIX 系统上执行隐式数据同步。此版本添加了对更多平台的支持,并默认禁用数据同步,同时允许调用者显式请求同步。(#186) -
在 POSIX 系统上,为内部发出的一些系统调用添加了
EINTR
错误代码的处理。特别地,EINTR
可能在close
上被忽略,这在 HP-UX 上会导致文件描述符泄漏。 -
自 Linux 内核 4.5 起,现在使用
copy_file_range
系统调用,而之前仅从 5.3 版本开始启用。如果copy_file_range
无法在文件系统之间复制给定的文件,则copy_file
实现将回退到sendfile
或read
/write
循环。 -
基于 Linux
sendfile
和copy_file_range
系统调用的copy_file
实现将不会在已知包含生成内容的文件系统上使用。这些系统调用与此类文件不兼容,复制它们会导致文件大小为零。将改为使用通用的read
/write
循环。目前,列入黑名单的文件系统包括:procfs、sysfs、tracefs 和 debugfs。 -
在基于
read
/write
循环的copy_file
实现中,增加了用于临时存储的缓冲区的最大大小,并考虑目标文件系统块大小以获得更优化的性能。 -
在 Windows CE 上,调用
current_path
来获取进程的当前路径现在将失败并返回错误,而不是成功返回根路径。此平台不支持当前目录。在 Boost.Filesystem 的先前版本中,更改当前路径已经会类似地失败。 -
在
canonical
中,修复了如果较早的符号链接解析为与原始路径不同的根的绝对路径时,检查引用根目录上方的目录的符号链接的问题。 -
在
canonical
中,添加了在调用期间可以解析的最大符号链接数的限制。该限制目前至少为 40 个符号链接。 -
新增: 添加了以
base
路径作为参数的weakly_canonical
重载。 -
在 Windows 上,如果输入路径包含文件系统中不存在的元素,但被后续的点点("..")元素取消,则
weakly_canonical
不再失败并返回错误。例如,如果 "C:\a" 目录不存在,则weakly_canonical("C:\\a\\..")
之前会失败。(#201) -
在 Windows 上,当标准库支持使用宽字符路径打开文件时,
boost/filesystem/fstream.hpp
中提供的文件流将在 libc++ 7.0 及更高版本上使用宽字符路径。(#181) -
在 Windows 上,如果 Windows 配置为开发者模式,则创建符号链接不再需要提升的权限。
-
对于某些编译器,Boost.Filesystem 内部使用的全局对象现在会在用户的全局析构函数调用之后销毁。这允许在程序终止阶段调用 Boost.Filesystem 方法。特别是,这涉及用于字符代码转换的路径区域设置,可以通过调用
path::imbue
来安装。支持的编译器包括 MSVC、GCC 和 Clang,以及其他支持通过#pragma section
(对于与 MSVC 兼容的编译器)或__attribute__ ((init_priority))
(对于与 GCC 兼容的编译器)自定义程序初始化顺序的编译器。
-
-
几何:
-
JSON:
-
value_to
支持TupleLike
类型。 -
value_to
和value_from
支持std::array
和类似的类型。 -
从
string
到std::string_view
的隐式转换运算符。 -
json 类型的
std::hash
特化。 -
修复了
object
和key_value_pair
中的分配错误。 -
修复了从构成空范围的一对迭代器构造
array
时发生的崩溃。
-
-
LexicalCast:
-
修复了将超出 int 可表示范围的浮点值赋值给 int 的问题。
-
开始使用 GithubActions CI 进行额外测试
-
-
Mp11:
-
添加了
mp_intersperse
、mp_split
、mp_join
-
-
多索引容器:
-
维护工作。
-
-
Nowide:
-
允许在
main
之前使用iostream
类(尽力而为,适用于大多数环境) -
修复了重定向输入/输出时
cin/cout/cerr
中rdbuf
的初始化 -
修复了使用
putback()
后cin::unget()
中的极端情况 -
修复了移动赋值后可能延迟的
filebuf
的close
-
提高了
utf8_codecvt
的性能
-
-
PFR:
-
现在使用基于 MurMur Hash 的 hash_combine() 实现来减少冲突计数并提高
boost::pfr::hash_value()
的质量 -
Visual Studio 2017 现在支持 C++14 模式(感谢 Denis Mikhailov,又名 @denzor200)
-
修复了 inspect 工具发现的问题
-
修复了一些警告,包括移除了 include/boost/pfr/detail/fields_count.hpp 中的多余分号 (#72)
-
为继承类型添加了编译时断言(感谢 Denis Mikhailov,又名 @denzor200)
-
如果保证了复制省略,现在可以反射具有不可移动字段的聚合类型
-
修复了拼写问题
-
开始使用 GithubActions CI 进行额外测试
-
-
PropertyTree:
-
这是一个维护版本。
-
扩展 CI 中的编译器覆盖范围。
-
修复了 CMakeLists.txt 的 Boost 兼容性。
-
-
System:
-
从
error_category
到std::error_category
的转换运算符已得到改进,不再需要<map>
或<mutex>
。 -
error_category
的比较运算符现在是内联友元函数,而不是成员函数(这是先前更改的副作用)。 -
error_condition
现在推迟调用generic_category()
,以避免在实际需要之前实例化对象。 -
error_condition::failed
和error_condition::message
已取消弃用,operator bool()
现在再次返回failed()
。 -
系统类别现在不调用
generic_category()
,以避免实例化对象。 -
在某些情况下,
default_error_condition
的返回值会变为通用类别的error_condition
,而不是系统类别的。 当输入error_code
来自系统类别,并且不对应于任何errc_t
值时,在 POSIX 上会发生这种情况。 -
error_code
和std::error_code
的互操作性得到了显著提高。 现在可以从std::error_code
构造boost::system::error_code
,并且可以将boost::system::error_code
传递给接受std::error_code&
的函数。 -
添加了
error_condition
的流插入运算符。
-
更新的工具
-
构建:
-
包括 B2 版本 4.6.1 的发布。
-
测试的编译器
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 管理了此版本。