版本 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
处理进行了进一步更改,以解决close()
系统调用可能在 Mac OS X 上挂起的其他情况。 -
修复了
resolver_query_base::flags::operator~
实现中的无限递归 (#9548)。 -
使
select
反应器在 Windows 上对于大量套接字更有效率 (#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
实现的信号编号检查中的一个偏差一错误 (#9324)。 -
更改为使用 SSE2 内在函数而不是内联汇编,以允许 Cray 编译器工作。
-
停止使用某些在最新 Visual C++ 和 Windows SDK 中标记为已弃用的 Winsock 函数。
-
添加了一个使用以下工具构建单元测试的解决方法gcc在 AIX 上。
-
Atomic:
-
该库已重新设计。 除了内部重构外,还修复了各种错误,包括功能测试宏和整数溢出处理的值不正确。
-
更改了
memory_order
枚举的值。 具体值不是接口的一部分,但是如果枚举在用户界面中使用,则此更改可能会破坏 ABI。 -
实现了对 Windows x64 上使用 MSVC 进行 128 位原子操作的支持。 该库假定目标 CPU 中存在
cmpxchg16b
指令。 一些早期的 AMD CPU 不支持此指令。 要以这些 CPU 为目标,请定义BOOST_ATOMIC_NO_CMPXCHG16B
宏。 -
实现了对使用 MSVC 的 Windows ARM 目标的实验性支持。
-
实现了对使用 GCC 的 DEC Alpha 目标的实验性支持。
-
改进了对使用 GCC 的 ARMv6 及更高版本的支持。 将所有原子操作实现为汇编程序块,而不是基于 CAS 的循环。 ARMv7 支持 64 位操作。
-
修复了 SPARCv9 目标的编译。 (#9446)
-
修复了 PowerPC 目标的编译。 (#9447)
-
删除了 IA64 平台上 Windows 的专用代码。
-
-
Circular Buffer:
-
放弃了对旧编译器的支持。
-
Concept Check:
-
更少的警告(包括 #5012)。
-
-
Container:
-
添加了基于 DlMalloc 的扩展分配器。
-
改进了基于树的有序关联容器的可配置性。 AVL、Scapegoat 和 Splay 树现在可用于实现
set
、multiset
、map
和multimap
。 -
修复了错误
-
-
Dynamic Bitset:
-
支持 C++11 移动构造函数
-
MSVC 2013 上的警告修复
-
支持 C++11 最小分配器
-
添加 noexcept 规范
-
-
Chrono:
-
#6918 由于未定义的 pthread_getcpuclockid,Boost Chrono 在 HP uX 上编译失败
-
#8006 Boost::Chrono 启动时断言 - steady_clock::now() - Windows
-
#9337 Linux 上 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: 错误:调用非 constexpr 函数 'static std::numeric_limits<float>::_Ty std::numeric_limits<float>::max()' /home/zosun/input_service/inputservices-core-service/other/boost/boost/chrono/duration.hpp: 在静态成员函数 '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 树 knn 查询的无效结果
-
10019 Linestring 和 Box 的 Difference 返回它们的交集
-
10077 boost/geometry/arithmetic/arithmetic.hpp 中概念检查中的错误类型
-
-
错误修复
-
intersects(polygon) 可能会为其闭合点返回自相交点,已修复
-
equals() 可能会根据 OGC 标准为非简单线性几何图形返回无效结果,已修复
-
touches() 对于 CCW 面积几何图形无法正常工作,已修复
-
rtree 最近邻查询对于非笛卡尔坐标系返回错误元素,已修复
-
rtree 在某些情况下与 Interprocess 分配器一起使用时崩溃,已修复
-
-
-
Hash:
-
删除了一些 Visual C++ 6 解决方法。
-
正在进行改进
hash_combine
的工作,这更改了该函数先前记录的算法。
-
-
Interprocess:
-
修复了错误
-
ABI 破坏性更改: #9221 表明消息队列的
BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
选项已完全损坏,因此必须进行 ABI 破坏性更改才能获得可用的实现。 -
简化、重构和统一了基于 try_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 作为正则表达式后端。 可以通过定义配置宏来更改后端。
-
-
错误修复
-
修复了 AVX2 启用 CPU(例如 Intel Haswell)上的
dump
操作符输出。 -
修复了记录器的
get_attribute
方法的编译。 -
修复了同步和异步 sink 前端的
locked_backend()
函数实现中可能存在的竞争。 -
修复了在使用
block_on_overflow
策略时,异步 sink 入队方法中日志记录线程可能存在的无限阻塞。
-
-
有关更多详细信息,请参阅 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。
-
修复了 Geometric 分布策略的使用,请参阅 #9833。
-
修复了负二项分布中的极端情况,请参阅 #9834。
-
修复了 Mac OS 上的编译失败。
-
添加了 bernoulli_numbers,更改了任意精度 tgamma/lgamma 以使用 Sterling 近似值(来自 Nikhar Agrawal)。
-
添加了 Bessel 函数的一阶导数: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。
-
-
Move:
-
添加了
BOOST_MOVE_RET
。
-
-
MPL:
-
boost::mpl::for_each
已启用,可在 GPU 上使用
-
-
Multi-index Containers:
-
哈希索引的
erase(iterator)
成员函数在低负载条件下曾经具有较差的性能,这是因为必须返回指向下一个元素的迭代器(请参阅票证 #4264)。 根据 LWG 问题 #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)。 -
维护修复。
-
-
Multiprecision:
-
更改了浮点到有理数的转换以使其成为隐式转换,请参阅 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 解的迭代器,因此是 integrate 函数的替代方法。
-
添加了 Velocity-Verlet 方法。
-
小的错误修复。
-
-
Optional:
-
添加了对右值引用的支持。 现在
optional<T>
可以与可移动但不可复制的T
一起使用。 -
改进了
swap
(现在使用移动操作)。 -
添加了函数
emplace()
。 这是来自 #1841 的最后一个请求。 -
optional
是可移动的,包括条件noexcept
规范,这使其对move_if_noexcept
友好。 -
在支持它的平台上使用显式 operator bool() (#4227)(破坏性更改)。
-
前向声明
operator<<(ostream&, optional const&)
以防止无意中错误地序列化 optional 对象。 -
从示例中删除了已弃用的函数
reset()
(#9005)。 -
与
boost::none
进行相等性比较不需要T
是 EqualityComparable。 -
显式禁止可选的右值引用。
-
显式禁止将临时对象绑定到可选引用(破坏性更改)。
-
更多访问包含值的方法,函数
value()
、value_or()
、value_or_eval()
。 -
更新和重新组织了文档,添加了教程和快速入门部分。
-
-
Predef:
-
为 MinGW 和 Windows 平台变体添加了
BOOST_PLAT_*
平台定义。 -
检测 Windows 编译器的 ARM 架构以面向 Windows 8 的移动设备。
-
改进了 64 位 ARM 的 ARM 检测。
-
添加了对 iOS 作为操作系统的检测。
-
改进了某些平台上的字节序检测。
-
为平台和编译器检测添加了独占加模拟定义。
-
-
Preprocessor:
-
当使用可变参数宏时,添加了元组功能以匹配所有数组功能。
-
-
线程:
-
已修复的错误
-
#8070 prefer 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 同步文档错别字 (futures)
-
#10058 once 中的空指针访问
-
#10125 call_once: 使用右值引用模拟的变参版本中的编译错误
-
#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 管理了此版本。