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

补丁

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

新库

  • 容器: 来自 Ion Gaztañaga 的标准库容器和扩展。
  • 区域设置: 来自 Artyom Beilis 的 C++ 本地化和 Unicode 处理工具。
  • 移动: 来自 Ion Gaztañaga 的 C++03 和 C++11 编译器的可移植移动语义。

更新的库

  • 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)。
    • 通过 BOOST_ASIO_STRAND_IMPLEMENTATIONS 宏使 strand 实现的数量可配置。
    • 添加了对 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 用于支持它的编译器。
    • 修复了一些错误。
    • 有关更多详细信息,请参阅历史记录
  • Config:
    • 添加 BOOST_NO_DECLTYPE_N3276 配置宏。(请参阅 N3276。)
  • Fusion:
    • 使 single_view 成为随机访问融合序列。
    • fusion::distance 中删除虚假的编译时断言。
    • 更清晰的分割 Fusion 实现。
  • Geometry:
    • 错误修复
      • 健壮性问题,在某些情况下,并集未能输出。已修复。
      • 健壮性问题,在某些情况下,计算出的交点在段外。已修复。
      • 概念问题,笛卡尔交集不理解除了提供的段之外的其他段。已修复。
      • 有时会错过线串中的自相交。已修复。
      • 融合坐标系未正确注册。已修复。
    • 已解决的工单
      • #5726(段相交算法仍然假设 'first'、'second' 成员)
      • #5744(错误的融合适应示例)
      • #5748(需要包含 <boost/foreach.hpp>)
      • #5954 (distance_pythagoras 跳过 sqrt() 步骤)
    • 算法的改进
      • 现在不会自动完成自相交的检查,这可能会严重影响性能。
      • 除此之外,自相交的检查也更快了。
      • 交点现在避免输出重复的点。因此它们输出最小集。
    • 其他算法
      • covered_by:within 定义为“within,不在边界上”。 covered_by 是“within 或在边界上”
    • 其他功能
      • within:现在可以为 within<point, box> 和 within<box, box> 指定策略
      • convert:支持更广泛的转换
      • assign:idem,(当前部分)convert 的同义词(但参数相反)
    • 其他坐标类型
      • 对 Boost.Rational 的基本支持
  • Graph:
    • 修复了错误 #5185#5506#5813#5919
    • Trac 中未包含的各种其他错误修复。
    • 将 reverse_graph 的 edge_descriptor 类型更改为新的数据类型,以避免与底层图的 edge_descriptor 产生歧义。
  • Interprocess:
    • 修复了错误 #2796#4031#4251#4452#4895#5077#5120#5123#5230#5197#5287#5294#5306#5308#5392#5409
    • 添加了自定义 offset_ptr 的支持,并允许创建可以在 32 位和 64 位进程之间共享的自定义托管段。
    • Windows 中的共享内存再次具有文件系统生命周期:内核引导时间和 WMI 用于获取可靠的时间戳导致了很多麻烦。
  • Intrusive:
  • Lexical cast:
    • 添加了可在任何平台上处理 Inf 和 NaN 值的代码 (#5689)。
    • 新的 Quickbook 文档 (#5723)。
    • 对于源类型和目标类型的许多组合,具有更好的性能和更低的内存使用量。
    • C 语言环境的性能更好。
  • Math:
    • 向循环贝塞尔 I、J、K 和 Y 函数添加了新的级数求值方法。还非常注意避免这些函数的虚假上溢和下溢。修复了问题 #5560
    • 添加了 Thomas Mang 提供的使用逆卡方分布进行贝叶斯统计的示例。
    • 添加了使用改进版本的 lexical_cast 的测试,该版本无需使用全局 facet 即可处理 C99 非有限值。
    • 修正了错误的超出范围的均匀分布 CDF 补值 #5733
    • 在 OpenBSD 上启用了 long double 支持(问题 #6014)。
    • 更改了 nextafter 和相关函数的行为方式与​​其他实现相同 - 因此 nextafter(+INF, 0) 是一个有限值(问题 #5832)。
    • 更改了元组包含配置,以修复与 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 声明的内部表的守卫/动作的 "Fsm" 模板参数现在是子状态机,而不是更高层的状态机。在更高层状态机中使用内部行声明的内部转换保持其行为("Fsm" 参数是更高层的状态机)。总结来说,内部转换的 "Fsm" 参数是包含此转换的最接近的状态机。
  • 数值转换:
  • 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:

测试过的编译器

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 管理了此版本。