Boost C++ 库

...世界上最受尊敬和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ 编码标准

版本 1.52.0

版本 1.52.0

2012 年 11 月 5 日 16:05 GMT

文档

下载
平台文件
unixboost_1_52_0.tar.bz2
boost_1_52_0.tar.gz
windowsboost_1_52_0.7z
boost_1_52_0.zip

补丁

  • Locale 补丁 - 修复了一个导致 boost::locale::utf::utf_traits 接受一些无效 UTF-8 序列的错误,这可能是一个安全漏洞。

更新的库

  • Accumulators:
    • 修复长期存在的依赖跟踪错误,#7409
  • Config:
    • 为 gcc-4.4 定义 BOOST_NO_SFINAE_EXPR,因为发现其支持存在太多错误。
  • Chrono:
    • 新功能
      • #5980 使用 H. Hinnant 提案 提案 增强 chrono I/O,该提案的优势在于为使用公历的系统时钟提供 I/O。
      • #5981 为 duration 和 time_point 格式化状态添加 i/o 状态保存器。
      • #7059 添加低级 i/o 工具。
    • 已弃用的功能
      • Boost.Chrono 1.2.x 中包含的 chrono i/o 版本已在 2.0.0 版本中完全重构
      • chrono I/O:操作符 __duration_short__duration_long 已弃用。您应该使用参数化形式 __duration_fmt 或重命名的操作符 __duration_symbol__duration_prefix 代替。
      • chrono I/O:__duration_punct<> facet 已弃用。您应该使用 __get_duration_style 自由函数来获取信息,并使用 __duration_units facet 进行本地化。
      • BOOST_CHRONO_VERSION==2 时,上述已弃用的函数不可用。
    • 修复
      • #7381 C++11 兼容性:将 constexpr duration 分配给非 const 局部变量时,符号未解析。
      • #7479 如果标准库未提供 constexpr 接口,则支持 constexpr 的编译器编译失败
    • 不会修复
      • #6871 chrono_io.hpp: operator<<(ostream& os, ...) 修改 os 的状态。版本 2 中提供的新 io 接口解决了此问题。您应该迁移到新版本。
  • Container:
    • 改进了 stable_vector 的模板代码膨胀和类型安全性。
    • 更改了序列容器的 typedefs 并重新排序了函数,以改进 doxygen 文档。
    • 修复了错误 #6615, #7139, #7215, #7232, #7269, #7439
    • 实现了 LWG Issue #149 (范围插入现在返回迭代器) & 清理了大多数容器中的插入代码
    • 纠正了别名错误。
  • DateTime:
    • 文档 BOOST_DATE_TIME_NO_LIB (#6077)。
    • 修复 nth_as_str (#7022)。
    • 修复了一些警告 (#7234)。
  • Foreach:
    • 修复 gcc 上的对齐警告。
  • Function:
    • 添加了移动构造函数和移动赋值运算符(仅适用于支持 C++11 右值引用的编译器)#7330
  • Graph:
  • Hash:
    • 恢复了 enum 支持,该支持在上个版本中意外删除 (#7437)。
    • 新的浮点哈希器 - 将在更多平台上哈希二进制表示,这应该更快。
  • Interprocess:
    • mapped_region 中添加了 shrink_byadvise 函数。
    • ABI 破坏性更改: 使用循环缓冲区索引重新实现了 message_queue(旧行为使用有序数组,导致过多的复制)。这应该大大提高性能,但会破坏 ABI。可以通过在 boost/interprocess/detail/workaround.hpp 中取消定义宏 BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX 来使用旧行为/ABI
    • 改进了 message_queue 插入时间,避免了常见情况下的优先级搜索(数组和循环缓冲区配置)。
    • 实现了 interproces_sharable_mutexinterproces_condition_any
    • 改进了 offset_ptr 性能。
    • 添加了整数溢出检查。
  • Iterator:
    • 已修复
      • #5825 构造 function_input_iterator 而不使用项目
      • #7194 make_function_input_iterator 文档中的错误
    • 破坏性更改
      • 由于修复了 #5825,function_input_iterator 将不再对包装的无参数函数进行不必要的调用。例如,构造结束迭代器现在不会触发调用;并且取消引用和递增迭代器 N 次将触发 N 次调用,而不是像以前那样触发 N+1 次。依赖于旧行为的用户代码需要进行调整。
  • Lexical cast:
    • 恢复了在 MSVC-2003 上的编译(在 1.51.0 中已损坏)#7255
    • 添加了 lexical_cast(const CharType* chars, std::size_t count) 函数重载。#6663
    • 修复了错误 #7228
  • Math:
    • 添加了 Airy 函数和 Jacobi 椭圆函数。
    • 在几个分布中(特别是 Students T 分布),修正了小自由度的矩 #7177 (由 Thomas Mang 报告)。
    • 通过添加函数 check_out_of_range 来测试许多可能的错误参数,从而纠正了在许多分布中未能检测到错误参数的问题 #6934 (由 Florian Schoppmann 报告)。此测试揭示了几个分布,其中对错误参数的检查无效,并且已对其进行纠正。
    • 修复了 Hankel 函数中的问题,该问题导致为 x < 0ν 奇数返回不正确的值,请参阅 #7135
    • 在非中心 T 分布中允许无限自由度 #7259,使用正态分布实现 (由 Thomas Mang 请求)。当 delta / (4 * v) < epsilon 用于所使用的浮点类型时,通过切换到使用以 delta 为中心的 Students t 分布(或无限自由度的正态分布),还大大提高了大自由度和/或大非中心参数的精度。请参阅 #7259。还发现当自由度非常大时,不完全 beta 函数会遭受严重的抵消错误。(这现在已在我们的代码中修复,但任何基于 Didonato 和 Morris 原始论文的代码(实际上可能是每个实现)都将存在相同的问题)。
    • 修复了小问题 #6517, #6362, #7053, #2693, #6937, #7099
  • Phoenix:
    • 使 Phoenix 可以与基于 decltypeboost::result_of 一起使用。
  • Polygon:
    • 包含 Voronoi 图扩展。
    • 引入了新的 Segment 概念。
    • 修复了编译问题。
  • Proto:
    • 原始转换的数据参数现在可以选择具有按键索引的槽。
    • 原始转换现在可以对非常量限定的临时表达式进行操作。
    • <iterator> 中的自由函数以及一些 Boost.Range 函数添加了可调用函数对象类型。
    • Boost.MPL 算法适用于 Proto 表达式节点。
    • proto::pass_through 原始转换现在接受可选的 Domain 模板参数,用于指定结果表达式的目标域。
  • Ratio:
    • 功能
      • 分别用 symbol 和 prefix 函数替换 short_namelong_name 函数。
    • 已弃用
      • ratio_string<>::short_nameratio_string<>::long_name 已弃用。请分别使用 ratio_string<>::symbolratio_string<>::prefix。这些函数将在 1.55 中删除。
    • 修复
      • #7478 如果库未提供 std::u16string 和 std::u32string,则支持 char16_t 和 char32_t 的编译器编译失败。
  • Result_of:
    • 在编译器支持被认为“足够好”的情况下,将 boost::result_of 切换为使用 decltype。这意味着如果编译器实现了 n3276。(目前,这仅包括 clang 的最新版本。)
    • boost::result_of 使用 decltype 时,现在是“sfinae-friendly”的。请参阅 n3436
  • Thread:
    • 已弃用的功能:自 boost 1.50 起已弃用的功能仅在 boost 1.55 之前可用。这些已弃用的功能将在 boost 1.52 之前默认提供。如果您不想包含已弃用的功能,您可以定义 BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0。自 1.53 起,默认情况下将不再包含这些功能。自此版本起,如果您仍想包含已弃用的功能,您可以定义 BOOST_THREAD_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0。这些已弃用的功能仅在 boost 1.55 之前可用,也就是说您还有 1 年的时间迁移到新功能。
      • 时间相关函数不使用 Boost.Chrono 库,请改用 chrono 重载。
    • BOOST_THREAD_VERSION==3 (自 Boost 1.53 以来的默认值) 时的破坏性更改:有些新功能共享相同的接口,但行为不同。当 BOOST_THREAD_VERSION 为 3 时,默认提供这些破坏性功能,但用户可以通过定义相应的宏来选择版本 2 的行为。对于已弃用的功能,这些破坏性功能仅在 boost 1.55 之前可用。
      • #6229 C++11 兼容性 & 破坏性更改:按照 c++11 将 unique_future 重命名为 future。
      • #6266 C++11 兼容性 & 破坏性更改:如果线程可连接,则线程析构函数应调用 terminate。
      • #6269 C++11 兼容性 & 破坏性更改:如果线程可连接,则线程移动赋值应调用 terminate。
    • 新功能
      • #4710 C++11 兼容性:缺少 async()
      • #7283 C++11 兼容性:添加 notify_all_at_thread_exit
      • #7345 C++11 兼容性:向递归互斥锁 try_lock 添加 noexcept
    • 修复的错误
      • #2361 thread_specific_ptr:记录键的性质、复杂性和原理。
      • #2797 thread_specific_ptr 的两个问题。
      • #5274 由于未定义的类,在使用 msvc8.1 的 stlport 5.1.5 下编译 future.hpp 失败。
      • #5431 Windows CE 6.0(interlocked) 中的编译错误。
      • #5752 boost::call_once() 在某些平台上不可靠。
      • #7045 Thread 库不会自动编译 date_time。
      • #7173 错误的函数名称 interrupt_point()
      • #7200 无法模块化构建 boost.thread。
      • #7220 gcc 4.6.2 警告 inline+dllimport 函数。
      • #7238 this_thread::sleep_for() 不响应 interrupt()。
      • #7245 与版本 3 相关的文档中的小拼写错误。
      • #7272 win32/thread_primitives.hpp: (不必要的) 警告。
      • #7284 澄清在共享互斥锁上 lock 和 shared_lock 之间没有访问优先级。
      • #7329 boost/thread/future.hpp 在 HPUX 上无法编译。
      • #7336 BOOST_THREAD_DONT_USE_SYSTEM 不起作用。
      • #7349 packaged_task 持有对临时的引用。
      • #7350 allocator_destructor 不会销毁对象
  • uBLAS:
    • 提高了 inplace_solve 的性能(问题 #4024
    • 修复了 coordinate_matrix 以用于 gcc 4.7(问题 #7363
  • Unordered:
    • 在赋值中,尽可能重用现有节点。
    • 修复了擦除范围时的错误 (#7471)。
    • 对实现进行了一些工作。
  • Uuid:
    • 修复了 #6118, #6788, #7375
    • #7128 - 修复了 sha1.hpp 中消息长度超过 536,870,912 字节的错误。
  • Wave:
    • 有关详细信息,请参阅 Changelog
  • xpressive:
    • 使 sub_match 与 Boost.Range 一起工作。修复了 #7237

测试的编译器

Boost 的主要测试编译器是

  • Linux
    • GCC: 4.2.4, 4.3.4, 4.4.3, 4.5.3, 4.6.2, 4.7.2
    • GCC, C++11 模式: 4.3.4, 4.4.3, 4.5.3, 4.6.2
    • Intel: 11.1, 12.0, 12.1
    • LLVM Clang: 2.8
  • OS X
    • GCC: 4.4.4
    • GCC, C++11 模式: 4.4.4
    • Intel: 11.1, 12.0
  • Windows
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.0
    • Visual C++: 8.0, 9.0, 10.0
  • FreeBSD
    • GCC: 4.2.1, 32 和 64 位

Boost 的附加测试编译器包括

  • Linux
    • Cray: 8.0
    • Clang: 来自 subversion
    • GCC: 4.2.4, 4.3.4, 4.4.4, 4.5.3, 4.6.2, 4.6.3, 4.7.0, 4.7.1, 4.7.2
    • GCC, C++11 模式: 4.3.4, 4.4.4, 4.5.3, 4.6.3, 4.7.1
    • pgCC: 11.9
    • Intel: 10.1, 11.1, 12.0, 12.1
    • Visual Age: 10.1
  • OS X
    • Clang: 来自 subversion
    • Clang, C++11 模式: 来自 subversion
    • Intel: 11.1, 12.0
    • GCC: 4.4.4
    • GCC, C++11 模式: 4.4.4
  • Windows
    • Visual C++: 8.0, 9.0, 10.0, 11.0
    • Visual C++ with STLport: 9.0
    • Visual C++, Windows Mobile 5, with STLport: 9.0
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.0
  • AIX
    • IBM XL C/C++ Enterprise Edition: V12.1.0.0
  • FreeBSD
    • GCC: 4.2.1, 64 位
  • Solaris
    • Sun: 5.10

致谢

Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此版本。