Boost C++ 库

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

版本 1.48.0

版本 1.48.0

2011 年 11 月 15 日 15:47 GMT

文档

下载
平台文件
unixboost_1_48_0.tar.bz2
boost_1_48_0.tar.gz
windowsboost_1_48_0.7z
boost_1_48_0.zip

补丁

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

新库

  • Container: 标准库容器和扩展,来自 Ion Gaztañaga。
  • Locale: 为 C++ 提供本地化和 Unicode 处理工具,来自 Artyom Beilis。
  • Move: 用于 C++03 和 C++11 编译器的可移植移动语义,来自 Ion Gaztañaga。

更新的库

  • Asio:
    • 实现了各种性能改进,包括
      • 在单线程用例(即当 concurrency_hint 为 1 时)中使用线程本地操作队列以消除锁/解锁对。
      • 允许在不持有锁的情况下执行一些 epoll_reactor 投机操作。
      • 通过在调用相应的处理程序之前立即执行 epoll_reactor 的 I/O 操作来提高引用局部性。 还可以提高跨 CPU 的可伸缩性。
      • 针对恰好是两个缓冲区的数组 (boost::arraystd::array) 的缓冲区序列,专门化异步读取和写入操作。
    • 修复了 async_read_until 的 regex 重载中的编译错误 (#5688)。
    • 通过显式指定全局命名空间中的 signal() 函数,修复了 Windows 特有的编译错误 (#5722)。
    • 更改了 deadline_timer 实现,使其仅在计时器堆非空时才读取时钟。
    • 更改了 SSL 缓冲区大小,使其足够大以容纳完整的 TLS 记录 (#5854)。
    • 修复了同步 null_buffers 操作,使其遵守用户的非阻塞设置 (#5756)。
    • 更改为在使用 Windows 时在运行时设置 fd_set 大小。
    • 禁用了由于 const 限定符应用于函数类型而导致的 MSVC 警告。
    • 修复了使用 Intel C++ 编译器时发生的崩溃 (#5763)。
    • 更改了 OpenSSL 初始化以支持所有可用的算法。
    • 修复了会话正常关闭时的 SSL 错误映射。
    • 添加了一些延迟测试程序。
    • 澄清了当缓冲区已满时读取操作结束 (#5999)。
    • 修复了 epoll_reactor 初始化中的异常安全问题 (#6006)。
    • 使 strand 实现的数量可通过 BOOST_ASIO_STRAND_IMPLEMENTATIONS 宏配置。
    • 添加了对 BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION 标志的支持,该标志将 strand 分配切换为使用轮询方法而不是哈希。
    • 修复了当使用 strand.post() 时可能发生的潜在 strand 饥饿问题。
  • Chrono:
    • #5979 添加了 Howard Hinnant 此处定义的 chrono 舍入实用程序。
    • #5978 添加 BOOST_CHRONO_HAS_PROCESS_CLOCKS 以了解进程时钟是否可用。
    • #5998 使禁用混合错误处理成为可能。
    • #5906 考虑标准中定义的 constexpr。
    • #5907 对于支持 noexcept 的编译器,考虑 noexcept。
    • 修复了一些错误。
    • 有关更多详细信息,请参阅 历史记录
  • Config:
    • 添加 BOOST_NO_DECLTYPE_N3276 配置宏。(请参阅 N3276。)
  • Fusion:
    • 使 single_view 成为随机访问 fusion 序列。
    • fusion::distance 中删除伪造的编译时断言。
    • 更清晰的分段 Fusion 实现。
  • Geometry:
    • 错误修复
      • 鲁棒性问题,在某些情况下,union 输出失败。已修复。
      • 鲁棒性问题,在某些情况下,计算出的交点在段外。已修复。
      • 概念问题,笛卡尔相交不理解除提供的段以外的其他段。已修复。
      • 有时会遗漏线串中的自相交。已修复。
      • fusion 坐标系未正确注册。已修复。
    • 已解决的工单
      • #5726 (段相交算法仍然假定 'first'、'second' 成员)
      • #5744 (fusion adapt 示例中的错误)
      • #5748 (需要包含 <boost/foreach.hpp>)
      • #5954 (distance_pythagoras 跳过 sqrt() 步骤)
    • 算法改进
      • 现在不会自动执行自相交检查,这可能会降低性能。
      • 除此之外,自相交检查速度更快。
      • 相交现在避免输出重复点。因此,它们输出最小集合。
    • 附加算法
      • covered_by: within 定义为“在内,不在边界上”。 covered_by 是“在内或在边界上”
    • 附加功能
      • within: 现在可以为 within<point, box> 和 within<box, box> 指定策略
      • convert: 支持更广泛的转换
      • assign: 同样,(目前部分) convert 的同义词(但参数相反)
    • 附加坐标类型
      • 对 Boost.Rational 的基本支持
  • Graph:
    • 修复了错误 #5185, #5506, #5813#5919
    • Trac 中未包含的各种其他错误修复。
    • 将 reverse_graph 的 edge_descriptor 类型更改为新的数据类型,以避免与底层图的 edge_descriptor 产生歧义。
  • Interprocess:
    • 添加了自定义 offset_ptr 的支持,并允许创建可能在 32 位和 64 位进程之间共享的自定义托管段。
    • windows 中的共享内存再次具有文件系统生命周期:内核引导时间戳和 WMI 用于获取可靠的时间戳导致了很多问题。
  • Intrusive:
  • Lexical cast:
    • 添加了代码以在任何平台上处理 Inf 和 NaN 值 (#5689)。
    • 新的 Quickbook 文档 (#5723)。
    • 对于源类型和目标类型的许多组合,具有更好的性能和更少的内存使用。
    • C 语言环境具有更好的性能。
  • Math:
    • 为循环 Bessel I、J、K 和 Y 函数添加了新的级数求值方法。 还非常注意避免这些函数的虚假溢出和下溢。 修复了问题 #5560
    • 添加了使用逆卡方分布进行贝叶斯统计的示例,由 Thomas Mang 提供。
    • 添加了测试以使用改进版本的 lexical_cast,该版本处理 C99 非有限数,而无需使用全局 facets。
    • 更正了错误的超出范围的均匀分布 CDF 补值 #5733
    • 在 OpenBSD 上启用了 long double 支持(问题 #6014)。
    • 更改了 nextafter 和相关函数的行为方式,使其与其他实现的行为方式相同 - 以便 nextafter(+INF, 0) 是一个有限值(问题 #5832)。
    • 更改了 tuple 包含配置,以修复与 Boost.Tr1 结合使用时的问题(问题 #5934)。
    • 更改了 class eps_tolerance 的行为,使其在范围的两端均为零时也能正确运行(问题 #6001)。
    • 修复了 prime.hpp 上缺少 include 保护的问题(问题 #5927)。
    • 从 constants.hpp 中删除了未使用的/未记录的常量(问题 #5982)。
    • 修复了 nonfinite_num_facets.hpp 中缺少的 std:: 前缀(问题 #5914)。
    • 针对 Cray 编译器兼容性的次要补丁。
  • MSM:
    • eUML:添加了更简单的事件重处理:process(event_) 和 reprocess()
    • 重写了内部转换表。 存在一些错误(子子机器的内部转换表中递归失败)和一个缺失的功能(主状态机的未使用内部转换表)。
    • 错误修复
      • 将 favor_compile_time 策略恢复为 Boost 1.46 状态
      • none 事件现在可以从任何其他事件转换
      • eUML 和伪退出状态
      • 修复了 Flag_AND 不工作的问题
      • 修复了罕见的错误,这些错误导致在子机器中多次处理同一事件,该子机器的转换表包含此事件及其基本事件。
      • gcc 关于未使用变量的警告
    • 重大更改:新的内部转换表功能会导致较小的重大更改。 在子机器中,使用 internal_transition_table 声明的内部表的 guard/action 的 "Fsm" 模板参数现在是子机器,而不是更高级别的状态机。 在更高级别的状态机中使用内部行声明的内部转换保留其行为(“Fsm”参数是更高级别的状态机)。 总结一下,内部转换 "Fsm" 参数是包含此转换的最接近的状态机。
  • Numeric.Conversion:
  • Proto:
    • 重大更改: 通过在支持它们的编译器上使用右值引用来减少运算符重载的数量。 任何在 Proto 表达式上定义其他运算符重载的用户代码都可能因这一更改而变得模棱两可。 解决方案是使用语法来禁用 Proto 的运算符,这些运算符因任何用户定义的运算符而变得模棱两可。
    • 将 Proto 标记类型的定义移动到 ADL 阻止命名空间中。
    • proto::siwtch_ 添加第二个模板参数以控制向 case 的调度。
    • 允许使用 BOOST_PROTO_EXTENDSBOOST_PROTO_BASIC_EXTENDS 指定依赖域。
  • Regex:
  • Spirit:
    • Spirit V2.5.1,有关详细信息,请参阅“新增功能”部分。
  • TypeTraits:
  • Unordered:
    • 改进了对 C++11 标准的支持 - 对相等性和 emplace 的重大更改。
    • 使用 Boost.Move 来实现移动语义。
    • 有关完整详细信息,请参阅更改日志
  • Wave:
    • 有关详细信息,请参阅 Changelog

测试的编译器

Boost 的主要测试编译器是

  • Linux
    • LLVM Clang 2.8
    • GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.5.1, 4.5.2, 4.6
    • GCC, C++0x 模式: 4.3.4, 4.4.3, 4.5.2
    • Intel 11.1
  • OS X
    • Intel 11.1
    • GCC: 4.2.1, 4.4.4
    • GCC, C++0x 模式: 4.4.4
  • Windows
    • Visual C++ 8.0, 9.0, 10.0
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.1
  • FreeBSD
    • GCC 4.2.1, 32 位和 64 位。
  • QNX
    • QCC 4.4.2
    • QCC, C++0x 模式: 4.4.2, 4.6.1

Boost 的其他测试编译器包括

  • Linux
    • 来自 subversion 的 Clang,带有 libc++ 和 GNU libstdc++
    • LLVM Clang 2.8 x
    • GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.4, 4.5.2, 4.5.4, 4.6.1, 4.6.2
    • GCC, C++0x 模式: 4.3.4, 4.4.3, 4.4.4, 4.5.2
    • pgCC: 11.2 x
    • Intel: 10.1, 11.1, 12.0
    • PathScale: 4.0.8
    • Visual Age 10.1
  • OS X
    • 来自 subversion 的 Clang,带有 libc++ 和 GNU libstdc++。
    • Intel 11.1。
    • GCC: 4.2.1, 4.4.4。
    • GCC, C++0x 模式: 4.4.4。
  • Windows
    • Visual C++ 8.0, 9.0, 10.0
    • 带有 STLport 的 Visual C++: 9.0
    • 带有 STLport 的 Visual C++, Windows Mobile 5: 9.0
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.2, 4.5.4, 4.6.1
    • GCC, C++0x 模式, mingw: 4.5.2
    • GCC, mingw 64 位: 4.7.0
  • AIX
    • IBM XL C/C++ Enterprise Edition, V11.1.0.0
  • FreeBSD
    • GCC 4.2.1, 32 位和 64 位。
  • Solaris
    • Sun 5.10

致谢

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