版本 1.56.0
版本 1.56.0
2014 年 8 月 7 日 16:08 GMT
平台 | 文件 |
---|---|
unix | boost_1_56_0.tar.bz2 |
boost_1_56_0.tar.gz | |
windows | boost_1_56_0.7z |
boost_1_56_0.zip |
其他下载
模块化
Boost 版本控制已迁移到使用 git 子模块的系统。这对用户来说不应该有太大的影响,尽管目录结构现在有点不同。
一些库的部分已移至不同的模块中,并且从现有代码中提取了几个新模块。所有头文件路径应保持不变。新模块包括
-
Assert: 可自定义的断言宏。由 Peter Dimov 维护。
-
Core: 其他库使用的核心实用程序,依赖性最小。由 Peter Dimov、Glen Fernandes 和 Andrey Semashev 维护。
-
Lexical_Cast: 一般字面文本转换,例如表示字符串的整数,或反之亦然,来自 Kevlin Henney。
-
Throw_Exception: 用于从 Boost 库抛出异常的通用基础结构,来自 Emil Dotchevski。
-
Winapi: 没有 <windows.h> 的 Windows API 声明,供 Boost 内部使用。
新库
-
Align: 内存对齐函数、分配器和适配器,来自 Glen Fernandes。
-
Type_Index: 运行时/编译时可复制的类型信息,来自 Antony Polukhin。
更新的库
-
Acumulators:
-
新的累加器
rolling_variance
和rolling_moment
-
-
Asio:
-
更改了 Windows I/O 完成端口后端以对面向连接的 IP 套接字使用
ConnectEx
(如果可用)。 -
更改了非 Windows(和非 IOCP Windows)平台的
io_service
后端,以便每个io_service
实例使用单个条件变量。这解决了从多个线程使用run_one()
时可能出现的竞争条件。 -
对 kqueue 后端中的
EV_CLEAR
处理进行了进一步更改,以解决在 Mac OS X 上close()
系统调用可能会挂起的其他情况。 -
修复了
resolver_query_base::flags::operator~
实现中的无限递归 (#9548)。 -
在 Windows 上,使
select
反应器对于大量套接字更有效 (#9528)。 -
修复了由以下人员报告的特定于 Windows 的类型别名问题gcc (#9550).
-
阻止执行仅编译时缓冲区测试,以避免触发地址清理器警告 (#8295)。
-
在最新版本的 Windows 上禁用了
GetQueuedCompletionStatus
超时解决方法。 -
在使用链接本地多播地址时添加了对基于字符串的作用域 ID 的支持。
-
更改了 IPv6 多播组加入,以便在未显式指定接口的情况下,将地址的作用域 ID 用作接口。
-
通过使用链接本地多播地址,修复了 Mac OS X 和 BSD 上的多播测试失败。
-
解决了一个与匿名枚举有关的gcc问题 (#10042)。
-
将 Windows
HANDLE
后端更改为忽略ERROR_MORE_DATA
。相反,该错误将像其他错误一样传播(即在error_code
中或作为system_error
抛出),并将返回传输的字节数。对于需要处理部分消息的代码,应使用error_code
重载 (#10034)。 -
修复了
signal_set
实现的信号编号检查中的一个偏差 1 的错误 (#9324)。 -
更改为使用 SSE2 内在函数而不是内联汇编,以允许 Cray 编译器工作。
-
停止使用在最新 Visual C++ 和 Windows SDK 中标记为已弃用的某些 Winsock 函数。
-
添加了在使用以下内容构建单元测试时的解决方法gcc在 AIX 上。
-
Atomic:
-
该库已重新设计。除了内部重构外,还修复了各种错误,包括功能测试宏和整数溢出处理的不正确值。
-
更改了
memory_order
枚举的值。具体值不是接口的一部分,但如果该枚举在用户的接口中使用,则此更改可能会潜在地破坏 ABI。 -
使用 MSVC 在 Windows x64 上实现了对 128 位原子操作的支持。该库假设目标 CPU 中存在
cmpxchg16b
指令。一些早期的 AMD CPU 不支持此指令。要定位这些 CPU,请定义BOOST_ATOMIC_NO_CMPXCHG16B
宏。 -
使用 MSVC 实现了对 Windows ARM 目标的实验性支持。
-
使用 GCC 实现了对 DEC Alpha 目标的实验性支持。
-
改进了使用 GCC 对 ARMv6 及更高版本的支持。将所有原子操作实现为汇编器块,而不是基于 CAS 的循环。ARMv7 支持 64 位操作。
-
实现了对
BOOST_ATOMIC_FLAG_INIT
宏和atomic_flag
的静态初始化的可选支持。(https://svn.boost.org/trac/boost/ticket/8158">#8158) -
修复了 SPARCv9 目标的编译。(https://svn.boost.org/trac/boost/ticket/9446">#9446)
-
修复了 PowerPC 目标的编译。(https://svn.boost.org/trac/boost/ticket/9447">#9447)
-
修复了 Clang 在 x86 和 x86-64 上的几个兼容性问题。(https://svn.boost.org/trac/boost/ticket/9610">#9610, https://svn.boost.org/trac/boost/ticket/9842">#9842)
-
删除了 IA64 平台上 Windows 的专用代码。
-
-
容器:
-
添加了基于 DlMalloc 的扩展分配器。
-
改进了基于树的有序关联容器的可配置性。现在可以使用 AVL、Scapegoat 和 Splay 树来实现
set
、multiset
、map
和multimap
。 -
修复的错误
-
-
动态位集:
-
支持 C++11 移动构造函数
-
修复 MSVC 2013 上的警告
-
支持 C++11 最小分配器
-
添加 noexcept 规范
-
-
Chrono:
-
#6918 由于未定义的 pthread_getcpuclockid,HP uX 上 Boost Chrono 编译失败
-
#8006 启动时 Boost::Chrono 断言 - steady_clock::now() - Windows
-
#9337 Linux 上 chrono::process_cpu_clock 时间点错误,偏差因子为 1000
-
#9342 V2 上 process_cpu_clock::timepoint io 的回归
-
#9419 boost::chrono::floor()/round() 和负持续时间错误
-
#9698 OSX 中未声明 boost::chrono::thread_clock
-
#9720 win32 上 boost::this_thread::sleep_for() 有时会立即返回
-
#9859 删除对 gcc-mingw 的引用
-
#9918 Solaris 上 chrono 编译错误,函数 timegm
-
#9811 boost/boost/chrono/duration.hpp:355:56: error: call to non-constexpr function 'static std::numeric_limits<float>::_Ty std::numeric_limits<float>::max()' /home/zosun/input_service/inputservices-core-service/other/boost/boost/chrono/duration.hpp: In static member function 'static constexpr double boost::chrono::detail::chrono_numeric_limits<double, true>::lowest()'
-
#10069 32 位系统上 chrono 时钟的溢出
-
#10151 QNX 上 timegm 函数不可用
-
-
Fusion:
-
Fusion 可以在 GPU 上使用。
-
-
Geometry:
-
附加功能
-
用于膨胀/收缩几何图形的新算法缓冲区(缓冲区本身已经存在,但只是用于扩大一个盒子)
-
新算法 remove_spikes,用于从环、多边形或多重多边形中删除尖峰的算法。
-
新算法 point_on_surface,生成位于多边形表面(内部)上的点
-
新算法 is_simple,如果几何图形根据 OGC 标准是简单的,则返回 true
-
新算法 is_valid,如果几何图形根据 OGC 标准是有效的,则返回 true
-
新算法 crosses,用于根据 OGC 标准检查此空间关系
-
集合操作算法(difference、intersection、sym_difference 和 union_)现在支持点状或线性几何图形对作为输入
-
distance 和 comparable_distance 算法现在支持所有几何组合对
-
不支持的空间关系(covered_by、touches、within 等)现在支持线性和/或面状几何图形作为输入
-
对 boost::variants 作为各种算法中的输入几何图形的支持
-
对索引线段的 rtree 支持
-
用于任意几何图形的 rtree nearest() 谓词支持
-
-
已解决的票据
-
8310 重叠多边形的错误结果(通过使用 point_on_surface 来分离修复)
-
8375 非闭合多边形的 sym_difference 返回闭合多边形
-
8376 非闭合多边形的 difference 返回闭合多边形
-
9081 布尔运算从非自相交多边形创建自相交多边形
-
9245 检查 make_qbk.py 中的处理错误
-
9563 (Sym)difference 不成功,通过缩放到稳健类型修复
-
9628 由于缠绕策略对于近乎水平的线段无法正确工作,导致 within() 的错误结果
-
9871 删除仅具有尖峰的多边形中的尖峰
-
9947 文档中缺少关于 WKT 的信息
-
9759 非笛卡尔坐标系的 R-tree knn 查询的无效结果
-
10019 LineString 和 Box 的 Difference 返回它们的交集
-
10077 boost/geometry/arithmetic/arithmetic.hpp 中概念检查中的错误类型
-
-
Bug 修复
-
intersects(polygon) 可能会为其闭合点返回一个自相交点,已修复
-
equals() 可能会根据 OGC 标准为非简单线性几何图形返回无效结果,已修复
-
touches() 对于逆时针面状几何图形无法正常工作,已修复
-
rtree 最近邻查询为非笛卡尔坐标系返回错误的元素,已修复
-
rtree 在某些情况下与 Interprocess 分配器一起使用时崩溃,已修复
-
-
-
Hash:
-
删除了一些 Visual C++ 6 的解决方法。
-
正在进行改进
hash_combine
的工作,这改变了该函数之前记录的算法。
-
-
Interprocess:
-
修复的错误
-
ABI 破坏性更改: #9221 表明消息队列的
BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
选项完全损坏,因此必须进行 ABI 破坏性更改才能拥有可用的实现。 -
简化、重构和统一了基于 try_lock() 的 (timed_)lock 代码。在处理超时过期时存在一些错误。
-
更改了条件变量析构函数的实现以允许 POSIX 语义(条件变量可以在所有等待线程被唤醒后销毁)。
-
添加了
BOOST_INTERPROCESS_SHARED_DIR_PATH
选项以定义用于放置共享内存对象的共享目录,当实现为内存映射文件时。 -
添加了对
BOOST_USE_WINDOWS_H
的支持。当定义此宏时,Interprocess 不会声明使用的 Windows API 函数和类型,会包含所有需要的 Windows SDK 头文件,并使用 Windows SDK 声明的类型和函数。 -
为
windows_shared_memory
添加了get_size
。
-
-
Intrusive:
-
改进了 Doxygen 生成的参考,并更新和修复了前向声明头文件。
-
ABI 破坏性更改: 修复了在 Boost 1.55 版本中引入的 ABI 回归,主要在 MSVC 编译器上注意到。
-
源代码破坏性更改: 从 splay 容器中删除了之前已弃用的
xxx_dont_splay
函数,从 splay 容器中删除了splay_set_base_hook
和splay_set_member_hook
,以及splaytree_algorithms
函数中的bool splay = true
额外参数。 -
修复的错误
-
优化了树重新平衡代码以避免冗余赋值。
-
在 64 位平台上为
suggested_upper_bucket_count
/suggested_lower_bucket_count
添加了 64 位素数值。 -
删除了旧 SUN_CC 编译器的解决方法,由于现代 SunPro 编译器足够标准,因此现在不再支持它们。
-
-
Log:
-
一般更改
-
对于 Windows 目标,该库现在默认编译为 Windows XP。
-
为
record
和record_view
添加了带有attribute_name
参数的索引运算符。 -
为
basic_formatting_ostream
添加了非 const 对象输出的运算符。 (#9389) -
添加了支持,用于将命名范围的函数名称和源文件名放入格式化的字符串中。 (#9263)
-
为命名范围格式化器添加了对不完整和空标记的支持。 (#9123)
-
不完整的命名范围列表的默认表示已更改:省略了尾随范围分隔符。
-
添加了对
std::regex
的支持头文件。 -
默认情况下,Boost.Log 在内部使用 Boost.Regex 作为正则表达式后端。可以通过定义配置宏来更改后端。
-
-
Bug 修复
-
修复了在启用 AVX2 的 CPU(例如,Intel Haswell)上的
dump
操作符输出。 -
修复了记录器的
get_attribute
方法的编译。 -
修复了同步和异步接收器前端的
locked_backend()
函数实现中可能出现的竞争。 -
修复了在使用
block_on_overflow
策略时,异步接收器入队方法中日志线程可能出现的无限阻塞。
-
-
有关更多详细信息,请参阅 changelog。
-
-
Math:
-
重大更改: 将一些主要用于内部维护的非核心头文件移动到了
libs/math/include_private
目录下。受影响的头文件包括boost/math/tools/test_data.hpp
,boost/math/tools/remez.hpp
,boost/math/constants/generate.hpp
,boost/math/tools/solve.hpp
,boost/math/tools/test.hpp
。您可以通过将libs/math/include_private
添加到编译器的包含路径中来继续使用这些头文件。 -
重大更改: 许多分布和特殊函数之前返回最大有限值而不是引发 overflow_error,现在已修复此问题,这意味着这些函数现在的行为与文档描述一致。但是,由于引发 overflow_error 的默认行为是抛出
std::overflow_error
异常,因此依赖于这些函数不抛出的应用程序现在可能会在之前没有异常的地方遇到异常。涉及的特殊函数有 gamma_p_inva、gamma_q_inva、ibeta_inva、ibetac_inva、ibeta_invb、ibetac_invb、gamma_p_inv、gamma_q_inv。涉及的分布有 pareto_distrib、beta_distrib、geometric_distrib、negative_binomial_distrib、binomial_distrib、chi_squared_distrib、gamma_distrib、inverse_chi_squared_distrib、inverse_gamma_distrib。请参阅 #10111。 -
修复了 round 和 trunc 函数,使其可以与整数参数一起使用,请参阅 #10066。
-
修复了 Halley 迭代以处理零导数(具有非零二阶导数)的情况,请参阅 #10046。
-
修复了几何分布对策略的使用,请参阅 #9833。
-
修复了负二项分布中的边界情况,请参阅 #9834。
-
修复了在 Mac OS 上的编译失败问题。
-
添加了 bernoulli_numbers,更改了任意精度 tgamma/lgamma 以使用斯特林近似(来自 Nikhar Agrawal)。
-
添加了贝塞尔函数的一阶导数:cyl_bessel_j_prime、cyl_neumann_prime、cyl_bessel_i_prime、cyl_bessel_k_prime、sph_bessel_prime 和 sph_neumann_prime(来自 Anton Bikineev)。
-
修复了有缺陷的 Student's t 示例代码,以及用于测试样本均值等效性的文档。
-
更好地记录了求根代码中的
max_iter
参数,请参阅 #9225。 -
添加了显式启用/禁用常量代码中使用 __float128 的选项,请参阅 #9240。
-
清理了 Bessel I0 和 I1 代码中对负值的处理(删除了死代码),请参阅 #9512。
-
修复了传递给 tgamma 和 lgamma 的非常小的值的处理,使其不会生成虚假的溢出(感谢 Rocco Romeo)。
-
#9672 Laplace 分布的 PDF 和 CDF 抛出 domain_error 随机变量现在可以是无限的。
-
修复了 rising_factorial、falling_factorial 和 tgamma_delta_ratio 中的几个边界情况,感谢 Rocco Romeo。
-
删除了常量
pow23_four_minus_pi
,其值与名称不匹配(并且 Boost.Math 未使用),请参阅 #9712。
-
-
移动:
-
添加了
BOOST_MOVE_RET
。
-
-
MPL:
-
boost::mpl::for_each
启用了在 GPU 上使用
-
-
Multi-index 容器:
-
由于必须返回指向下一个元素的迭代器,哈希索引的
erase(iterator)
成员函数在低负载条件下曾经具有较差的性能(请参阅 #4264)。根据 LWG issue #579 的解决方案,此问题已得到修复,同时保持了erase
的接口,代价是每个元素多使用一个字的内存。实际上,哈希索引的无序关联容器的 C++ 复杂性要求已得到改进,以便-
删除给定元素是无条件恒定时间的,
-
最坏情况的性能不是
O(n)
,而是O(ndist)
,其中ndist
是索引中非等效元素的数量。
由于哈希索引依赖于新的数据结构,其迭代器和局部迭代器的内部表示已更改,这会影响序列化:它们对应的序列化 类版本 已从 0 升级到 1。涉及哈希索引(局部)迭代器的旧归档可以由 Boost.MultiIndex 的 Boost 1.56 版本加载,反之则不行。 -
-
哈希索引现在提供
reserve
。 -
哈希索引现在可以根据 [unord.req] 中(经过适当调整的)C++ 标准规范检查相等性和不等性。
-
Boost.MultiIndex 的公共接口在适当的情况下提供
noexcept
规范(对于符合标准的编译器)。 -
提高了将元素插入
multi_index_container
时失败的性能。 -
删除了许多旨在支持 MSVC++ 7.0 及更早版本的内部代码。在没有此旧代码的情况下,编译时间可能会稍微快一些。
-
修复了通过取消引用右值来插入元素的错误(票证 #9665)。
-
使 Boost.MultiIndex 与
BOOST_BIND_NO_PLACEHOLDERS
兼容(票证 #9798)。 -
维护性修复。
-
-
多精度:
-
更改浮点数到有理数的转换以使其成为隐式的,请参阅 10082。
-
修复 checked_cpp_rational typedef 的定义。
-
修复了 cpp_int 中从字符串赋值的错误,请参阅 9936。
-
为二进制浮点添加了新的 cpp_bin_float 后端。
-
修复了 cpp_int 中从字符串赋值的错误,请参阅 9936。
-
添加了特定于 MSVC 的 #include 以包含编译器内部函数,请参阅 9336。
-
修复了文档中的各种拼写错误,请参阅 9432。
-
修复了 gmp_rational 以允许从已复制的对象进行移动复制,请参阅 9497。
-
添加了 numeric_limits 的值列表。
-
-
Odeint:
-
添加了代数和运算调度程序,用于自动检测适当的代数和运算。
-
添加了对 Eigen、Boost.Multiarray、Boost.Mpi、Boost.Compute、Blaze 和 NT2 的支持。
-
更改了代数接口以使用 algebra.norm_inf 函数。
-
添加了用于迭代 ODE 解的迭代器,因此可以替代积分函数。
-
添加了 Velocity-Verlet 方法。
-
小的错误修复。
-
-
可选:
-
添加了对右值引用的支持。现在
optional<T>
可以与可移动但不可复制的T
一起使用。 -
改进了
swap
(现在使用移动操作)。 -
添加了函数
emplace()
。这是来自 #1841 的最后一个请求。 -
optional
是可移动的,包括条件noexcept
规范,这使其具有move_if_noexcept
友好的特性。 -
在支持它的平台上使用显式 operator bool() (#4227)(重大更改)。
-
转发声明了
operator<<(ostream&, optional const&)
,以防止意外地不正确地序列化可选对象。 -
从示例中删除了已弃用的函数
reset()
(#9005)。 -
与
boost::none
的相等比较不需要T
是 EqualityComparable 的。 -
显式禁止了可选的右值引用。
-
显式禁止将临时对象绑定到可选引用(重大更改)。
-
更多访问包含值的方法,函数
value()
、value_or()
、value_or_eval()
。 -
更新和重组了文档,添加了教程和快速入门部分。
-
-
Predef:
-
为 MinGW 和 Windows 平台变体添加了
BOOST_PLAT_*
平台定义。 -
检测 Windows 编译器面向 Windows 8 移动设备的 ARM 架构。
-
改进了对 64 位 ARM 的 ARM 检测。
-
添加了将 iOS 检测为操作系统的功能。
-
改进了在某些平台上对字节序的检测。
-
添加了平台和编译器检测的独占加模拟定义。
-
-
预处理器:
-
当使用可变参数宏时,添加了元组功能以匹配所有数组功能。
-
-
线程:
-
修复的错误
-
#8070 优先使用 GetTickCount64 而不是 GetTickCount。
-
#9333 ex_scoped_thread 在 msvc-12.0 上编译失败。
-
#9341 编译错误 scoped_thread(移动语义) intel-linux-14.0.1。
-
#9366 async(Executor, ...) 在 msvc-10,11,12 上编译失败。
-
#9402 test_excutor 在 msvc-10,11,12 上的回归。
-
#9404 ex_make_future 回归错误。
-
#9471 同步文档问题。
-
#9535 缺少异常安全性可能会导致崩溃。
-
#9618 try_join_for 问题:程序未终止。
-
#9625 请重写 boost::thread::~thread() 参考部分。
-
#9632 boost::thread 类中的公共方法 start_thread。
-
#9673 在 Windows 上使用 MingW/gcc 进行线程编译时出现错误。
-
#9708 boost::condition_variable::timed_wait 在应该无限等待时意外唤醒。
-
#9711 future continuation 被调用两次。
-
#9867 删除对 gcc-mingw 的引用。
-
#10008 Boost 同步文档排版错误(future)。
-
#10058 once 中的空指针访问。
-
#10125 call_once:使用右值引用模拟的 variadic 版本中出现编译错误。
-
#10126 call_once:弃用 (Function, once_flag&) 重载。
-
#10147 pthread_delay_np() 参数在 AIX 上即使使用 gcc 也不同。
-
#10155 thread::physical_concurrency() 在 PowerPC 上始终返回 0。
-
#10184 Future:多重定义的符号。
-
-
TR1:
-
此库现在已弃用。
-
-
Variant:
-
重大更改:如果编译器支持,Variant 现在使用可变参数模板。这会导致更小的二进制文件和更快的编译时间,但在某些情况下可能会破坏元编程函数,特别是如果未使用 BOOST_VARIANT_ENUM_PARAMS 和 BOOST_VARIANT_ENUM_SHIFTED_PARAMS。可变参数模板的用法 可以禁用。
-
只能移动的类现在可以由访问者返回。
-
优化了 variant::swap() 并修复了
move_swap
中的歧义 #2839。 -
即使使用 -fvisibility=hidden 标志,异常现在在模块之间也是可见的。
-
放弃了对旧编译器的支持。
-
修复了一些警告 ( #3020)。
-
测试过的编译器
Boost 的主要测试编译器是
-
Linux
-
Clang: 3.4, 3.3, 3.2, 3.1, 3.0
-
Clang, C++98: 3.3.16
-
Clang, C++11, libc++: 3.4.2
-
Clang, C++1y: 3.3.16
-
GCC: 4.8.2, 4.8.1, 4.7.3, 4.6.4, 4.4.7
-
GCC, C++98: 4.9.0
-
GCC, C++11: 4.8.2
-
GCC, C++1y: 4.9.0
-
Intel: 13.1
-
-
OS X
-
Apple Clang: 5.1
-
Apple Clang, C++11: 5.1
-
GCC: 4.2.1
-
Intel: 12.0
-
-
Windows
-
GCC, mingw: 4.9.0, 4.8.2, 4.7.3, 4.7.2, 4.6.3, 4.5.4, 4.4.7
-
Visual C++: 12.0, 11.0, 10.0, 9.0
-
-
FreeBSD
-
GCC: 4.2.1
-
-
QNX
-
QCC: 4.4.2
-
Boost 的其他测试编译器包括
-
Linux
-
Clang: 3.4, 3.3, 3.2, 3.1, 3.0
-
Clang, C++98: 3.3.16
-
Clang, C++11, libc++: 3.4.2
-
Clang, C++1y: 3.3.16
-
Clang, C++14, libc++: trunk
-
GCC: 4.8.2, 4.8.1, 4.7.3, 4.6.4, 4.4.7
-
GCC, C++98: 4.9.0
-
GCC, C++11: 4.9.0, 4.8.2
-
GCC, C++1y: 4.9.0
-
Intel: 13.1, 13.0, 12.1, 11.1
-
-
OS X
-
Apple Clang: 5.1
-
Apple Clang, C++11
-
Clang: trunk
-
Clang, C++11: trunk
-
GCC: 4.2.1
-
Intel: 12.0
-
-
Windows
-
GCC, mingw: 4.9.0, 4.8.2, 4.7.2, 4.6.3, 4.5.4, 4.4.7
-
Visual C++: 12.0, 11.0, 10.0, 9.0
-
-
FreeBSD
-
GCC: 4.2.1
-
-
QNX
-
QCC, ARM: 4.4.2
-
QCC, x86: 4.4.2
-
致谢
Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此版本。