版本 1.54.0
版本 1.54.0
2013 年 7 月 1 日 17:10 GMT
平台 | 文件 |
---|---|
unix | boost_1_54_0.tar.bz2 |
boost_1_54_0.tar.gz | |
windows | boost_1_54_0.7z |
boost_1_54_0.zip |
新闻
支持的 CPU
Boost 不再支持 80386 目标 CPU,最低 x86 32 位目标是 i486。即使在此版本之前,Boost.SmartPtr 和 Boost.Atomic(以及内部使用它们的库)也未正确支持 80386 目标。某些 Boost 库可能对最低目标 CPU 有更高的要求(例如 Boost.Log),有关详细信息,请参阅相应的库文档。
此外,默认情况下,当为 x86 32 位目标构建 Boost 时,它将为 i686 (Pentium Pro) 和更高版本的 CPU 编译。这可以通过在instruction-set属性中指定来更改b2或bjam命令行,例如
b2 variant=release architecture=x86 instruction-set=i486 stage
的可能值instruction-set是
-
主机 CPU 的目标native
-
通用 x86 CPUi486, i586, i686
-
英特尔 CPUpentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium3m, pentium-m, pentium4, pentium4m, prescott, nocona, core2, corei7, corei7-avx, core-avx-i, conroe, conroe-xe, conroe-l, allendale, merom, merom-xe, kentsfield, kentsfield-xe, penryn, wolfdale, yorksfield, nehalem, sandy-bridge, ivy-bridge, haswell, atom
-
AMD CPUk6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp, athlon-mp, k8, opteron, athlon64, athlon-fx, k8-sse3, opteron-sse3, athlon64-sse3, amdfam10, barcelona, bdver1, bdver2, bdver3, btver1, btver2
-
VIA CPUc3, c3-2
-
IDT CPUwinchip-c6, winchip2
请注意,并非所有这些值都可能受特定编译器的支持。
信号已弃用
Boost.Signals 不再积极维护,因此已被弃用。请勿在新开发中使用 Boost.Signals(请改用 Boost.Signals2)。如果您有现有的基于 Boost.Signals 的代码,它将继续工作,但请考虑迁移到 Boost.Signals2。Signals2 文档中有一个 移植指南。
新库
-
Log: 日志库,来自 Andrey Semashev。
-
TTI: 类型特征内省库,来自 Edward Diener。
-
Type Erasure: 基于概念的运行时多态。
更新的库
-
Algorithm:
-
`copy_while` 和 `copy_until` 的返回类型已更改。这是一个接口更改。如果您正在使用这些函数的返回值,则必须修改您的代码。这些函数现在返回 `std::pair<InputIterator, OutputIterator>`,而不仅仅是返回修改后的
OutputIterator
。如果此更改影响了您的代码,最简单的更改是在调用的末尾添加.second
,这将使您获得与之前相同的行为。 -
添加了 C++14 版本的 'is_permutation'、'equal' 和 'mismatch'。
-
-
Asio:
-
添加了新的 traits 类,
handler_type
和async_result
,允许自定义启动函数的返回类型。 -
添加了
asio::spawn()
函数,这是一个用于运行 stackful 协程的高级包装器,基于 Boost.Coroutine 库。spawn()
函数使程序能够以同步方式实现异步逻辑。例如:size_t n = my_socket.async_read_some(my_buffer, yield);
。 -
添加了
asio::use_future
特殊值,它为从异步操作的启动函数返回 C++11std::future
提供了第一类支持。例如:future<size_t> n = my_socket.async_read_some(my_buffer, asio::use_future);
。 -
将 stackless 协程类和宏提升为 Asio 文档化接口的一部分,而不是 HTTP 服务器 4 示例的一部分。
-
添加了一个名为
asio_handler_is_continuation
的新处理程序钩子。异步操作可能表示与当前正在执行的处理程序关联的异步控制流的延续。如果情况如此,可以自定义asio_handler_is_continuation
钩子以返回true
,Asio 的实现可以使用此知识来优化新处理程序的调度。为了涵盖常见情况,Asio 为 strands、spawn()
和组合异步操作自定义了钩子。 -
添加了四个新的通用协议类,
generic::datagram_protocol
、generic::raw_protocol
、generic::seq_packet_protocol
和generic::stream_protocol
,它们实现了Protocol
类型要求,但允许用户在运行时指定地址族(例如AF_INET
)和协议类型(例如IPPROTO_TCP
)。 -
添加了 C++11 移动构造函数,允许将套接字(或 acceptor)转换为更通用的类型。例如,可以通过移动构造将
ip::tcp::socket
转换为generic::stream_protocol::socket
。 -
扩展了
basic_socket_acceptor<>
类的accept()
和async_accept()
函数,以允许将新连接直接接受到更通用类型的套接字中。例如,ip::tcp::acceptor
可以用于接受到generic::stream_protocol::socket
对象中。 -
将现有示例移动到 C++03 特定目录中,并为 C++11 特定示例添加了一个新目录。C++03 示例的有限子集已转换为其 C++11 等效项。
-
各种 SSL 增强功能。感谢 Nick Jones,这些更改基于他的工作。
-
添加了对 SSL 握手的支持,该握手重用已从线路读取的数据。添加了
ssl::stream<>
类的handshake()
和async_handshake()
函数的新重载。这些重载接受ConstBufferSequence
作为握手过程的 ssl 引擎的初始输入。 -
添加了对创建 TLSv1.1 和 TLSv1.2
ssl::context
对象 的支持。 -
为
ssl::context
和ssl::stream<>
类添加了set_verify_depth()
函数。 -
添加了从内存缓冲区加载 SSL 证书和密钥数据的能力。新的函数
add_certificate_authority()
、use_certificate()
、use_certificate_chain()
、use_private_key()
、use_rsa_private_key()
和use_tmp_dh()
已添加到ssl::context
类中。 -
更改了
ssl::context
以默认自动禁用 SSL 压缩。要启用,请使用新的ssl::context::clear_options()
函数,如my_context.clear_options(ssl::context::no_compression)
。
-
-
修复了
signal_set
实现中潜在的死锁。 -
修复了文档中 acceptor 示例中的错误 #8421。
-
修复了 waitable timer 文档中的复制粘贴错误 #8602。
-
添加了断言以满足某些代码分析工具 #7739。
-
修复了格式错误的
#warning
指令 #7939。 -
修复了 Linux
epoll
实现中潜在的数据竞争。 -
修复了
basic_waitable_timer
的底层实现,使其可以处理任何time_point
值,而不会使中间 duration 对象溢出。 -
修复了异步连接操作的实现,使其可以应对来自 reactor 的虚假就绪通知 #7961。
-
-
Circular Buffer:
-
修复了警告 (#8032)。
-
-
Context:
-
添加了对 SPARC 架构的支持。
-
-
Geometry:
-
附加功能
-
添加了空间索引,由 Adam Wulkiewicz 为 Boost.Geometry 开发。空间索引最初由 Federico J. Fernandez 在 2008 年 Google Summer of Code 计划期间启动,由 Hartmut Kaiser 指导。
-
添加了 SVG 输出,这已经在扩展中存在了几年
-
-
文档
-
小的单词遗漏修复
-
-
Bug 修复
-
共线相反的线段有时(在圆中)存在鲁棒性问题,已修复
-
修复了错误插入的交点(由 buffer 发现)
-
应用了 Vladimir Petrovic 提供的用于调试遍历的补丁
-
-
内部更改
-
使几个算法变体感知 (append, area, clear, convert, equals, length, num_points)
-
-
-
Graph:
-
从 Jakob Lykke Andersen 和 Flavio De Lorenzi 添加了对 VF2 子图同构的更新。
-
从 Fernando Vilas 添加了最大邻接搜索。
-
从 Brammert Ottens 向资源受限的最短路径 (r_c_shortest_paths) 算法添加了超时支持。
-
对文档和示例进行了各种修复,并删除了过时的编译器解决方法。
-
Interprocess:
-
为 mapped_region 添加了对平台特定标志的支持 (ticket #8030)
-
ABI 破坏性更改:更改了 Windows 中的 bootstamp 函数,以使用 EventLog 服务启动时间作为系统启动时间。以前使用的来自 WMI 的
LastBootupTime
在时间同步和休眠方面不稳定,在实践中无法使用。如果您确实需要获得 Boost 1.54 之前的行为,请从命令行或detail/workaround.hpp
定义BOOST_INTERPROCESS_BOOTSTAMP_IS_LASTBOOTUPTIME
。
-
-
Math:
-
进行了重大重组,以整合其他 Boost.Math 库,如整数工具(最大公约数和最小公倍数)、四元数和八元数。创建新的章节标题。
-
添加了许多对 Boost.Multiprecision 和
cpp_dec_float_50
的引用,作为用户定义类型 (UDT) 的示例。 -
将 Clang 添加到支持的编译器列表中。
-
修复了常量,使其在使用任意精度时使用计算值的线程安全缓存。
-
添加了查找 Bessel 函数零点的功能
cyl_bessel_j_zero
、cyl_neumann_zero
、airy_ai_zeros
和airy_bi_zeros
(由 Christopher Kormanyos 提供)。 -
Rocco Romeo 对 Bessel J 和 Y 函数进行了更多精度改进。
-
修复了导致某些头文件无法编译的讨厌的循环依赖性 bug #7999。
-
修复了 __tgamma 中的 bug,该 bug 导致参数在 142.5 到 143 之间时出现虚假的溢出。
-
修复了 raise_rounding_error 中的 bug,该 bug 导致在关闭异常抛出时返回不正确的结果 #7905。
-
添加了最小的 __float128 支持。
-
修复了 poisson quantile 的边缘情况 bug #8308。
-
调整了 Halley 迭代中使用的启发式方法,以应对在导数趋于平缓的棘手区域中反转不完全 beta 函数的情况。示例是计算概率小于机器 epsilon 的 Fisher F 分布的分位数。请参阅 ticket #8314。
-
-
Meta State Machine:
-
Bug 修复:Exit points 对于 favor_compile_time 策略已损坏。
-
Bug 修复:复制破坏了子子状态机的 exit points。
-
Bug 修复:#8046
-
-
Multiprecision:
-
破坏性更改:将
rational_adapter
重命名为rational_adaptor
。 -
添加了对 MPFI 的支持。
-
添加了 logged_adaptor。
-
通过 GCC 的
__float128
或 Intel 的_Quad
数据类型添加了对 128 位浮点数的支持。 -
在 cpp_int 中添加了对用户定义字面量的支持,改进了
constexpr
支持。 -
修复了
cpp_int
中单个 limb 减法的 bug,当结果的最后一个 limb 应为 0 时,该 bug 会导致值不正确:8133。 -
修复了
cpp_int
中的 bug,其中 0 除以某物不会在结果中得到零:8160。 -
修复了某些超越函数中的 bug,这些 bug 在变量被重用时导致不正确的返回值,例如
a = pow(a, b)
。请参阅 8326。
-
-
PropertyMap:
-
添加了来自 Guillaume Pinot 的
compose_property_map
。
-
-
Thread:
-
修复的 Bug
-
#4878 MinGW 4.5.0 未定义对 bool interruptible_wait(detail::win32::handle handle_to_wait_for,detail::t imeout target_time) 的引用。
-
#4882 Win32 shared_mutex 未正确处理超时。
-
#5752 boost::call_once() 在某些平台上不可靠
-
#6652 Boost.Thread shared_mutex.hpp:50:99: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
-
#6843 [Intel C++] 使用 '#include <atomic>' 的编译错误
-
#6966 future boost::future_category 不一致的 dll 链接
-
#7720 在密集锁定/解锁互斥锁时出现异常 lock_error
-
#7755 Thread: Windows 上 shared_mutex 的死锁
-
#7980 构建错误:msvc-11.0 和 BOOST_THREAD_DONT_USE_DATETIME
-
#7982 AIX 上的 pthread_delay_np() parm 编译错误
-
#8027 thread 库无法使用 Visual Studio 2003 编译
-
#8070 优先使用 GetTickCount64 而不是 GetTickCount
-
#8136 boost::this_thread::sleep_for() 在 Windows 中睡眠时间过长
-
#8212 Boost thread 在 Solaris 10 上的编译错误
-
#8237 修复 'thread_group' 的文档
-
#8239 barrier::wait() 未标记为 interruption_point
-
#8323 boost::thread::try_join_for/try_join_until 可能由于 Boost.Thread 和 Boost.Chrono 中的问题组合而无限期阻塞
-
#8337 "std::string(this->code()->message())" 的内部表示逃逸,但在退出作用域时被销毁。
-
#8371 当 constexpr 不可用时启用 C++11 once_flag
-
#8443 头文件包含顺序可能导致崩溃
-
#8451 缺少文档化的函数 'boost::scoped_thread::joinable'
-
#8530 [Coverity] 未使用的变量 thread_handle,thread/pthread/thread_data.hpp 中未初始化的变量 cond_mutex
-
#8596 启用 C++0x 后,boost::packaged_task 存储对函数对象的引用,而不是副本。
-
-
Type Traits:
-
实现了新的类型特征 #8189
-
is_nothrow_move_constructible
-
is_nothrow_move_assignable
-
has_trivial_move_assign
-
has_trivial_move_constructor
-
-
-
Unordered:
-
一些非常基本的
noexcept
支持。
-
测试的编译器
Boost 的主要测试编译器是
-
Linux
-
GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.3
-
GCC, C++98 模式: 4.7.3
-
GCC, C++11 模式: 4.7.2, 4.7.3, 4.8.0
-
Clang: 3.0, 3.1, 3.2
-
Clang, C++11 模式: 3.2
-
-
OS X
-
GCC: 4.2
-
Apple Clang: 4.2.1
-
Apple Clang, C++11 模式: 4.2.1
-
-
Windows
-
GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0
-
Visual C++: 8.0, 9.0, 10.0, 11.0
-
-
FreeBSD
-
GCC: 4.2.1
-
Boost 的其他测试编译器包括
-
Linux
-
Clang: 3.0, 3.1, 3.2, 来自 Subversion
-
Clang, 使用 libc++: 3.2
-
GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.2, 4.7.3
-
GCC, C++98 模式: 4.7.3
-
GCC, C++11 模式: 4.7.3, 4.8.0
-
-
OS X
-
Apple Clang: 4.2.1
-
Apple Clang, C++11 模式: 4.2.1
-
Clang: 来自 Subversion
-
Clang, C++11 模式: 来自 Subversion
-
GCC: 4.2
-
-
Windows
-
GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0
-
Visual C++: 9.0, 10.0, 11.0
-
Visual C++, Windows Mobile 5, 使用 STLport: 9.0
-
-
AIX
-
IBM XL C/C++ Enterprise Edition: 12.1.0.1
-
-
FreeBSD
-
GCC: 4.2.1
-
致谢
Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此版本。