版本 1.73.0
版本 1.73.0
2020年4月28日 格林威治标准时间03:57
平台 | 文件 | SHA256 哈希值 |
---|---|---|
Unix | boost_1_73_0.tar.bz2 | 4eb3b8d442b426dc35346235c8733b5ae35ba431690e38c6a8263dce9fcbb402 |
boost_1_73_0.tar.gz | 9995e192e68528793755692917f9eb6422f3052a53c5e13ba278a228af6c7acf | |
Windows | boost_1_73_0.7z | d2e7501bb04fe7abc09aa93f013ae997604286a882da1bd36ddd96ea1163ea71 |
boost_1_73_0.zip | 0909a79524f857ef54570ceef8f397cc0629202532cc997785479c7c08bbc2a4 |
已知问题
这些是来自库作者的补丁,这些补丁在发布时发现太晚而无法修复。请小心,因为它们没有经过正常的测试过程。
-
Outcome
status_code_domain
断言移除 -
Beast 和协程
新增库
-
Nowide: Windows 上具有 UTF-8 API 的标准库函数,来自 Artyom Beilis。
-
StaticString: 一个动态可调整大小的字符串,具有编译时固定容量和连续嵌入式存储,来自 Vinnie Falco 和 Krystian Stasiowski。
更新的库
-
Align:
-
更新
aligned_alloc
以支持较旧的 mingw32。
-
-
Any:
-
通过不包含
<algorithm>
来加速编译。 -
维护工作,包括 CI 强化。
-
-
Asio:
-
修复了与 C++20 concept 语法的兼容性。
-
将 POSIX 描述符类的移动构造函数标记为
noexcept
。 -
添加了
ssl::host_name_verification
类,它是ssl::rfc2818_verification
的直接替代品。ssl::rfc2818_verification
类已被标记为弃用。由于此更改,SSL 支持现在依赖于 OpenSSL 1.0.2 中引入的函数。 -
添加了一个
ssl::context
构造函数来获取原生句柄的所有权。 -
使用以下方法更改了 C++ 语言版本检测gcc使用
__cplusplus
宏。 -
修复了端点异步解析操作中的工作计数问题。
-
修复了
strand<>
转换构造函数和赋值运算符。 -
确保解析器在 fork 后正确重启。
-
修复了与当前 NetBSD 版本的兼容性。
-
删除了一些
async_read
重载中多余的处理程序需求检查。 -
更改了
ssl::context
类以传播来自add_certificate_authority
函数的非 EOF 错误。 -
修复了当线程池具有关联的 I/O 对象时发生的特定于 Windows 的
thread_pool
析构函数挂起问题。 -
更改了select反应器在出错时重新创建“自管道技巧”套接字。这解决了某些 Windows 版本上的一个问题,在这些版本中,这些套接字在系统休眠后断开连接。
-
修复了由于 C++98 中缺少引用折叠而导致的缓冲流中的编译错误。
-
更改了
priority_scheduler
示例以演示对shutdown()
和destroy()
的调用。 -
删除了一些不必要的空指针检查。
-
更改了 Windows 平台检测以将电视标题识别为 Windows 应用程序。
-
添加了一些 emscripten 兼容性补丁。
-
修复了
use_awaitable_t::as_default_on
函数中的编译错误。 -
将 boost.bind 占位符的所有用法更改为使用
boost::placeholders
命名空间。 -
修复了由于不正确的重载选择导致的
async_compose
实现中潜在的编译错误。 -
抑制了一些非虚析构函数警告。
-
各种文档修复和改进。
-
-
Assert:
-
添加了
source_location
。
-
-
Atomic:
-
实现了 C++20 中引入的
atomic_flag::test
操作。 -
atomic<T>
现在应该考虑T
的对齐要求,如果这些要求高于atomic
内部存储的对齐要求,则会有所不同。 -
添加了静态断言,以强制执行对与
atomic
和atomic_ref
使用的值类型T
的要求。这应该禁止将无效类型用作原子。 -
改进了内部锁池实现。池更大,锁选择考虑了原子对象对齐,这应该会降低线程争用的可能性。
-
修复了为 8 位和 16 位参数的
bit_test_and_*
操作生成的错误 x86 代码。其他架构不受影响。 -
修复了
compare_exchange_*
操作中可能的未对齐内存访问,如果value_type
的对齐要求小于atomic
内部存储的对齐要求。 -
boost/atomic/atomic.hpp
不再包含boost/atomic/atomic_flag.hpp
和boost/atomic/fences.hpp
,并且仅定义boost::atomic
类模板和相关 typedef。显式包含其他头文件或使用boost/atomic.hpp
包含 Boost.Atomic 的所有部分。 -
atomic<T>::storage()
访问器和关联的atomic<T>::storage_type
类型已弃用。建议用户分别使用atomic<T>::value()
和atomic<T>::value_type
。用户可以定义BOOST_ATOMIC_SILENCE_STORAGE_DEPRECATION
以在转换期间禁用弃用警告。弃用的部分将在未来版本中删除。 -
删除了对
BOOST_ATOMIC_DETAIL_HIGHLIGHT_OP_AND_TEST
的支持。此宏用作过渡到 Boost.Atomic 1.67(在 1.73 之前 2 年发布)中更新的*_and_test
操作的返回值的辅助工具。
-
Beast:
-
这是一个维护更新.
-
Beast 动态缓冲区中的嵌套
mutable_data_type
已弃用。 -
我们很想知道您或您的公司如何使用 Beast,请考虑在使用 Beast 的公司和个人列表中添加一个条目。
-
有关更改的完整列表,请参阅完整的发行说明。
-
-
Conversion:
-
为引用添加了
boost::polymorphic_downcast
(感谢 Julien Delacroix 提供的补丁)。 -
重大文档更新。
-
-
动态位集:
-
修复了最大块限制定义中的可移植性问题。
-
-
Flyweight:
-
维护工作。
-
-
GIL:
-
更改
-
删除了未使用的且可能未完成的
extension/dynamic_image/reduce.hpp
(PR#466)。该文件尝试实现 Lubomir Bourdev 和 Jaakko Jarvi 的论文《Efficient Run-Time Dispatching in Generic Programming with Minimal Code Bloat》(高效运行时调度与最小代码膨胀的泛型编程)中描述的技术。 -
删除了对 Boost.MPL、Boost.System 和 Boost.Test 的直接依赖。
-
开始移除用于 I/O 扩展测试编译时配置的公共宏,即
BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES
和BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
。现在,如果构建了测试目标,它将无条件地构建其所有测试用例。
-
-
致谢
-
Samuel Debionne, Thiago Henrique Hüpner, Pranam Lashkari, Mateusz Loskot, Debabrata Mandal, Olzhas Zhumabek
-
-
直方图:
-
新功能
-
在
reduce
算法中添加了crop
(裁剪)命令 -
reduce
中的slice
(切片)命令现在可以作用于category
(类别)轴 -
添加了
count
(计数)累加器,可用于向每个单元格添加任意元数据 -
sum
(求和)算法新增了一个参数,可以选择仅对内部区间求和
-
-
修复了几个极端情况下的错误
-
增强了文档
-
如何将 Boost.Histogram 用作外部 API 的后端
-
更多关于如何将 Boost.Histogram 与自定义累加器和 Boost.Accumulators 一起使用
-
更多关于如何使用
reduce
-
更新了基准测试
-
-
请参阅此处查看完整变更日志
-
-
IO:
-
使所有 IOS 状态保存器类都不可复制。(Glen Fernandes)
-
在读取带引号的字符串时,正确处理从输入流第一次读取时的错误。(Glen Fernandes)
-
实现了基于分隔符连接的
ostream_joiner
。(Glen Fernandes) -
将
ostream_string
从 Utility 库迁移到 IO 库,并将其重命名为ostream_put
。 -
在带引号的输出中正确处理流宽度和填充。(Glen Fernandes)
-
优化带引号的输出,直接写入流缓冲区。(Glen Fernandes)
-
Glen Fernandes 成为 IO 库的维护者。
-
-
日志:
-
新功能
-
在日志核心未注册任何接收器时,用于简单日志记录的默认接收器现在会在每条日志记录后自动刷新输出。(#103)
-
core::flush
现在在没有注册接收器时对用于简单日志记录的默认接收器执行刷新。
-
-
错误修复
-
添加了针对某些 syslog API 实现(例如 glibc)的解决方法,这些实现不会在
openlog
调用中保存应用程序标识字符串。此类实现在每次syslog
调用时都可能访问已释放的内存,从而导致未定义的行为。(#97) -
修复了在特定日期(例如
rotation_at_time_point(boost::gregorian::greg_day(1))
)进行日志文件轮换时可能被静默忽略且未发生的问题。(#98) -
修复了如果尚未写入任何日志记录并且设置了目标文件名模式,则
text_file_backend::rotate_file
可能会抛出异常的问题。 -
将库的各个组件移植到
std::allocator_traits
以提高与 C++20 分配器的兼容性。 -
修复了在 MSYS2 Cygwin 环境中构建时出现的编译错误。(#102)
-
-
有关更多详细信息,请参阅变更日志。
-
-
数学:
-
重要提示:C++03 支持现已弃用,并将于 2021 年 3 月移除。
-
添加了三次 Hermite 插值。
-
添加了修正 Akima 插值。
-
添加了 PCHIP 插值。
-
添加了五次 Hermite 插值。
-
为许多分布添加了熵。
-
允许两个端点相等的平凡正交情况,并且还允许交换边界。
-
修复 exp_sinh 正交以使其与非原生范围内的复数类型一起使用。
-
修复 factorial.hpp 中的各种编译器警告。
-
在定时 pFq 计算中使用 std::chrono 而不是 boost::chrono。
-
删除了许多旧的 boost::mpl 依赖项以改进 constexpr 支持。
-
-
Mp11:
-
添加了
mp_unique_if
(由 Kris Jusiak 贡献) -
添加了
mp_flatten
-
添加了
mp_rotate_left
、mp_rotate_right
(由 Duncan Barber 贡献) -
添加了
mp_compose
-
添加了
mp_power_set
-
添加了
mp_partial_sum
-
添加了
mp_iterate
-
-
多索引容器:
-
multi_index_container
现在是AllocatorAware
(分配器感知)。 -
根据 **[swappable.requirements]** 中的标准规范,内部
KeyFromValue
、Compare
、Hash
和Pred
对象的交换现在会在std::swap
和 ADL 候选对象之间选择合适的swap
函数(问题 #29)。 -
提供了一些内部复制构造函数和赋值运算符,它们的默认隐式定义在 C++11 及更高版本中已被弃用(**[depr.impldec]),一些编译器对此发出了警告。
-
维护工作。
-
-
多精度:
-
重要提示:将 C++03 支持标记为已弃用,并将于 2021 年移除。
-
对 cpp_int 的重大更新添加了更快的 Karatsuba 和 Coomba 乘法例程。
-
修复了 gmp_rational 转换为
long double
和__float128
的问题,修复了 #178。 -
修复 libtommath 支持以使其与最新的 libtom 版本一起使用。
-
修复了与最新 Intel C++ 编译器的一些不兼容性。
-
修复了最新 MSVC 版本的
constexpr
算术支持。
-
-
结果:
-
增强功能
-
clang 编译的基于 Outcome 的代码的性能已大大提高。Outcome 的状态位字段的先前实现混淆了 clang 的优化器,这导致代码生成质量低下。与大多数代码生成问题不同,这在实际代码的经验基准测试中很明显,如 P1886 **错误速度基准测试** 所示。
-
better_optimisation
Outcome v2.2.0 未来分支的安全部分已合并到 Outcome v2.1.3 中,其中包括一个新的状态位字段实现。这似乎不会混淆 clang 的优化器,并且 clang 9 生成的代码通常在各种预设用例中都优于 GCC 9 的代码。 -
现在每个提交都会对可安装性进行 CI 测试。由于独立 Outcome 的可安装性(例如
make install
)自身损坏的频率比理想情况更高,因此现在每个提交都会在 CI 上测试可安装性。
-
-
-
PolyCollection:
-
抑制了
boost::poly_collection::for_each
中潜在的冗余移动警告。 -
修复了一个错误,该错误导致在具有非传播、不相等分配器的集合之间进行分配器扩展移动构造和移动赋值时,元素被复制而不是移动。
-
对于 GCC 4.8 附带的旧版 libstdc++-v3(Clang 也可以使用),分配器扩展移动构造不再衰减为分配器扩展复制构造。
-
-
ThrowException(抛出异常):
-
添加了一个
throw_exception
的重载,它接受一个boost::source_location
对象。 -
注意:在禁用异常的情况下使用
BOOST_THROW_EXCEPTION
的项目需要添加此新重载的定义。
-
-
TTI(类型特征推导):
-
为更新版本的 GCC、VC++ 和所有版本的 Clang 编译器添加了函数模板的内省。14.0 之前的旧版本 VC++ 和 4.8 之前的 GCC 可能会失败。
-
添加了对结构体/类、枚举和联合类型的元素的特定内省,可用于比通用“类型”内省更细粒度的内省。
-
-
TypeIndex(类型索引):
-
维护工作,包括与 inspect 工具的 CI 集成。
-
-
Utility(实用工具):
-
ostream_string
工具已从 Utility 库移至 IO 库,并更名为ostream_put
。
-
-
Variant2(可变体2):
-
添加了对
std::hash
、boost::hash
的支持。 -
当
T...
中的所有类型都是平凡的时,variant<T...>
现在也是平凡的。这通过允许在寄存器中传递和返回它来提高性能。
-
-
WinAPI(Windows API):
-
boost/detail/winapi
中的头文件已弃用,并将在未来的版本中删除。
-
更新的工具
测试过的编译器
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 管理了此版本。