版本 1.54.0
2013年7月1日 17:10 GMT
文档
补丁
这些是库作者发现太迟而无法在 1.54.0 版本中修复的补丁。请注意,它们未经正常的测试过程。
-
协程补丁
-
日期时间补丁
-
日志补丁
-
线程补丁
新闻
支持的 CPU
Boost 不再支持 80386 目标 CPU,最低 x86 32 位目标为 i486。在此版本之前,Boost.SmartPtr 和 Boost.Atomic(以及内部使用的库)并未完全支持 80386 目标。某些 Boost 库可能对最低目标 CPU 有更高的要求(例如 Boost.Log),详情请参阅 respective 库文档。
此外,默认情况下,在为 x86 32 位目标构建 Boost 时,它将针对 i686 (Pentium Pro) 及更高版本的 CPU 进行编译。可以通过在 bjam 命令中指定instruction-set属性来更改此设置,例如:b2或bjam命令行,例如
b2 variant=release architecture=x86 instruction-set=i486 stage
以下是instruction-set公亩
- 主机 CPU 的目标本机
- 通用 x86 CPUi486, i586,
i686
- Intel 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
请注意,并非所有这些值都可能被特定的编译器支持。
Signals 已弃用
Boost.Signals 不再积极维护,因此已被弃用。请勿在新开发中使用 Boost.Signals(而是使用 Boost.Signals2)。如果您有现有的基于 Boost.Signals 的代码,它将继续工作,但请考虑迁移到 Boost.Signals2。Signals2 文档中有一个 迁移指南。
新库
更新的库
-
Accumulators:
-
算法:
- copy_while 和 copy_until 的返回类型已更改。这是一个接口更改。如果您使用了这些函数的返回值,那么您必须修改您的代码。这些函数现在返回一个
std::pair<InputIterator, OutputIterator>,而不是只返回修改后的 OutputIterator。如果此更改影响了您的代码,最简单的更改是在调用末尾添加一个 .second,这将为您提供与之前相同的行为。
- 添加了 'is_permutation', 'equal' 和 'mismatch' 的 C++14 版本。
-
Any:
- 添加了 C++11 功能支持 #6999
- 移动赋值和移动构造函数。
- 添加了
noexcept 修饰符。
-
Asio:
- 添加了新的特性类
handler_type 和 async_result,它们允许自定义初始化函数的返回类型。
- 添加了
asio::spawn() 函数,这是一个用于运行栈式协程的高级封装器,基于 Boost.Coroutine 库。spawn() 函数使程序能够以同步方式实现异步逻辑。例如:size_t n = my_socket.async_read_some(my_buffer, yield);。
- 添加了
asio::use_future 特殊值,它为从异步操作的初始化函数返回 C++11 std::future 提供了头等支持。例如:future<size_t> n = my_socket.async_read_some(my_buffer, asio::use_future);。
- 将无栈协程类和宏提升为 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 移动构造函数,允许将套接字(或接受器)转换为更通用的类型。例如,
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 对象ings 的支持。
- 向
ssl::context 和 ssl::stream<> 类添加了 set_verify_depth() 函数。
- 添加了从内存缓冲区加载 SSL 证书和密钥数据的能力。向
ssl::context 类添加了新函数:add_certificate_authority()、use_certificate()、use_certificate_chain()、use_private_key()、use_rsa_private_key() 和 use_tmp_dh()。
- 已将
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 实现中潜在的数据竞争。
- 修复了一个 Windows 特定错误,其中某些操作可能生成一个
error_code,该错误码具有无效(即 NULL)的 error_category #8613。
- 修复了
basic_waitable_timer 的底层实现,使其能够处理任何 time_point 值,而不会溢出中间持续时间对象。
- 修复了在对同一
io_service 对象进行并发调用 run() 和 poll() 时可能发生的丢失线程唤醒问题 #8354。
- 修复了异步连接操作的实现,使其能够应对 reactor 产生的虚假就绪通知 #7961。
-
Chrono:
-
修复了 Bug
-
#8079 Chrono 内存泄漏
-
#8318 BOOST_FORCEINLINE time_point 和 duration 的构造函数
-
#8367 使用 clang 从 XCode 4.5.2 编译 Chrono 时出现问题,带 -std=c++11 -stdlib=libc++ 和 -arch armv7
-
#8370 Chrono 引用中的拼写错误
-
#8435 HP-UX 上 Chrono 无法编译,因为缺少 CLOCK_REALTIME 宏。
-
Circular Buffer:
-
Container:
- 添加了实验性的
static_vector 类,基于 Andrew Hundt 和 Adam Wulkiewicz 的高性能 varray 类。
- 提高了
vector 构造函数/复制/移动/交换的速度,在可能时分派到 memcpy。
- 支持
BOOST_NO_EXCEPTIONS #7227。
- 修复了 Bug #7921、#7969、#8118、#8294、#8553。
-
Context:
-
Coroutine:
-
几何:
-
附加功能
- 添加了空间索引,由 Adam Wulkiewicz 为 Boost.Geometry 开发。空间索引最初由 Federico J. Fernandez 在 Google Summer of Code 2008 项目中开始,由 Hartmut Kaiser 指导。
- 添加了 SVG 输出,这在 extensions 中已经存在多年。
-
文档
-
错误修复
- 共线的相反线段有时(在圆中)存在鲁棒性问题,已修复。
- 修复了插入错误的交点(由 buffer 发现)。
- 应用了 Vladimir Petrovic 的补丁用于调试遍历。
-
已解决的工单
-
7462 浮点数的退化并集结果已修复。
-
7465 scale_transformer 类中错误的构造函数访问类型已修复。
-
7802 cart_intersect.hpp 未使用的参数警告已修复。
-
8254 错误的交点已修复。
-
8393 多边形模型不符合声明的多边形概念规则,文档已更新。
-
8403 抑制了编译器警告 C4127:条件表达式是常量
-
8405 抑制了编译器警告 C4189:“...”:局部变量已初始化但未使用
-
内部更改
- 使多个算法支持变体(append, area, clear, convert, equals, length, num_points)
-
图:
-
Interprocess:
- 为 mapped_region 添加了平台特定标志支持(bug #8030)
- 修复了 Bug #7484、#7598、#7682、#7923、#7924、#7928、#7936、#8521、#8595。
-
ABI 更改:在 Windows 中更改了 bootstamp 函数,使用 EventLog 服务启动时间作为系统启动时间。先前使用 WMI 的
LastBootupTime 在时间同步和休眠时不稳定,实际上不可用。如果您确实需要获得 Boost 1.54 之前的行为,请在命令行或 detail/workaround.hpp 中定义 BOOST_INTERPROCESS_BOOTSTAMP_IS_LASTBOOTUPTIME。
-
Intrusive:
- 添加了
BOOST_NO_EXCEPTIONS 支持(bug #7849)。
-
Iostreams:
-
词法转换:
-
数学:
- 重构以合并其他 Boost.Math 类,如 Integer Utilities(最大公约数和最小公倍数)、四元数和八元数。创建了新的章节标题。
- 添加了许多对 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 支持。
- 修复了泊松分位数边缘情况下的 bug #8308。
- 调整了 Halley 迭代中使用的启发式方法,以应对在导数平坦的棘手区域中反转不完全 Beta 函数。例如,计算 Fisher F 分布的量化值,其概率小于机器 epsilon。请参阅 #8314。
-
Meta State Machine:
- Bugfix:favor_compile_time 策略的退出点已损坏。
- Bugfix:copy 会破坏子子机器的退出点。
- Bugfix:#8046
-
Move:
-
Multiprecision:
-
重大更改:将
rational_adapter 重命名为 rational_adaptor。
- 添加了对 MPFI 的支持。
- 添加了 logged_adaptor。
- 通过 GCC 的
__float128 或 Intel 的 _Quad 数据类型添加了对 128 位浮点数ings 的支持。
- 为 cpp_int 添加了对用户定义字面量的支持,改进了
constexpr 支持。
- 修复了
cpp_int 整数除法中的 bug,当两个参数都足够小以适合 double_limb_type 时,结果的符号不正确。请参阅 8126。
- 修复了
cpp_int 中减去单个 limb 的 bug,当结果最后一个 limb 应该是 0 时,值不正确:8133。
- 修复了
cpp_int 中 0 除以某个数结果不为零的 bug:8160。
- 修复了一些超越函数中的 bug,当变量被重用时会导致返回值不正确,例如与
a = pow(a, b)。请参阅 8326。
-
多边形:
-
PropertyMap:
- 添加了 Guillaume Pinot 的
compose_property_map。
-
范围:
-
错误修复
-
#6944 某些 Range 概念使用了错误的 Iterator 概念
-
#7407 istream_range 无法与 wcin 编译
-
#7408 istream_range 不应拉取 istream
-
#7731 当步长为 3 或更大时,irange 无法正确结束迭代
-
#7827 [range] 无法编译 r | indexed 到 range 算法
-
#8338 指针到数组作为迭代器时,Iterator range 无法工作
-
#8453 不正确的配置宏 BOOST_NO_PARTIAL_TEMPLATE_SPECIALIZATION
-
Signals:
-
Thread:
-
新功能
-
#7285 C++11 合规性:允许传递可移动参数给 call_once。
-
#7445 Async:添加 future<>.then
-
#7449 Synchro:添加同步值类
-
修复了 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: 警告:解引用类型双关指针将破坏严格别名规则 [-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 pthread_delay_np() 参数在 AIX 上编译出错
-
#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 和 Boost.Chrono 中存在一系列问题,boost::thread::try_join_for/try_join_until 可能会无限期阻塞
-
#8337 "std::string(this->code()->message())" 的内部表示会溢出,但在退出作用域时会被销毁。
-
#8371 在 constexpr 不可用时启用了 C++11 once_flag
-
#8443 头文件包含顺序可能导致崩溃
-
#8451 缺少文档函数 'boost::scoped_thread::joinable'
-
#8530 [Coverity] thread/pthread/thread_data.hpp 中未使用的变量 thread_handle,未初始化的变量 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
-
uBLAS:
-
#6511 与标量进行除法应使用
enable_if<>
-
#7297 使自由函数 'num_columns' 和 'num_rows' 支持 uBLAS 特性系统,并与表达式类型更好地配合
-
#6010 修复了 assignment.hpp 中的链接问题
- 更新了文档
-
Unordered:
-
Utility:
- 修复
basic_string_ref::find (#8067)。
- 修复
string_ref 的逻辑运算符。
- 更新 noncopyable 以支持 C++11 (#6578)。
- 修复了在 DLL 接口中使用
noncopyable 时出现的编译器警告 (#6935)。
- 修复了在 SolarisStudio 编译器上使用
boost::addressof 和 boost::function 的问题 (#7079)。
- 禁用 MSVC 关于逗号运算符的烦人警告 (#7663)
-
Variant:
- 现在使用 Boost.TypeTrait 的新类型特性来检测
noexcept 构造函数和赋值运算符 #8296。这应该会提高 C++11 中 boost::variant 对许多类型的性能。
- 实现了多重访问 #8459。
- 文档已更新,以反映 C++11 功能支持。
-
Wave:
-
xpressive:
- 移除了未使用的变量,修复了 #8039
- 避免与 glx.h 中的宏
None 发生名称冲突,修复了 #8204
- 抑制了 gcc 警告,修复了 #8138
测试的编译器
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
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
致谢
Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此次发布。