版本 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
) 和 yield (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当检测编译器特性时。
-
禁用了为clangMSVC 附带的
-
协程支持。当定义了
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 上会导致文件描述符泄漏。 -
copy_file_range
系统调用现在自 Linux 内核 4.5 起使用,而以前仅自 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
-
-
Multi-index Containers:
-
维护工作。
-
-
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 aka @denzor200)
-
修复了 inspect 工具发现的问题
-
修复了一些警告,包括删除 include/boost/pfr/detail/fields_count.hpp 中的额外分号 (#72)
-
为继承类型添加了编译时断言(感谢 Denis Mikhailov aka @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
的流插入运算符。
-
更新的工具
-
Build:
-
包括 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 管理了此版本。