Boost
发布
arrow_drop_down
上一版本 (1.54.0)
2013年7月1日
依赖项
此版本中,新增了 51 个依赖项 (分布在 12 个库中),移除了 1 个依赖项 (分布在 1 个库中)。
平台 文件 SHA256 哈希
Unix boost_1_54_0.tar.bz2 047e9....8ae1d
boost_1_54_0.tar.gz 412d0....ef9e2
Windows boost_1_54_0.7z 1efe5....d29af
boost_1_54_0.zip 8361d....8411e

版本 1.54.0

2013年7月1日 17:10 GMT

文档

补丁

这些是库作者发现太迟而无法在 1.54.0 版本中修复的补丁。请注意,它们未经正常的测试过程。

  1. 协程补丁
  2. 日期时间补丁
  3. 日志补丁
  4. 线程补丁

新闻

支持的 CPU

Boost 不再支持 80386 目标 CPU,最低 x86 32 位目标为 i486。在此版本之前,Boost.SmartPtrBoost.Atomic(以及内部使用的库)并未完全支持 80386 目标。某些 Boost 库可能对最低目标 CPU 有更高的要求(例如 Boost.Log),详情请参阅 respective 库文档。

此外,默认情况下,在为 x86 32 位目标构建 Boost 时,它将针对 i686 (Pentium Pro) 及更高版本的 CPU 进行编译。可以通过在 bjam 命令中指定instruction-set属性来更改此设置,例如:b2bjam命令行,例如

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 文档中有一个 迁移指南

新库

  • Log:
    • 库,来自 Andrey Semashev。
  • TTI:
    • 类型特征内省库,来自 Edward Diener。
  • Type Erasure:
    • 基于概念的运行时多态性。

更新的库

  • Accumulators:
    • 修复注释拼写错误 (#7917)
    • 抑制未使用的变量警告 (#6926)
  • 算法:
    • copy_while 和 copy_until 的返回类型已更改。这是一个接口更改。如果您使用了这些函数的返回值,那么您必须修改您的代码。这些函数现在返回一个 std::pair<InputIterator, OutputIterator>,而不是只返回修改后的 OutputIterator。如果此更改影响了您的代码,最简单的更改是在调用末尾添加一个 .second,这将为您提供与之前相同的行为。
    • 添加了 'is_permutation', 'equal' 和 'mismatch' 的 C++14 版本。
  • Any:
    • 添加了 C++11 功能支持 #6999
      • 移动赋值和移动构造函数。
      • 添加了 noexcept 修饰符。
  • Asio:
    • 添加了新的特性类 handler_typeasync_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_protocolgeneric::raw_protocolgeneric::seq_packet_protocolgeneric::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::contextssl::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:
    • 修复了警告 (#8032)。
  • Container:
    • 添加了实验性的 static_vector 类,基于 Andrew Hundt 和 Adam Wulkiewicz 的高性能 varray 类。
    • 提高了 vector 构造函数/复制/移动/交换的速度,在可能时分派到 memcpy。
    • 支持 BOOST_NO_EXCEPTIONS #7227
    • 修复了 Bug #7921#7969#8118#8294#8553
  • Context:
    • 添加了对 SPARC 架构的支持。
  • Coroutine:
    • 添加了对分段堆栈(堆栈按需增长)的支持。
    • #7805 拼写错误
    • #7972 GCC 警告
    • #7988 C++11 range-for
    • #8023 使用迭代器特性
    • #8024 创建 const_iterator
    • #8101 迭代器的后缀 ++ 运算符
    • #8526 内存泄漏
    • #8544 调用托管 DLL
  • 几何:
    • 附加功能
      • 添加了空间索引,由 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)
  • :
    • 修复了 Trac 中的 Bug:#6780#7016#7155#7845#7863#7877#8166#8192#8398#8411#8427#8428#8434#8490#8681
    • 添加了 Jakob Lykke Andersen 和 Flavio De Lorenzi 开发的 VF2 子图同构更新。
    • 添加了 Fernando Vilas 的最大邻接搜索。
    • Brammert Ottens 为受资源约束的最短路径(r_c_shortest_paths)算法添加了超时支持。
    • 文档和示例的各种修复以及过时的编译器变通方法的移除。
  • 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:
    • tee 现在可以正确处理 std::streams(#8315)。
    • 文档修复(#8385#8460)。
    • 避免 Clang 的 -Wimplicit-fallthrough 警告(#8482)。
  • 词法转换:
    • 转换为字符指针现在会触发编译时断言而不是运行时断言 #8334
    • 词法转换现在能够转换 boost::int128_typeboost::uint128_type #7909
    • 更改了内部流缓冲区处理,现在可以与 libc++ 一起工作 #8267#7704
    • 恢复了获取 lexical_cast 函数地址的操作,该操作在 1.53.0 中已损坏 #7421
    • 修复了警告、内部操作和测试 #2558#7949#8162#8369#8547
  • 数学:
    • 重构以合并其他 Boost.Math 类,如 Integer Utilities(最大公约数和最小公倍数)、四元数和八元数。创建了新的章节标题。
    • 添加了许多对 Boost.Multiprecision 和 cpp_dec_float_50 作为用户定义类型 (UDT) 示例的引用。
    • 将 Clang 添加到支持的编译器列表中。
    • 修复了常量,以便在任意精度下使用时使用线程安全的计算值缓存。
    • 添加了对 Bessel 函数零点的查找:cyl_bessel_j_zerocyl_neumann_zeroairy_ai_zerosairy_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
  • 多边形:
    • Voronoi 文档的更新和修复。
    • 修复了 Trac 中的 Bug:#8026#8197#8257
  • 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:
    • 不再积极维护,因此已弃用。新开发请使用 Signals2
  • 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:
    • 一些非常基本的 noexcept 支持。
  • Utility:
    • 修复 basic_string_ref::find (#8067)。
    • 修复 string_ref 的逻辑运算符。
    • 更新 noncopyable 以支持 C++11 (#6578)。
    • 修复了在 DLL 接口中使用 noncopyable 时出现的编译器警告 (#6935)。
    • 修复了在 SolarisStudio 编译器上使用 boost::addressofboost::function 的问题 (#7079)。
    • 禁用 MSVC 关于逗号运算符的烦人警告 (#7663)
  • Variant:
    • 现在使用 Boost.TypeTrait 的新类型特性来检测 noexcept 构造函数和赋值运算符 #8296。这应该会提高 C++11 中 boost::variant 对许多类型的性能。
    • 实现了多重访问 #8459
    • 文档已更新,以反映 C++11 功能支持。
  • Wave:
    • 有关详细信息,请参阅 Changelog
  • 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
    • 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 管理了此次发布。

贡献者

Adam Wulkiewicz
Adam Wulkiewicz
贡献者
Marshall Clow
Marshall Clow
贡献者
John Maddock
John Maddock
贡献者
Barend Gehrels
Barend Gehrels
贡献者
Bruno Lalande
Bruno Lalande
贡献者
Ion Gaztañaga
Ion Gaztañaga
贡献者
Pavol Droba
贡献者
Paul A. Bristow
Paul A. Bristow
贡献者
Tim Blechmann
Tim Blechmann
贡献者
Andrey Semashev
Andrey Semashev
贡献者
Vicente J. Botet Escriba
Vicente J. Botet Escriba
贡献者
Daniel James
Daniel James
贡献者
Steven Watanabe
Steven Watanabe
贡献者
Oliver Kowalke
Oliver Kowalke
贡献者
Eric Niebler
Eric Niebler
贡献者
Christopher Kormanyos
Christopher Kormanyos
贡献者
Hartmut Kaiser
Hartmut Kaiser
贡献者
Antony Polukhin
Antony Polukhin
贡献者
Jeremiah Willcock
Jeremiah Willcock
贡献者
Mateusz Łoskot
Mateusz Łoskot
贡献者
Vladimir Prus
Vladimir Prus
贡献者
Michael A. Jackson
Michael A. Jackson
贡献者
Markus Schöpflin
贡献者
Benjamin Sobotta
贡献者
Robert Ramey
Robert Ramey
贡献者
Jürgen Hunold
Jürgen Hunold
贡献者
Rene Rivera
Rene Rivera
贡献者
Troy D. Straszheim
Troy D. Straszheim
贡献者
Christopher Kohlhoff
Christopher Kohlhoff
贡献者
Peter Dimov
Peter Dimov
贡献者
Beman Dawes
Beman Dawes
贡献者
Thorsten Jørgen Ottosen
Thorsten Jørgen Ottosen
贡献者
Bryce Adelstein-Lelbach
Bryce Adelstein-Lelbach
贡献者
Gennaro Prota
贡献者
K. Noel Belcourt
K. Noel Belcourt
贡献者
Christophe Henry
Christophe Henry
贡献者
Glen Fernandes
Glen Fernandes
贡献者
Frank Mori Hess
Frank Mori Hess
贡献者
Douglas Gregor
Douglas Gregor
贡献者
Joaquin M. López Muñoz
Joaquin M. López Muñoz
贡献者
Jeffrey Lee Hellrung, Jr.
Jeffrey Lee Hellrung, Jr.
贡献者
Nathan Ridge
Nathan Ridge
贡献者
Andrii Sydorchuk
Andrii Sydorchuk
贡献者
David Bellot
David Bellot
贡献者
Gennadiy Rozental
Gennadiy Rozental
贡献者
Emil Dotchevski
Emil Dotchevski
贡献者