版本 1.53.0
2013 年 2 月 4 日 18:29 GMT
文档
新库
- Atomic:
- C++11 风格的 atomic<>,由 Helge Bahmann 提供,Tim Blechmann 维护。
- Coroutine:
- Lockfree:
- Multiprecision:
- 浮点数、整数和有理数运算的扩展精度算术类型,来自 John Maddock 和 Christopher Kormanyos。
- Odeint:
- 求解常微分方程,来自 Karsten Ahnert 和 Mario Mulansky。
新闻
此版本包含对 Boost.Locale 的 ticket #7743 的修复。更多详情,请参阅 安全公告。
更新的库
-
算法:
- 修复了评论中的非 ASCII 字符(#7781)。
- 更新了 Knuth-Morris-Pratt 文档(#7656)。
-
Array:
- 增加了对 boost::get 和 std::get 的支持(#7652)
-
Asio:
- 修复了一些 64 位到 32 位转换警告(#7459)。
- 修复了文档和注释中的一些小错误(#7761)。
- 修复了
basic_socket::get_option 文档中嵌入的示例错误(#7562)。
- 将 SSL_CTX 选项从
int 改为 long,以匹配 OpenSSL(#7209)。
- 更改为使用
_snwprintf 以解决由于 MinGW 近期版本中 swprintf 签名更改而导致的编译错误(#7373)。
- 修复了在 Windows 上关闭
io_service 线程池时,由于工作负载耗尽可能发生的死锁(#7552)。
- 为错误类别启用了
noexcept 限定符(#7797)。
- 将 UNIX 域套接字示例更改为将
accept 的错误视为非致命错误(#7488)。
- 添加了一个小的块回收优化,以改善默认内存分配行为。
-
Bimap:
- 重构了 map_view_iterator 以改善错误消息。
- 修复了在使用带有 info 的关系时 replace_(left/right/key/data) 的错误。
- 修复了 vector_of 和 list_of 视图的
assign(size_type,value_type) 错误。
- 修复了 vector_of 视图的
operator[](size_type) 和 at(size_type) 函数的返回值。
-
Chrono:
-
已弃用
- Boost.Chrono 1.2.x 中包含的 chrono i/o 版本已在 2.0.0 版本中完全重构。
- chrono I/O:__duration_short、__duration_long 操作符已弃用。您应该使用参数化的 __duration_fmt 或重命名的 __duration_symbol 和 __duration_prefix 操作符。
- chrono I/O:__duration_punct<> facet 已弃用。您应该使用 __get_duration_style 自由函数来获取信息,并使用 __duration_units facet 进行本地化。
- 当 BOOST_CHRONO_VERSION==2 时,上述已弃用的函数将不可用。
-
修复
-
#7546 time_point<system_clock> 输出版本 2 编译失败
-
#7547 time_point<system_clock> 输入版本 2 编译失败
-
#7868 chrono_io 解析时间不正确(1.53 和 1.52)
-
Container:
- 修复了错误 #7650。
- 提高了
vector 的插入性能。
- 再次更改了实验性的多重分配接口以提高性能(仍处于实验阶段)。
- 添加了无异常支持,以便愿意在编译器中禁用异常的用户使用。
- 修复了 GCC -Wshadow 警告。
- 将已弃用的 BOOST_NO_XXXX 替换为较新的 BOOST_NO_CXX11_XXX 宏。
-
Context:
- 添加了对 iOS (ARM) 和 MacOS X (x86, 32位) 的支持。
- 支持 Win32 上的 SEH 覆盖保护。
-
几何:
-
错误修复
- 避免生成具有内部环且小于最小尺寸(例如一个或两个点)的输出多边形。
-
geometry::disjoint 用于退化线段(由 Karsten Ahnert 补丁)。
geometry::difference 中由于未处理切线问题而导致的错误,由 H2 报告。
- 修复了
geometry::for_each 与 Lambda 表达式一起使用时的错误。
- 修复了
geometry::comparable_distance 点-线串(以及-范围,-多边形)的错误。
-
附加功能
geometry::disjoint 的组合:点/环,点/多边形,点/多重多边形。
geometry::intersects 的组合:点/环,点/多边形,点/多重多边形。
-
内部更改
- 特殊化/未实现更新,适用于各种算法(与早期版本一样,这些更改仍在继续;它们负责简化结构、改进错误报告和自动化文档)。
- 单元测试中的修复。
-
GIL:
-
图:
- 修复了 Trac 中的以下错误:#3468, #4386, #5269, #7428, #7457, #7467, #7600, #7648, #7684, #7728, #7741, #7766, #7771, #7773, #7780, #7787, #7801 以及其他不在 Trac 上的错误。
- 增加了对读取包含多个图的 GraphML 文件的支持。
- 为树增加了 A* 搜索版本,当可以接受重复访问同一个顶点时,无需颜色图。
- 添加了 VF2 子图同构算法(由 Flavio De Lorenzi 贡献)。
-
哈希:
- 添加了对
boost::int128_type 和 boost::uint128_type 的支持(可用时)。
- 在已知具有标准浮点函数的平台上,不使用自动检测(#7221,#7470)。
-
Interprocess:
- 修复了 GCC -Wshadow 警告。
- 实验性多重分配接口已再次改进和更改。仍然不稳定。
- 将已弃用的 BOOST_NO_XXXX 替换为较新的 BOOST_NO_CXX11_XXX 宏。
-
ABI 破坏性更改:更改了节点池分配器的内部结构以提高效率。
- 修复了错误 #7795。
-
Intrusive:
- 修复了错误 #7174, #7529, #7815。
- 修复了 GCC -Wshadow 警告。
- 在多个侵入式容器构造函数中添加了缺失的
explicit 关键字。
- 将已弃用的 BOOST_NO_XXXX 替换为较新的 BOOST_NO_CXX11_XXX 宏。
- 小幅文档修复。
-
Lexical cast:
-
Locale:
-
数学:
-
MinMax:
-
Move:
- 更好的头文件隔离(错误 #6524)。
- 小幅文档修复
- 将已弃用的 BOOST_NO_XXXX 替换为较新的 BOOST_NO_CXX11_XXX 宏。
- 修复了 #7830, #7832。
-
多边形:
-
修复
-
#6366 polygon_90 类型
boost::polygon::contains 中的错误。
-
#7678 多个
#include 导致 bool boost::polygon::belongs(...) 的多重定义。
-
内部更改
- 重构了点/线段/区间数据/概念/特征。
- 添加了点和区间数据/概念/特征的单元测试。
- 简化了
transform.hpp 以仅在 2D 中操作。
- 移除了 point_3d 数据/概念/特征。
-
Random:
-
范围:
-
错误修复
-
#5603 "range/any_range.hpp" 头文件不自给自足。
-
#6103 boost::range_detail vs. boost::range::range_detail 编译错误。
-
文档修复
-
Ratio:
-
修复
-
#7616 br_mul::nan - 警告 C4293: '<<':移位计数为负或太大,未定义行为。
-
#7744, #7644。Regex: 修复了问题。
-
智能指针:
-
新功能
- Glen Fernandes 提供了数组的 make_shared 和 allocate_shared 实现。它们实现了对数组的单次分配,该数组可以使用构造函数参数或初始化列表进行初始化,并提供了用于默认初始化和无值初始化的重载。有关更多信息,请参阅 '数组的 make_shared 和 allocate_shared' 页面。
-
现在可以使用
shared_ptr 来保存指向动态分配数组的指针。这是通过使用数组类型(T[] 或 T[N])作为模板参数来实现的。
- 在 C++11 编译器上,智能指针现在使用
explicit operator bool。这可能会破坏将智能指针传递给接受 bool 的函数,或者从具有 bool 返回类型的函数返回智能指针的代码。在这种情况下,请使用 p != 0 或 !!p。
-
StringAlgo:
- 修复了无法找到重叠模式的错误(#7784)。
- 消除了对 insert 的一些调用歧义(#7346)。
-
Thread:
-
已弃用功能
- 自 Boost 1.53 起已弃用的功能将在 Boost 1.58 之前可用。
- C++11 合规性:packaged_task<R> 已弃用,请改用 packaged_task<R()>。
-
#7537 弃用 Mutex::scoped_lock 和 scoped_try_lock 以及 boost::condition。
-
新功能
-
#6270 C++11 合规性:添加可移动调用和可移动参数的线程构造函数。
-
#7279 C++11 合规性:在系统相关函数中添加 noexcept。
-
#7280 C++11 合规性:添加 promise::...at_thread_exit 函数。
-
#7281 C++11 合规性:将 ArgTypes 添加到 packaged_task 模板。
-
#7282 C++11 合规性:添加 packaged_task::make_ready_at_thread_exit 函数。
-
#7412 C++11 合规性:添加可移动调用和可移动参数的 async。
-
#7413 C++11 合规性:当启动策略为 deferred 时添加 async。
-
#7414 C++11 合规性:future::get 后置条件应为 valid()==false。
-
#7422 提供一个零开销性能损失的条件变量。
-
#7444 Async:添加 make_future/make_shared_future。
-
#7540 Threads:添加一个在销毁时 join 线程的辅助类。
-
#7541 Threads:添加一个在销毁时 join 的线程包装类。
-
#7575 C++11 合规性:由 async 创建的 future 应在析构函数中 "join"。
-
#7587 Synchro:添加 strict_lock 和 nested_strict_lock。
-
#7588 Synchro:将 locks.hpp 分拆到多个文件中以减少依赖。
-
#7590 Synchro:添加基于 Boost.ConceptCheck 的 lockable 概念检查器。
-
#7591 添加可与 enable_if 一起使用的 lockable 特征。
-
#7592 Synchro:添加一个 null_mutex,它是一个无操作且符合 UpgardeLockable 模型。
-
#7593 Synchro:添加一个 externally_locked 类。
-
#7594 Threads:允许禁用线程中断。
-
修复的 Bug
-
#7464 BOOST_TEST(n_alive == 1); 由于回归测试工具中的竞态条件而失败。
-
#7657 如果反复使用 condition_variable 的 notify_one 或 notify_all 方法,则会导致严重的性能和内存消耗下降。
-
#7665 this_thread::sleep_for 在线程中不再使用 steady_clock。
-
#7668 thread_group::join_all() 应检查其线程是否可 join。
-
#7669 thread_group::join_all() 应捕获 resource_deadlock_would_occur。
-
#7671 在 iOS 上包含 boost/thread.hpp 头文件时出错。
-
#7672 lockable_traits.hpp 语法错误:“defined” 令牌拼写错误。
-
#7798 boost::future set_wait_callback 线程安全问题。
-
#7808 this_thread::sleep_for 和 this_thread::sleep_until 的效果描述不正确。
-
#7812 返回:如果调用因指定的 rel_time 时间段已过而返回,则为 cv_status::no_timeout,否则为 cv_status::timeout。
-
#7874 编译警告:thread.hpp:342: 警告:类型属性仅在类型定义时生效。
-
#7875 BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED 不应默认启用。
-
#7882 condition_variable::wait(unique_lock<mutex>&) 的异常文本错误。
-
#7890 thread::do_try_join_until() 缺少返回类型。
-
Unordered:
- 移除对旧的预标准可变参数对构造函数和相等实现的 C++ 支持。两者自 Boost 1.48 起已弃用。
- 更多的内部实现更改,包括更简单的
erase 实现,并移除了更多已弃用的配置宏。
-
Utility:
-
Variant:
- 添加了右值构造函数和右值赋值运算符(仅适用于 C++11 兼容编译器)。现在可以使用仅移动类型(#7620, #7718)来使用库。
-
Wave:
-
xpressive:
更新了工具
测试的编译器
Boost 的主要测试编译器是:
- Linux
- GCC: 4.1.2, 4.2.4, 4.4.4, 4.5.3, 4.6.3, 4.7.2
- GCC, C++11 模式: 4.4.4, 4.5.3, 4.6.3, 4.7.2
- Intel: 11.1, 12.1
- LLVM Clang: 2.8
- LLVM Clang, with libc++: 3.2
- OS X
- GCC: 4.4.7
- GCC, C++11 模式: 4.4.4
- Intel: 11.1, 12.0
- Windows
- FreeBSD
Boost 的其他测试编译器包括:
- Linux
- Cray: 4.6.1
- Clang: 从 subversion
- LLVM Clang, with libc++: 3.2
- GCC: 4.2.4, 4.4.4, 4.5.3, 4.6.3, 4.7.1
- GCC, C++11 模式: 4.4.4, 4.5.3, 4.6.3, 4.7.1, 4.7.2
- pgCC: 11.9
- Intel: 10.1, 11.1, 12.1
- Intel, C++11 模式: 13.0.1
- Visual Age
- OS X
- Clang: 从 subversion
- Clang, C++11 模式: 从 subversion
- Intel: 11.1, 12.0
- GCC: 4.4.7
- GCC, C++11 模式: 4.4.4
- Windows
- Visual C++: 10.0, 11.0
- Visual C++ with STLport: 9.0
- Visual C++, Windows Mobile 5, with STLport: 9.0
- AIX
- IBM XL C/C++ Enterprise Edition: V12.1.0.1
致谢
Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此次发布。