| 平台 | 文件 | SHA256 哈希 | |
|---|---|---|---|
| Unix | boost_1_91_0.tar.bz2 | de5e6b0e4913395c6bdfa90537febd9028ea4c0735d2cdb0cd9b45d5f51264f5 de5e6b0e49....d5f51264f5 de5e6....264f5 | |
| boost_1_91_0.tar.gz | 5734305f40a76c30f951c9abd409a45a2a19fb546efe4162119250bbe4d3a463 5734305f40....bbe4d3a463 57343....3a463 | ||
| Windows | boost_1_91_0.7z | 9446c37fd86fecd95254ebe5d368a66ef9b09cec4592b2746979076657e24e65 9446c37fd8....6657e24e65 9446c....24e65 | |
| boost_1_91_0.zip | 69c6f32fbda3c478fb310ec251e6699e5e584dbc71afb5425c2f6e98c9540a77 69c6f32fbd....98c9540a77 69c6f....40a77 | ||
| Windows (二进制) | boost_1_91_0-msvc-14.1-32.exe | 56eeff9b98ae70620c714665c950b23b5eb58c066ed0221c1e3d01705d5ab442 56eeff9b98....705d5ab442 56eef....ab442 | |
| boost_1_91_0-msvc-14.1-64.exe | d6ca2151050f1acba20527828635c7c99e24049147dbaa992c95ca07d574f26a d6ca215105....07d574f26a d6ca2....4f26a | ||
| boost_1_91_0-msvc-14.2-32.exe | bc3cf648d6f63c57ca7e0a84fb8af904eddb76dfc577a180b87034e962e24ee7 bc3cf648d6....e962e24ee7 bc3cf....24ee7 | ||
| boost_1_91_0-msvc-14.2-64.exe | 73dff92c2d2524b6bbea1db67372cf3186f4af1267d2d40a50093ab1aede5ccd 73dff92c2d....b1aede5ccd 73dff....e5ccd | ||
| boost_1_91_0-msvc-14.3-32.exe | 484e1a2ebe65dea34304c3464944571a17a7703ae3493fc554dd4d2988dc5f52 484e1a2ebe....2988dc5f52 484e1....c5f52 | ||
| boost_1_91_0-msvc-14.3-64.exe | b92b2f93de66b4722dc26513432b6aeb3405e9c77999586c68b7bb20f2c1bbc7 b92b2f93de....20f2c1bbc7 b92b2....1bbc7 | ||
| boost_1_91_0-msvc-14.5-32.exe | d96cd6b62fd0bf1666456a9864f220db45307e5c22853bf81b917cb5f140c448 d96cd6b62f....b5f140c448 d96cd....0c448 | ||
| boost_1_91_0-msvc-14.5-64.exe | f9e05acdeb517ba911cf50e96ee3da06eec803d186d4aa715ad9d8aef722faf5 f9e05acdeb....aef722faf5 f9e05....2faf5 | ||
您当前选择的是 1.91.0 版本。如果有更新的版本发布,您将继续查看 1.91.0 版本,而非新的 最新版本。
版本 1.91.0
常规说明
-
StaticAssert 已合并至 Config 中。这包括了代码、测试和文档。为了向后兼容,git 子模块、CMake 和 b2 的 StaticAssert 目标仍然可用;这些目标只是简单地引入了对 Config 的依赖。最终,该子模块和目标将被移除。建议用户更新其对 StaticAssert 的依赖,将其替换为 Config。无需进行 C++ 代码修改。大多数 Boost 库已相应更新。
新库
-
-
由 Matt Borland 和 Christopher Kormanyos 实现的 IEEE754 十进制浮点数。
-
更新的库
-
Any:
-
修复了 CMake 中
import std的检测问题。 -
简化了
boost::anys::basic_any的实现。
-
-
-
增加了通过内联命名空间实现的二进制版本控制功能,允许在同一进程中并存多个 Asio 版本而不会产生符号冲突。
-
将默认的 Windows 互斥锁实现从
CRITICAL_SECTION改为SRWLOCK。 -
增加了一个基于
std::atomic的“精简”互斥锁实现,减小了 strand、socket 及其他描述符的状态大小。 -
增加了对 Cygwin64 环境下编译的支持,包括在未定义
__USE_W32_SOCKETS的情况下。 -
增加了在包含 Asio 头文件前重写
BOOST_ASIO_DECL的能力。 -
修复了 NetBSD 上对
MSG_NOSIGNAL的处理。 -
修复了在不再支持链接
boost_system的较新 Boost 版本下的构建问题。 -
修复了与旧版 Android 上 musl libc 的兼容性。
-
修复了旧版 Apple 平台上
std::aligned_alloc的检测问题。 -
修复了 MSVC 下
serial_port_base::character_size::store的警告。 -
在文档中澄清了
ip::multicast::outbound_interface的 IPv4 与 IPv6 语义。 -
更新了 TLS v1.3 上下文初始化,以正确检测 LibreSSL 支持。
-
修复了与近期 OpenSSL 关于
X509常量性 API 变更的兼容性。 -
查阅 修订历史 获取更多详情。
-
-
-
修复了 Apple 编译器下 PowerPC 上的
thread_pause编译问题。(#79)
-
-
-
修复了
inflate_with_eb中的类型转换警告。 -
对 chunk header 强制执行 8KB 合理性限制。
-
使 OpenSSL 成为测试的可选依赖项。
-
移除了对 Boost.StaticAssert 的依赖。
-
将
HTTP2-Settings添加到 HTTP 字段枚举中。
-
-
-
修复了
to_chars中绝对值小于 2^64 的负 128 位整数溢出的问题。
-
-
Core:
-
头文件
boost/is_placeholder.hpp已从 Bind 移动到 Core。(#90)
-
-
-
在 C++20 下,当包含类仍未完成时,描述的嵌套枚举现在可以工作。(感谢 Julien Blanc。)
-
将
enum_to_string设置为 constexpr。(感谢 Julien Blanc。)
-
-
-
为
operator-( const bit_iterator_base< Iter > & lhs, const bit_iterator_base< Iter > & rhs )添加了缺失的友元声明。 -
修复了标准库实现中使用原始指针作为迭代器时的编译问题。
-
修复了
from_block_range(),防止其在 bitset 的未使用部分设置任何位。
-
-
异常:
-
增加了可定制的序列化 API,内置支持 Boost.JSON 和 nlohmann/json。
-
-
-
Boost.Filesystem 现在定义并使用其自己的平台宏
BOOST_FILESYSTEM_POSIX_API和BOOST_FILESYSTEM_WINDOWS_API。旧的BOOST_POSIX_API和BOOST_WINDOWS_API宏仍由 Boost.System 定义。Boost.Filesystem 将检查这两组宏是否同步,默认情况下,如果不一致将导致编译失败。通过将BOOST_FILESYSTEM_ALLOW_SYSTEM_API_MISMATCH定义为 1,可将编译错误降级为警告,定义为 2 则完全禁用该检查。注意,这种情况下 Boost.Filesystem 报告的错误代码值将与错误类别不匹配。 -
在不支持
openat及相关 API 的 POSIX 平台上,修复了当迭代器遇到悬空符号链接且禁用链接跟踪时recursive_directory_iterator增量报告的错误。 -
Cygwin 用户的破坏性变更。 该库现在将 Cygwin 视为 POSIX 平台。这会带来一些用户可见的结果,特别是:
-
path::value_type类型已从wchar_t更改为char。与其他 POSIX 平台一样,宽字符路径将使用path::imbue设置的区域设置转换为窄字符编码。注意,由于 Cygwin 在 Windows 之上运行,它也会在内部执行字符代码转换。配置正确的 Cygwin 环境区域设置非常重要。 -
路径语法现在遵循 POSIX 约定,不支持 Windows 特有的路径(例如 UNC 路径、驱动器名称和路径前缀)。
-
某些 Windows 特定的 API 部分将变得无法访问。由于重解析点(reparse points)是 Windows 特有功能,因此不会再为文件报告
file_type::reparse_file。重解析点的处理取决于 Cygwin 运行时的行为。 -
Cygwin 有其自己的符号链接实现,与原生 Windows 符号链接不兼容。Boost.Filesystem 现在将创建并操作 Cygwin 符号链接。
-
Boost.Filesystem 报告的错误代码现在将使用 POSIX
errno值。
-
-
在 DragonFly BSD、NetBSD 和 Solaris 上,Boost.Filesystem 默认路径区域设置现在使用 UTF-8 进行路径字符编码。
-
在 Linux 上,除了之前列入黑名单的文件系统外,对于 configfs、securityfs、cgroup 和 cgroup2 文件系统,现在使用
read/write循环实现的copy_file和copy。
-
-
JSON:
-
将
value从std::initializer_list的构造方式更改为使用value_from。
-
-
LEAF:
-
增加了可定制的序列化 API,内置支持 Boost.JSON 和 nlohmann/json。
-
增加了在 Windows 上跨 DLL 边界使用 LEAF 错误对象的支持(默认关闭)。
-
对内部 TLS API 进行了优化(例如 Win32、嵌入式)。
-
改进了诊断系统和
on_error的实现。 -
改进了实现质量(例如更精确地使用
noexcept)。 -
移除了已弃用的
verbose_diagnostic_info(被diagnostic_details取代)。
-
-
-
实现了 C++20 模块
boost.lexical_cast的初步版本。
-
-
Log:
-
默认开启在 Cygwin 上构建进程间通信支持。
-
-
数学:
-
为
non_central_f_distribution添加了find_non_centrality查找函数。 -
为
non_central_t_distribution添加了参数查找函数。 -
添加了不完全伽马函数的对数函数
lgamma_q。 -
添加了下不完全伽马函数的对数函数
lgamma_p。 -
为
pchip添加了domain()函数。 -
修复了逻辑分布中损坏的 CUDA 支持。
-
修复了 Windows ARM64 平台上不正确的浮点特性。
-
修复了大参数下
ibeta结果不正确的问题。 -
修复了 phi 参数为 N * PI / 2 时
ellint_2不正确的问题。 -
要求用户显式启用 CUDA,而不是根据 NVCC 的存在进行假设。
-
-
-
破坏性变更:库接受或提供的所有类型列表(
indexed_by、tag、嵌套 typedefindex_specifier_type_list、index_type_list、iterator_type_list和const_iterator_type_list)不再基于 Boost.MPL,而是改为 Boost.Mp11 列表。因此,Boost.MultiIndex 不再依赖 Boost.MPL。预计大多数用户代码不会受到此变更的影响,但可以通过全局定义宏BOOST_MULTI_INDEX_ENABLE_MPL_SUPPORT来恢复以前的行为。对 Boost.MPL 的遗留支持可能会在未来被弃用并移除。 -
破坏性变更:
composite_key及相关的类模板(composite_key_equal_to、composite_key_compare、composite_key_hash)已变为可变参数(之前模板参数的最大数量受BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE限制)。此变更对用户应该是透明的,唯一的区别是composite_key::key_extractors返回std::tuple而不是boost::tuple(其他受影响的类模板同理)。 -
移除了支持 C++11 以前编译器的内部变通方案和后备机制。
-
-
MSM:
-
新特性 (
backmp11) -
Bug 修复 (
backmp11) -
破坏性变更 (
backmp11):对事件池的直接访问权限从public更改为protected,因为在库代码之外对其进行操作可能导致未定义行为。
-
-
-
对于具有完整 C++11 支持(包括“不受限制的联合体”和引用限定符)的编译器,将实现从对齐存储改为联合体存储。这启用了渐进的
constexpr支持。-
在 C++11 中,一些构造函数和
const限定的访问器在编译时上下文(即核心常量表达式)中变得可用,只要类型满足特定约束。 -
在 C++14 中,即使是一些变异操作(那些不需要将
optional从无值状态更改为有值状态的操作)对于协作类型也成为核心常量表达式。 -
在 C++17 中,对于协作类型,所有构造函数(包括拷贝和移动)都成为核心常量表达式。
-
-
破坏性变更。 废弃了自定义
swap的机制。几乎没人了解这个机制,且它从未被记录过。 -
应用了一些细微更改,以更接近
std::optional的接口。-
启用语法
o = {}将 optional 对象置为无值状态。 -
启用语法
o.value_or({}),它使用默认构造的T。 -
构造
o = u(其中o是optional<T>类型,u是可转换为T的U类型)时,不再创建临时的T。
-
-
增加了从
optional<T>&到optional<T&>的转换。这解决了 #142。 -
none_t现在是std::equality_comparable,这意味着none_t和optional<T>建模了概念std::equality_comparable_with(对于std::equality_comparableT),这意味着您可以对一系列 optional 对象执行std::ranges::find(rng, boost::none)。 -
警告。 在未来版本中,我们打算在
optional中引入范围接口,使得std::ranges::range<optional<T>>为true。这将在某些程序中影响重载决议,这些程序根据谓词(如std::ranges::range)做出决策。例如,以下代码的行为将发生变化:template <typename T> void serialize(T const& v) { if constexpr (std::ranges::range<T>) serialize_as_range(v); else if constexpr (custom::is_optional_like<T>) serialize_as_optional(v); else serialize_as_value(v); }
-
-
PFR:
-
添加了基于 C++26 反射的实验性实现。定义
BOOST_PFR_USE_CPP26_REFLECTION宏为1以启用。 -
boost::pfr::for_each_field*()函数现在可以很好地与有状态的访问者配合使用。
-
-
-
修复了
binomial_distribution中无符号类型被无意中不支持的问题。
-
-
-
添加了对 Sentinel 部署的内置支持,可通过
config::sentinel配置。库自动处理主/从发现、错误检测和重连。(PR#345, PR#391, #237) -
添加了
generic_flat_response,这是flat_response的高性能替代品,使用连续内存,且在稳态下执行零内存分配。衷心感谢 Nikolai Vladimirov 的 PR。(PR#340, PR#356, PR#358, PR#378, PR#383, #263) -
对 服务器推送处理 进行了常规改进。
-
添加了对订阅跟踪的支持,每次重连后自动恢复活跃订阅。可通过
request::subscribe、request::psubscribe、request::unsubscribe和request::punsubscribe访问。(PR#375, #367) -
connection::async_receive和connection::receive现已 弃用。用户应优先使用async_receive2,它允许更快的批处理。(PR#381, PR#340, #331) -
consume_one现已 弃用。用户应优先使用generic_flat_response::clear。详情请见 PubSub 示例。 -
改进了文档和示例。
-
-
config::username、config::password、config::client_name和config::database_index现已 弃用。用户应优先使用config::setup。添加了request::hello和request::hello_setname以简化设置请求的构建。(PR#392) -
调整了日志消息级别以提高相关性:
level::error用于配置和网络错误,level::info用于成功的连接尝试,level::debug用于冗长输出。(PR#389, #395) -
修复了当传入包含
std::tuple元素的范围时,request::push_range生成无效命令的问题。(PR#363, #360)
-
-
-
移除了对可能不兼容运行时的编译时检查。因此不再产生误报,
from_exception功能可以直接开箱即用。极少数不兼容/泄露运行时的情况现在会在运行时报告。 -
在 cygwin 上禁用
from_exception。(PR#219)。衷心感谢 David McFarland 的 PR! -
移除了
has_addr2line与 C 标准库的链接,以简化使用非系统默认 `libstdc.so` 的构建。
-
-
系统:
-
operator|(result<T&>, U)的返回类型已更改为非引用。 -
支持
r & f中的成员指针(通过使用boost::compat::invoke)。 -
即使该库是仅头文件库,现在也会安装 CMake 配置文件。这避免了破坏包含
find_package(Boost COMPONENTS system …)的第三方CMakeLists.txt文件。 -
error_code在 C++20 及更高版本下现在更加constexpr。 -
向
result添加了unsafe_value。 -
将
result<>::operator*和result<>::operator->更改为在!has_value()时抛出异常,而不是作为前提条件。旧行为现在称为unsafe_value()。 -
添加了
boost/system/unwrap_and_invoke.hpp。
-
-
Test:
-
为 GCC < 10 下
std::optional的正确比较添加了友元运算符。
-
-
-
优化了 C++20 开始的 CTTI 类型比较。
-
ctti_type_index::name()现在在 C++14 及更新的标准中默认返回易读的值。减小了库二进制文件的大小。
-
-
-
修复了并发容器中范围插入的返回值。(PR#344)
-
-
UUID:
-
为
boost/uuid/uuid_io.hpp添加了from_chars。 -
为
string_generator添加了noexcept的operator()重载。 -
string_generator现在除了char和wchar_t外,还支持 Unicode 字符类型。 -
大多数
uuid访问器、操作和to_chars现在在可能的情况下都是constexpr(在 C++14 及更高版本以及较新的编译器上)。 -
添加了
to_chars的 SIMD 实现,在 UUID 格式化方面可提供高达 5.5 倍的性能提升。(Andrey Semashev) -
添加了
from_chars的 SIMD 实现,在 UUID 解析方面可提供高达 13 倍的性能提升。(Andrey Semashev) -
向
boost/uuid/uuid_io.hpp添加了uuid_from_string。 -
添加了一个专用的
invalid_uuid异常类,派生自std::runtime_error以保持向后兼容。
-
-
URL:
-
功能
-
所有解析函数在 C++20 下现在都是
constexpr,实现了编译时 URL 解析和验证。(PR#976) -
为查询容器添加了
get_or,在键不存在时返回默认值。(PR#953) -
添加了独立的
decode和decoded_size自由函数。(PR#952) -
添加了用户提供的
RangeRule对grammar::range的支持,允许自定义语法规则。(PR#950) -
为所有视图类型专门化了
std::ranges::enable_borrowed_range。(PR#966) -
为
token_rule_t添加了 EBO 和默认构造。(PR#964) -
添加了用于段(segments)的 natvis 可视化工具。(PR#962)
-
-
性能
-
将内部 URL 偏移量从
size_t更改为uint32_t,减少了 64 位平台上的对象大小。(PR#969)
-
-
修复
-
修复了因 dot-dot 取消引起的
normalize_path歧义。(PR#986) -
为
parse_query添加了针对空string_view输入的保护。(PR#949) -
修复了
params_iter_impl::decrement()中包含=的值的解码大小。(PR#978) -
修复了
decode_view::remove_prefix/remove_suffix断言。(PR#978) -
修复了
decode_view对pct_string_view::operator*()的完整性。(PR#963) -
示例路由器现在仅支持移动。(PR#959)
-
修复了 GCC 在
tuple_rule中的误报-Wmaybe-uninitialized。(PR#981) -
由 Laurel Lye Systems Engineering 进行了安全审查:进行了三轮评估,确认了 21 个修复,并添加了公共接口边界测试和模糊测试。(PR#982, PR#988)
-
-
文档
-
-
-
holds_alternative<T>和get<T>已放宽,不再要求T在可选方案列表中恰好出现一次。现在只需至少出现一次即可。
-
测试的编译器
Boost 的主要测试编译器为:
-
Linux
-
Clang, C++03: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0, 15.0.0
-
Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.0.0, 15.0.0
-
Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0, 13.0.0, 14.0.0, 15.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, 13.0.0, 14.0.0, 15.0.0
-
Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
-
GCC, C++03: 4.6.3, 11, 12
-
GCC, C++11: 4.7.3, 4.8.5, 11, 12
-
GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11, 12
-
GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11, 12
-
GCC, C++20: 8.0.1, 9.1.0, 10, 11, 12
-
-
OS X
-
Apple Clang, C++03: 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, 14.3
-
致谢
Marshall Clow, Glen Fernandes 和 Ion Gaztañaga 管理了本次发布。