版本 1.87.0
版本 1.87.0
2024 年 12 月 12 日 00:52 GMT
平台 | 文件 | SHA256 哈希值 |
---|---|---|
unix | boost_1_87_0.tar.bz2 | af57be25cb4c4f4b413ed692fe378affb4352ea50fbe294a11ef548f4d527d89 |
boost_1_87_0.tar.gz | f55c340aa49763b1925ccf02b2e83f35fdcf634c9d5164a2acb87540173c741d | |
windows | boost_1_87_0.7z | db6b7d77a2286ebe79d4aa7252c08b051d271fd8b013b6b18bc7a966552c1139 |
boost_1_87_0.zip | f367a218d27b23b568956bacf56d08d2c1d9647211337136be8cac5cb2ff0828 |
新库
-
Parser: 用于构建解析器的框架,来自 Zach Laine。
更新的库
-
Asio:
-
增加了对使用字节跨度和字节跨度序列作为缓冲区序列的支持。这意味着它们可以直接传递给 I/O 操作,例如
async_read
。 -
增加了对通用处置的支持,通用处置是一种可用于测试异步操作是否完成且没有错误的类型。这包括
error_code
和exception_ptr
,但可以通过专门化disposition_traits
类模板来扩展到用户类型。标准类型std::error_code
和std::exception_ptr
被识别为处置。 -
为
boost::asio::use_future
完成令牌、基于boost::asio::awaitable<>
的协程、boost::asio::spawn()
和boost::asio::experimental::cancellation_condition
增加了处置支持。 -
增加了
execution_context::service_maker
抽象基类。service_maker
是传递给执行上下文构造函数的对象,允许在上下文构建时添加服务。 -
增加了
boost::asio::config
,它提供对与执行上下文关联的配置参数的访问。该类旨在供 asio 内部使用,或者由构建在 asio 之上的库或用户提供的抽象使用,并且通常用于微调行为,例如启用或禁用某些优化。具体的配置源,例如boost::asio::config_from_env
、boost::asio::config_from_concurrency_hint
和boost::asio::config_from_string
,可以传递给io_context
或thread_pool
构造函数。 -
添加了 Asio 的
io_context
和thread_pool
实现识别的初始配置参数集。 -
移除了一些先前已弃用的工具。
-
弃用了
basic_io_object
和deadline_timer
。 -
为关联的绑定器添加了右值限定的
operator()
重载。 -
增加了对模块化构建结构的支持。
-
修复了返回仅移动类型的功能的
spawn()
。 -
修复了
co_composed
以使其不需要概念支持。 -
修复了 epoll 反应器,使其在 fork 后不会尝试重新注册常规文件描述符。
-
修复了
ssl::detail::engine
移动赋值中的内存泄漏。 -
修复了定义了
BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING
时的编译错误。 -
修复了使用 Clang 19 时的编译错误。
-
更改了
thread_pool::join()
以确保它停止随后使用thread_pool::attach()
添加到线程池的线程。 -
修复了传递给
io_uring_prep_write_fixed
和io_uring_prep_read_fixed
的偏移量,当它们用于面向流的操作时。 -
有关更多详细信息,请参阅 修订历史。
-
-
Beast:
-
API 更改
-
为
basic_fields::insert()
添加了error_code
重载。 -
为
websocket::stream::get_status
添加了重载,以查询 permessage-deflate 状态。
-
-
修复
-
修复了在
http::basic_stream
中调用net::dispatch
时发生的 move 后使用错误,这会导致超时时出现bad_executor
异常。 -
删除了启动函数中的修改操作。
-
修复了
teardown_tcp_op
中的取消处理。 -
在调用
on_finish_impl
之前,在basic_parser
中设置state_
。 -
从
clamp
函数中删除了 static 说明符。 -
解决了测试中的
-Wattributes
警告。 -
解决了测试中无法访问的代码警告。
-
-
改进
-
为
beast::http
命名空间中的类型添加了前向声明头文件 -
使
http::parser
能够使用带有error_code
重载的basic_fields::insert()
-
在
http::basic_parser
中将header_limit_
应用于 trailer 标头 -
改进了
http::basic_parser
以更早地返回http::error::header_limit
-
增加了对模块化 boost 构建结构的支持
-
-
致谢
-
Jackarain, Saleh Hatefinya, René Ferdinand Rivera Morell
-
-
-
Charconv:
-
修复了使用
__ibm128
作为 long double 格式对 PPC64LE 架构的支持 -
修复了 Windows ARM64 平台上的内在函数用法
-
修复了使用
std::float128_t
或__float128
格式化具有指定精度的定点数
-
-
Cobalt:
-
移除了 get_executor 返回常量引用的要求
-
添加了 experimental/composition。
-
-
Compat:
-
添加了
to_array.hpp
(由 Ruben Perez Hidalgo 贡献.)
-
-
Container:
-
为
static_vector
和small_vector
添加了stored_size
选项。
-
-
Filesystem:
-
正如在 1.84.0 中宣布的那样,不再支持 Windows 10 之前的版本。
-
在 Windows 上,
canonical
现在基于GetFinalPathNameByHandleW
WinAPI 函数。 这样做的一个副作用是驱动器盘符被转换为大写,这使得生成的路径更具互操作性。 (#325) -
v4: 如果输入路径具有尾部目录分隔符,则
canonical
不再在结果路径中生成尾部目录分隔符。 -
如果使用可转换为
path
的用户定义类型和一个或多个Source
类型的参数调用path
构造函数或成员函数,则默认选择转换为path
。 这可以在某些情况下解决参数转换歧义,但也可能导致不太理想的转换路径。 如果需要不同的转换路径,建议用户使用显式类型转换。 (#326) -
添加了对 FreeBSD 9 及更早版本上
dirfd
作为宏的情况的解决方法。 (#328)
-
-
Flyweight:
-
添加了
concurrent_factory
,这是一个基于来自 Boost.Unordered 的并发容器的工厂,可在多线程场景中提供出色的性能。
-
-
Geometry:
-
改进
-
在部分代码中使用 using 代替 typedef
-
在部分代码中使用别名现代化元函数
-
增加对模块化构建结构的支持
-
完整的 CMake 覆盖 (添加了 github actions cmake 测试)
-
改进文档工作流程
-
更新 Qt 和 WxWidgets 示例
-
添加 enumerate 以准备 17 和 23
-
-
重大更改
-
移除已弃用的重缩放代码
-
-
-
Interprocess(进程间通信):
-
减少了 Boost 依赖的数量,从 11 个(总共)减少到 7 个。
-
已弃用
<boost/interprocess/containers/*.hpp>
头文件。它们是 2011 年 **Boost.Container** 的原始来源,但不再维护。作为一个漫长的过渡,Boost.Interprocess 一直维护这些头文件以保持兼容性。它们将在未来的 Boost 版本中移除。 -
添加了一些针对 Cygwin 的解决方法。回归测试现在可以在 Cygwin64 上运行。
-
**ABI 破坏性更改**:
segment_manager
现在使用新的实现,支持对齐类型并修复了一些现有错误。您可以通过在包含 Boost.Interprocess 头文件之前 #definingBOOST_INTERPROCESS_SEGMENT_MANAGER_ABI
为1
来获取 Boost 1.87 之前的 ABI。 -
修复的错误
-
-
JSON:
-
直接序列化。
-
为 Boost.JSON 类型添加 GDB pretty printer。
-
转换为结构体时忽略未知键。
-
简化了
value_to
的异常包装行为。 -
移除了已弃用的 initializer list 行为。
-
移除了已弃用的类型别名。
-
在 ARM64 上的 MinGW 上使用正确的 64 位全乘法。
-
修复了 parse_into 处理错误大小的元组的问题。
-
检查输入大小是否大于序列允许的大小。
-
修复了
value_ref
在 GCC 14 上发生段错误的问题。
-
-
LexicalCast:
-
删除对 Boost.Integer 的依赖,从而缩短编译时间。
-
-
Log(日志):
-
使用 C++ 标准库中的等效项替换了 Boost.Thread 同步原语。这可能会提高多线程性能,但也具有面向用户的后果
-
不再支持 Boost.Thread 线程中断。Boost.Log 不再特殊处理
thread_interrupted
异常,Boost.Thread 使用该异常来实现线程中断。此异常将像任何其他异常一样处理。特别是,用户指定的异常处理程序现在可能会使用挂起的thread_interrupted
异常来调用。 -
对于定时等待操作,超时现在使用 std::chrono 时间单位。这意味着
bounded_ordering_queue
和unbounded_ordering_queue
类支持的命名参数ordering_window
现在需要一个std::chrono::duration
值,而不是来自 Boost.DateTime 的boost::posix_time::time_duration
。 -
如果线程同步原语指示错误,则会抛出
std::system_error
异常,而不是 Boost.Thread 异常类型。
-
-
为
strictest_lock
添加了对 C++ 标准库锁类型的支持。
-
-
Mp11:
-
添加了
mp_lambda
(由 Joaquin M Lopez Munoz 贡献)
-
-
Multiprecision(多精度):
-
使
float128
成为可平凡复制的 -
即使在非 GNU 模式下,也使
__float128
成为浮点类型
-
-
MySQL:
-
实验性 API 的重大更改:
-
重新设计了
connection_pool
中的线程安全功能,以克服用户体验发现的一些设计缺陷。已将布尔选项thread_safe
添加到pool_params
(默认为false
)。设置后,某些池函数会更改行为,以便可以安全地并发使用它们。这通过内部创建一个 strand,在需要时分派到它,并重新连接取消信号来实现。当pool_params::thread_safe
为false
时,通常的 Asio 执行器语义适用,没有开销。 -
已删除
pool_executor_params
,替换为pool_params::connection_executor
和pool_params::thread_safe
。 -
已完全删除
connection_pool::async_get_connection
中的内置超时功能。此函数现在支持每个操作的取消,因此可以使用asio::cancel_after
实现相同的功能。 -
销毁
connection_pool
现在会取消未完成的异步操作,就像其他 Asio I/O 对象一样。这可以防止资源泄漏:未完成的async_run
操作会延长池的生命周期,直到操作完成,这可能导致池对象永远不会被销毁。 -
如果在连接可用之前取消了
async_get_connection
操作,则该操作现在始终会失败,并显示client_errc::pool_not_running
、client_errc::no_connection_available
或client_errc::pool_cancelled
,具体取决于池的状态(以前,它会失败,并显示client_errc::timeout
或内部async_connect
操作遇到的最后一个错误代码)。此信息现在包含在输出诊断对象中。 -
已删除
client_errc::timeout
和client_errc::cancelled
。 -
在未运行的池上调用
async_get_connection
不再立即失败,而是等待调用async_run
。 -
sequence
现在返回一个拥有的类型。这使得它可以安全地与延迟异步操作中的with_params
一起使用。format_sequence_view
已重命名为format_sequence
。 -
sequence
已移动到单独的头文件boost/mysql/sequence.hpp
。
-
-
any_connection
、客户端 SQL 格式化(包括format_sql
和with_params
)和connection_pool
已升级到稳定的 API。 -
现在建议新代码使用
any_connection
,而不是connection
及其别名tcp_connection
、tcp_ssl_connection
和unix_connection
。 -
添加了
with_params
,一个新的ExecutionRequest
,它封装了一个查询模板字符串和参数以扩展查询。执行时,它使用客户端 SQL 格式化来扩展查询,并将其发送到服务器进行执行。这是运行带有参数的简单查询的新推荐方法。 -
添加了
with_diagnostics
,一个适配器完成令牌,它转换异步函数抛出的异常以包含diagnostics
对象,以匹配同步抛出函数的工作方式。 -
with_diagnostics(asio::deferred)
现在是any_connection
和connection_pool
中所有操作的默认完成令牌。这使得诸如co_await conn.async_connect(params)
之类的表达式的行为与conn.connect(params)
完全相同。请注意,尚未更新connection
及其类型别名以匹配此行为。 -
connection_pool
中的异步函数现在支持每个操作的取消。 -
所有异步操作现在都支持
asio::cancel_after
、asio::cancel_at
和类似的完成令牌,这些令牌需要一个绑定的执行器传递给asio::async_initiate
的初始化。 -
connection
和any_connection
现在通过令牌的立即执行器分派立即完成。 -
修复了一个问题,该问题导致尝试使用以前未连接的
any_connection
时发生崩溃。 -
从
field
中潜在抛出构造函数中删除了不正确的noexcept
说明符。 -
修复了一个可能导致写入缓冲区大小超过配置的缓冲区大小限制的问题。
-
大幅更新了文档和示例,使其更相关并反映新的推荐最佳实践。
-
-
Optional(可选):
-
**破坏性更改。** 放弃了对 C++03 的支持。现在需要的最低版本是 C++11;至少需要一些 C++11 功能。
-
删除对 Boost.Utility 的依赖。
-
删除对 Boost.Predef 的依赖。
-
删除对 Boost.StaticAssert 的依赖。
-
删除对 Boost.Move 的依赖。
-
更快地实现了一些关系运算。
-
**警告。** 在未来的版本中,我们计划将范围接口引入
optional
中,以便std::ranges::range<optional<T>>
将为true
。这可能会影响基于诸如std::ranges::range
之类的谓词做出决策的程序中的重载解析。
-
-
PFR:
-
对于具有较大尺寸和较少字段数的结构,编译时间得到了显著改进。非常感谢 Zachary Wassall 的 PR#120。
-
修复了
pragma
指令。 -
初步支持 C++20 模块。 更多信息请参见文档。
-
C++17 中聚合的字段计数默认限制从 100 增加到 200。
-
修复了关于 GCC 不知道 -Wundefined-var-template 的警告。
-
多个编译时间方面的细微改进。
-
Process:
-
(v2) 实现了在 Windows 上取消 async_wait。
-
(v2) 添加了 FORCE_DISABLE_CLOSE_RANGE
-
(v2) ext:多个针对 BSD 和 Solaris 的 ext 修复。
-
(v2) 现在不可用的
ext
函数可以编译并给出operation_not_supported
错误(包括 IOS) -
(v2) 多个链接修复
-
(v2) 从链接库中移除了 filesystem - 现在使用的 filesystem 库只会影响头文件
-
(v1) 为 1.88 添加了弃用通知。
-
-
SmartPtr:
-
不再支持 C++03,需要 C++11 编译器。 这包括 GCC 4.8 或更高版本,以及 MSVC 14.0 或更高版本。
-
由宏
BOOST_SP_ENABLE_DEBUG_HOOKS
,BOOST_SP_USE_STD_ALLOCATOR
,BOOST_SP_USE_QUICK_ALLOCATOR
,BOOST_AC_USE_SPINLOCK
,BOOST_AC_USE_PTHREADS
,BOOST_SP_USE_SPINLOCK
, 和BOOST_SP_USE_PTHREADS
启用的功能已被弃用,并且将在未来的版本中删除对其的支持。
-
-
Stacktrace:
-
修复了在使用 Windows OS 下的 clang 时与
ole32.lib
和Dbgeng.lib
的自动链接。 -
修复了文档中缺少的命名空间。感谢 Mats Taraldsvik 的 PR#181。
-
Unordered:
-
重大更新。
-
添加了并发的、基于节点的容器
boost::concurrent_node_map
和boost::concurrent_node_set
。 -
向并发容器添加了
insert_and_visit(x, f1, f2)
和类似操作,这些操作允许在插入后立即访问元素(相比之下,insert_or_visit(x, f)
仅在插入未发生时访问元素)。 -
使访问在某些
boost::concurrent_flat_set
操作中被独占锁定,以允许安全地修改元素 (PR#265)。 -
在 Visual Studio Natvis 中,支持使用花哨指针的分配器的任何容器。这适用于任何花哨指针类型,只要为花哨指针类型编写了适当的 Natvis 自定义点“Intrinsic”函数。
-
为所有容器和迭代器添加了 GDB 美化打印机。对于具有使用花哨指针的分配器的容器,只有在为花哨指针类型本身编写了适当的美化打印机时,这些才能工作。
-
修复了开放寻址容器的
std::initializer_list
赋值问题 (PR#277)。 -
允许将不可复制的 callable 传递给并发容器的
insert_{and|or}_[c]visit
的std::initializer_list
重载,方法是在内部将 callable 的std::reference_wrapper
传递给迭代器对重载。
-
-
UUID:
-
恢复了构造
constexpr uuid
的能力,该能力在 1.86 中不小心丢失了。
-
-
Wave:
-
构建改进,包括模块化构建支持,感谢 René Rivera
测试的编译器
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 管理了此版本。