版本 1.72.0
版本 1.72.0
2019年12月11日 18:06 GMT
平台 | 文件 | SHA256 哈希值 |
---|---|---|
Unix | boost_1_72_0.tar.bz2 | 59c9b274bc451cf91a9ba1dd2c7fdcaf5d60b1b3aa83f2c9fa143417cc660722 |
boost_1_72_0.tar.gz | c66e88d5786f2ca4dbebb14e06b566fb642a1a6947ad8cc9091f9f445134143f | |
Windows | boost_1_72_0.7z | 247a91dd7e4d9dd3c4b954b532fbc167ba62dc15ab834e5ad893d7c3f9eb5f0f |
boost_1_72_0.zip | 8c20440aaba21dd963c0f7149517445f50c62ce4eb689df2b5544cc89e6e621e |
更新的库
-
Asio:
-
将
async_initiate
辅助函数更改为自动推断其返回类型,适用于 C++11 或更高版本。 -
将所有异步操作更改为使用自动推断的返回类型,适用于 C++14 或更高版本。
-
引入了 concept 来支持
async_initiate
。 -
向所有 I/O 对象类型添加了嵌套模板类型
rebind_executor
。 -
更改了 initiation 函数对象,以通过嵌套类型
executor_type
和成员函数get_executor()
报告其关联的 I/O 执行器。 -
添加了
default_completion_token
trait,为 I/O 执行器类型提供了一个关联的默认 completion token 类型,用于异步操作。例如,此 trait 专用于use_awaitable
completion token,以允许异步操作按如下方式使用:co_await socket.async_connect(my_endpoint)
。 -
将 Windows 特定的 I/O 对象的异步操作中缺少的
async_initiate
添加进去。 -
确保将执行器类型传播到新接受的套接字。
-
更改为要求
Protocol
复制和移动操作永不抛出异常。 -
更改为要求
Endpoint
默认构造函数和移动操作永不抛出异常。 -
将
noexcept
限定符添加到协议访问器。 -
将
noexcept
限定符添加到套接字移动构造函数。 -
修复了与在 Windows 上打开串行端口相关的问题
-
使用正确的常量初始化 RTS 控制标志。
-
指定默认波特率 (9600)。
-
-
修复了异步接受操作自动重启时可能发生的“未完成工作计数”丢失问题。
-
有关更多详细信息,请参阅修订历史记录。
-
-
Atomic:
-
添加了针对某些版本的 libstdc++ 不将
__float128
视为浮点类型的问题的解决方法。 -
改进了与 clang-win 编译器的兼容性。
-
-
Beast:
-
这是一个维护更新,包含错误修复和使用 Boost.Asio 中提供的新功能的更新。
-
我们很想知道您或您的公司如何使用 Beast,请考虑在使用 Beast 的公司和个人列表中添加一个条目。
-
有关更改的完整列表,请参阅完整的发行说明。
-
-
Context:
-
支持 s390x 架构
-
移除 execution_context
-
-
Endian:
-
在 GCC 和 Clang 上使
endian_reverse
、conditional_reverse
和*_to_*
成为constexpr
-
添加了便捷的加载和存储函数
-
添加了浮点便捷类型定义
-
添加了
data()
的非 const 重载;将其返回类型更改为unsigned char*
-
在可用时,向
endian_reverse
添加了__int128
支持 -
添加了一个便捷的头文件
boost/endian.hpp
-
-
Filesystem:
-
将
filesystem_error
提取到exception.hpp
;将file_status
以及相关的枚举和函数提取到file_status.hpp
;将directory_entry
、directory_iterator
和recursive_directory_iterator
提取到directory.hpp
。 -
**已弃用:** 为了向后兼容,` operations.hpp` 仍然包含新的头文件 ` exception.hpp`、` file_status.hpp` 和 ` directory.hpp`,除非定义了 ` BOOST_FILESYSTEM_NO_DEPRECATED` 宏。这些隐式包含被认为已弃用,并将在未来的版本中删除。鼓励用户直接包含新的头文件或包含 ` filesystem.hpp`。
-
filesystem_error
异常现在在 Boost.Filesystem 的已编译库中实现。用户可能需要在其项目中添加与 Boost.Filesystem 库的链接。 -
在 POSIX.1-2008 平台上,使用
utimensat
代替utime
。utime
在 POSIX.1-2008 中声明为 obsolete,并且可以在例如 uClibc-ng 中禁用。(PR#115) -
directory_iterator
现在在内存分配错误时处于结束状态。 -
在 POSIX 系统上的
directory_iterator
中,对readdir
/readdir_r
的支持已重新设计,以避免在使用readdir
时为dirent
结构分配内存。这减少了内存消耗,并消除了如果readdir
产生非常长的目录名时缓冲区溢出的可能性。 -
在 Windows 上,使用 Boost.WinAPI 选择目标 Windows 版本。
-
**新增:** 添加了
directory_options
枚举,它反映了 C++20 中的同名枚举。directory_iterator
和recursive_directory_iterator
支持该枚举来自定义迭代行为。特别是,迭代器现在支持跳过由于权限不足而无法打开的目录。symlink_option
枚举现在已弃用,应替换为directory_options
。 -
默认情况下,
recursive_directory_iterator
现在在出错时重置为结束状态,如 C++20 所要求。(#112) -
**新增:** 添加了选项
directory_options::pop_on_error
,它将recursive_directory_iterator
配置为通过重复调用pop()
直到成功或达到结束状态来尝试从迭代错误中恢复。(#113) -
**新增:** 添加了选项
directory_options::skip_dangling_symlinks
,它将recursive_directory_iterator
配置为不跟随悬空目录符号链接并继续迭代,而不是报告错误。 -
**已弃用:**
recursive_directory_iterator
的以下成员现在标记为已弃用:level()
、no_push_pending()
、no_push_request()
、no_push()
。建议用户将其替换为标准对应项:depth()
、recursion_pending()
、disable_recursion_pending()
。请注意,recursion_pending()
与no_push_pending()
和no_push_request()
的含义相反。已弃用的方法将在未来的版本中删除。 -
修复了
path::lexically_relative
(以及任何依赖算法),以正确处理其参数中的空路径元素、点路径元素和点点路径元素。该行为更接近于 C++17std::path::lexically_relative
,因为空路径元素和点路径元素被忽略,点点路径元素通过减少生成的相对路径中点点路径元素的数量来考虑。(#76)
-
-
Functional/Factory:
-
Glen Fernandes 重写了
factory
和value_factory
的实现,以提供以下功能-
尽可能支持右值参数
-
尽可能通过可变参数模板支持任意数量的参数
-
支持 final 的分配器
-
支持使用 fancy 指针的分配器
-
支持禁用异常 (
BOOST_NO_EXCEPTIONS
) -
改进了编译时间
-
-
以下功能已被移除
-
通过
BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY
增加 C++03 编译器的限制 -
通过
BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T
使用boost::none_t
代替void
-
-
-
GIL:
-
新增
-
GSoC 2019:用于图像缩小采样的 Lanczos 重采样(PR#309)。
-
GSoC 2019:用于二值阈值化、反二值阈值化和截断阈值化的方法(PR#313)。
-
GSoC 2019: Otsu 阈值化方法(PR#314)。
-
GSoC 2019: 使用邻域区域的均值或高斯加权和进行自适应阈值化(PR#315)。
-
GSoC 2019: Harris 响应计算(无非极大值抑制的角点检测器)(PR#350)。
-
GSoC 2019: Hessian 角点检测器(PR#364)。
-
GSoC 2019: 将二维卷积实现为新函数
convolve_2d
(PR#367)。 -
GSoC 2019: 使用均值滤波器进行盒式滤波(PR#383)。
-
GSoC 2019: 基于归一化均值滤波器的模糊函数(PR#383)。
-
GSoC 2019: Sobel 和 Scharr 算子(PR#392)。
-
GSoC 2019: 中值滤波器,用于去除图像噪声(PR#393)。
-
继续添加新的测试用例并显著提高了整体测试覆盖率。
-
记录了
cached_location_t
的用途(PR#287)。 -
数值扩展中添加了函数
extend_boundary
,用于执行图像边界扩展(PR#386)。 -
项目发行说明维护在 Markdown 文件
RELEASES.md
中(PR#404)。
-
-
更改
-
将所有测试、核心功能和扩展移动到
test/
目录下(PR#302)。
-
-
-
日志:
-
改进了与 clang-win 编译器的兼容性。
-
-
MPI:
-
文档说明。
-
修复了使用显式输入缓冲区偏移量时的 scatterv 错误。
-
支持使用 MPI_Probe 并与 Intel MPI >= 2019.4 兼容
-
Windows 上的符号可见性
-
-
数学:
-
添加了超几何函数 1F0、0F1、2F0、1F1 和 pFq。
-
添加了 Jacobi 多项式(及其导数)的计算。
-
添加了 Gegenbauer 多项式(及其导数)的计算。
-
添加了基数 B 样条曲线(及其导数)作为其本身的多项式函数。
-
添加了基数三角插值法。
-
添加了新的统计信息子部分。
-
添加了单样本学生 t 检验。
-
添加了用于正态性的 Anderson Darling 检验。
-
添加了用于自相关的 Ljung Box 检验。
-
添加了用于随机序列的游程检验。
-
标头
boost/math/tools/univariate_statistics.hpp
和boost/math/tools/bivariate_statistics.hpp
已弃用,改为使用boost/math/statistics/univariate_statistics.hpp
和boost/math/statistics/bivariate_statistics.hpp
。 -
添加了经验 CDF 分布。
-
重新设计了多精度伽马函数使用的斯特林近似,使其适用于所有在常规精度下使用 Lanczos 近似的函数。并将 Lanczos 近似扩展到高达 100 位小数精度。
-
-
多精度:
-
大型
constexpr
更新允许 cpp_int 和 float128 算术在 gcc 和 clang 9 或更高版本,或任何支持std::is_constant_evaluated()
的编译器中完全constexpr
。 -
修复了可变精度 mpf_float 中导致其在尝试选择正确精度时陷入困境的错误 - 请参阅 https://github.com/boostorg/multiprecision/issues/164。
-
-
结果:
-
增强功能
-
独立 outcome 现在可以
make install
安装,并且 cmakefind_package()
可以找到它。请注意,您必须单独安装 Outcome 的依赖项 quickcpplib 并对其进行find_package()
,否则 Outcome 的find_package()
将失败。 -
独立 outcome 用于指定依赖库的 git 子模块机制已被 cmake 对依赖项的超级构建机制所取代。在 cmake 配置时,将 git 克隆 quickcpplib 的内部副本,并将其构建并安装到构建目录中,内部
find_package()
将从中使用它。这打破了将未配置的 Outcome 仓库用作 Outcome 实现的用法,现在必须执行以下操作之一:1. 将 Outcome 作为子目录添加到 cmake 构建中。2. 使用 cmake 超级构建(即ExternalProject_Add()
)将 Outcome 构建并安装到本地安装中。3. 使用其中一个单头版本。 -
对于独立 outcome,现在将检查当前编译器是否可以编译包含 C++ 概念的代码,如果可以,则所有 Outcome 的 cmake 使用者都将启用 C++ 概念。将 cmake 变量
CXX_CONCEPTS_FLAGS
设置为空字符串可以防止自动检测和启用 C++ 概念支持。 -
OUTCOME_TRY
操作现在向编译器提示该操作将成功。P1886 **错误速度基准测试** 表明,通过向编译器提示表达式是否预期成功,在非常小的函数中可以获得相当大的收益。OUTCOME_TRY
以前根本没有向编译器提示,但现在可以了。一套新的宏OUTCOME_TRY_FAILURE_LIKELY
向编译器提示预期失败。如果您希望返回到以前未提示的行为,请将OUTCOME_TRY_LIKELY(expr)
定义为(!!expr)
。 -
#199 添加了对 C++ 协程的支持。这分为两部分,首先,现在有一个
OUTCOME_CO_TRY()
操作,适用于在 C++ 协程中执行TRY
操作。其次,在头文件outcome/coroutine_support.hpp
中,有eager<OutcomeType>
和lazy<OutcomeType>
的实现,它们可以让您更自然、更有效地在 C++ 协程中使用basic_result
或basic_outcome
——具体来说,如果结果或 outcome 将从异常指针构造,则协程中抛出的异常将返回一个错误或异常结果以及抛出的异常,而不是通过协程机制抛出异常(在当前的编译器中,这很有可能导致程序崩溃)。eager<T>
和lazy<T>
也都可以接受任何T
。两者都经过测试,并在 VS2019 和 clang 9 上工作正常。 -
#210
make_error_code()
和make_exception_ptr()
现在也被认为是basic_result<>
的兼容复制和移动转换。这允许您将basic_result<T, E>
构造为basic_result<T, error_code>
,其中E
是一个自定义类型,它实现了 ADL 发现的自由函数error_code make_error_code(E)
,但在其他方面与error_code
无关。exception_ptr
的可用性与make_exception_ptr()
作为 ADL 发现的自由函数相同。为了减少构造函数的数量,basic_outcome<>
对此的支持不如basic_result<>
,但它将通过此机制接受来自basic_result<>
和failure_type<>
的转换。
-
-
错误修复
-
#184 编译器中对
[[nodiscard]]
支持的检测轻微损坏。
-
-
-
PolyCollection:
-
维护工作。
-
-
预处理器:
-
添加了讨论空性的主题
-
支持 C++20
__VA_OPT__
结构-
BOOST_PP_VARIADIC_HAS_OPT
指示在 C++20 级别是否支持__VA_OPT__
-
BOOST_PP_CHECK_EMPTY
使用 C++20 级别的__VA_OPT__
测试空性 -
BOOST_PP_VA_OPT
比 C++20 级别的__VA_OPT__
更灵活的替代方案
-
-
-
智能指针:
-
已为标量和数组实现了
allocate_unique
。(Glen Fernandes)
-
-
VMD:
-
BOOST_VMD_IS_EMPTY
已更新为在 C++20 级别使用__VA_OPT__
,具有 100% 的可靠性
-
已测试的编译器
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 管理了此版本。