版本 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<>
-based 协程、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
时的移动后使用问题,该问题导致超时时出现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_
应用于尾部标头 -
改进了
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
格式化指定精度的 fixed 问题
-
-
Cobalt:
-
删除了 get_executor 返回 const ref 的要求
-
添加了 experimental/composition。
-
-
Compat:
-
添加了
to_array.hpp
(由 Ruben Perez Hidalgo 贡献。)
-
-
Container:
-
向
static_vector
和small_vector
添加了stored_size
选项。
-
-
Flyweight:
-
添加了
concurrent_factory
,一个基于 Boost.Unordered 中并发容器的工厂,在多线程场景中提供出色的性能。
-
-
Geometry:
-
改进
-
在部分代码中使用 using 代替 typedef
-
在部分代码中使用别名现代化元函数
-
添加对模块化构建结构的支持
-
完整的 CMake 覆盖率(添加了 github actions cmake 测试)
-
改进文档工作流程
-
更新 Qt 和 WxWidgets 示例
-
添加枚举以准备 C++17 和 C++23
-
-
重大更改
-
移除已弃用的重新缩放代码
-
-
-
进程间通信:
-
Boost 依赖项数量从 11 个(总共)减少到 7 个。
-
已弃用
<boost/interprocess/containers/*.hpp>
头文件。它们是 2011 年 **Boost.Container** 的原始来源,但不再维护。作为长期过渡,Boost.Interprocess 保留了这些头文件以保持兼容性。它们将在未来的 Boost 版本中移除。 -
添加了一些针对 Cygwin 的解决方法。回归测试现在可以在 Cygwin64 上运行。
-
**ABI 破坏**:
segment_manager
现在使用新的实现,该实现支持过度对齐的类型并修复了一些现有错误。您可以通过在包含 Boost.Interprocess 头文件之前将BOOST_INTERPROCESS_SEGMENT_MANAGER_ABI
定义为1
来获取 Boost 1.87 之前的 ABI。 -
已修复的错误
-
-
JSON:
-
直接序列化。
-
为 Boost.JSON 类型添加 GDB pretty 打印机。
-
转换为结构体时忽略未知键。
-
简化了
value_to
的异常包装行为。 -
已弃用的初始化列表行为已被移除。
-
已弃用的类型别名已被移除。
-
在 ARM64 上的 MinGW 中使用正确的 64 位完整乘法。
-
修复 parse_into 处理错误大小元组的问题。
-
检查输入大小是否大于序列允许的大小。
-
修复
value_ref
在 GCC 14 上出现段错误的问题。
-
-
LexicalCast:
-
放弃了对 Boost.Integer 的依赖,从而缩短了编译时间。
-
-
日志:
-
使用 C++ 标准库中的等效项替换了 Boost.Thread 同步原语。这可能会提高多线程性能,但也会对用户产生影响
-
不再支持 Boost.Thread 线程中断。Boost.Log 不再对 Boost.Thread 用于实现线程中断的
thread_interrupted
异常进行特殊处理。此异常将像任何其他异常一样处理。特别是,现在可以使用挂起的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 贡献)
-
-
多精度:
-
使
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
中所有操作的默认 completion token。这使得诸如co_await conn.async_connect(params)
的表达式与conn.connect(params)
的行为相同。请注意,connection
及其类型别名尚未更新以匹配此行为。 -
connection_pool
中的异步函数现在支持按操作取消。 -
所有异步操作现在都支持
asio::cancel_after
、asio::cancel_at
以及类似的 completion token,这些 token 需要绑定 executor 到传递给asio::async_initiate
的发起操作。 -
connection
和any_connection
现在通过 token 的 immediate executor 分派立即完成的操作。 -
修复了尝试使用先前未连接的
any_connection
时导致崩溃的问题。 -
从
field
中可能抛出异常的构造函数中删除了不正确的noexcept
说明符。 -
修复了可能导致写入缓冲区大小超过配置的缓冲区大小限制的问题。
-
对文档和示例进行了大量更新,使其更具相关性并反映新的推荐最佳实践。
-
-
PFR:
-
**显著** 提高了具有大尺寸和小字段数的结构体的编译时间。非常感谢 Zachary Wassall 的 PR#120。
-
修复了
pragma
指令。 -
**初步支持 C++20 模块**。有关详细信息,请参阅文档。
-
C++17 中聚合字段数的默认限制从 100 提高到 200。
-
修复了关于 GCC 不识别 -Wundefined-var-template 的警告。
-
多项编译时间的小改进。
-
进程:
-
(v2)实现了在 Windows 上取消 async_wait。
-
(v2)添加了 FORCE_DISABLE_CLOSE_RANGE
-
(v2)ext:多个针对 BSD 和 Solaris 的 ext 修复。
-
(v2)不可用的
ext
函数现在可以编译并给出operation_not_supported
错误(包括 IOS)。 -
(v2)多个链接修复。
-
(v2)从链接库中删除了 filesystem - 使用哪个 filsystem 库现在仅影响头文件。
-
(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 操作系统下使用 clang 时与
ole32.lib
和Dbgeng.lib
自动链接的问题。 -
修复了文档中缺少命名空间的问题。感谢 Mats Taraldsvik 的 PR#181。
-
无序:
-
重大更新。
-
添加了基于节点的并发容器
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 pretty-printers。对于使用花哨指针的分配器的容器,只有在为花哨指针类型本身编写了正确的 pretty-printer 时,这些才起作用。
-
修复了开放寻址容器的
std::initializer_list
赋值问题(PR#277)。 -
允许将不可复制的可调用对象传递给
std::initializer_list
重载的并发容器的insert_{and|or}_[c]visit
,方法是将可调用对象的std::reference_wrapper
内部传递给迭代器对重载。
-
-
UUID:
-
恢复了在 1.86 中无意丢失的构造
constexpr uuid
的能力。
-
-
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 管理了此版本。