Boost C++ 库

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

1.35.0 版本

1.35.0 版本

2008 年 3 月 29 日 12:00 GMT

文档

下载
平台文件
unixboost_1_35_0.tar.bz2
boost_1_35_0.tar.gz
windowsboost_1_35_0.7z
boost_1_35_0.zip

新库

  • Asio: 来自 Chris Kohlhoff 的可移植网络库,包括套接字、计时器、主机名解析和套接字 iostreams。
  • Bimap: Boost.Bimap 是一个用于 C++ 的双向映射库。使用 Boost.Bimap,您可以创建两种类型都可以用作键的关联容器,来自 Matias Capeletto。
  • 循环缓冲区: 符合 STL 的容器,也称为环形或循环缓冲区,来自 Jan Gaspar。
  • 函数类型: Boost.FunctionTypes 提供了对函数、函数指针、函数引用和成员指针类型进行分类、分解和合成的功能。来自 Tobias Schwinger。
  • Fusion: 用于处理元组的库,包括各种容器、算法等。来自 Joel de Guzman、Dan Marsden 和 Tobias Schwinger。
  • GIL: 通用图像库,来自 Lubomir Bourdev 和 Hailin Jin。
  • 进程间: 共享内存、内存映射文件、进程共享互斥锁、条件变量、容器和分配器,来自 Ion Gaztañaga。
  • 侵入式: 侵入式容器和算法,来自 Ion Gaztañaga。
  • 数学/特殊函数: 来自 John Maddock、Paul Bristow、Hubert Holin 和 Xiaogang Zhang 的大量数学特殊函数。
  • 数学/统计分布: 来自 John Maddock 和 Paul Bristow 的大量单变量统计分布和对其进行操作的函数。
  • MPI: 消息传递接口库,用于分布式内存并行应用程序编程,来自 Douglas Gregor 和 Matthias Troyer。
  • 系统: 操作系统支持,包括将成为 C++0x 标准库一部分的诊断支持,来自 Beman Dawes。

更新的库

  • : 通用图组件和算法。亮点
    • kolmogorov_max_flow,来自 Stephan Diederich,作为 2006 年谷歌编程之夏的一部分。
    • read_dimacs_max_flowwrite_dimacs_max_flow 用于最大流问题,来自 Stephan Diederich。
    • read_graphmlwrite_graphml 用于 GraphML 输入/输出,来自 Tiago de Paula Peixoto。
    • minimum_cycle_ratiomaximum_cycle_ratio,来自 Dmitry Bufistov 和 Andrey Parfenov。
    • boyer_myrvold_planarity_test,以及一套用于平面图的算法,来自 Aaron Windsor。
    • LEDA 适配器改进,来自 Jens Müller。
  • Hash: TR1 哈希函数对象,来自 Daniel James。亮点
    • 支持 long longstd::complex
    • 改进了浮点数哈希算法。
    • 一些错误和警告修复。
  • Iostreams: 用于定义流、流缓冲区和 i/o 过滤器的框架,来自 Jonathan Turkanis。亮点
    • 澄清了 close() 的语义。这修复了一些错误,但会破坏一些现有代码。有关详细信息,请参阅发行说明
    • 许多其他错误修复和优化。
  • 多维数组:
    • 向 MultiArray 概念添加了 “维度” 编译时常量。
    • 为了更好地控制错误情况,C++ assert 的使用已替换为 BOOST_ASSERT。
    • 修复了同时调整大小和重新索引的错误。
  • 多索引容器:
  • 序列化: Boost.Serialization 已更新,针对密集数组进行了优化。
  • 线程:
    • 线程库已更新,以更符合 C++0x 工作草案。
    • boost::thread 的实例和各种锁定类型现在是可移动的。
    • 线程可以在中断点被中断。
    • 现在可以将条件变量与任何实现 Lockable 概念的类型一起使用,通过使用 boost::condition_variable_anyboost::conditionboost::condition_variable_any 的 typedef,为了向后兼容而提供)。boost::condition_variable 作为一种优化提供,并且仅适用于 boost::unique_lock<boost::mutex> (boost::mutex::scoped_lock)。
    • 线程 ID 与 boost::thread 分开,因此线程可以获取自己的 ID(使用 boost::this_thread::get_id()),并且 ID 可以用作关联容器中的键,因为它们具有完整的比较运算符集。
    • 超时现在使用 Boost DateTime 库实现,通过一个 typedef boost::system_time 用于绝对超时,并且在许多情况下支持相对超时。boost::xtime 仅为向后兼容而支持。
    • 锁被实现为可公开访问的模板 boost::lock_guardboost::unique_lockboost::shared_lockboost::upgrade_lock,它们是在互斥锁类型上模板化的。Lockable 概念已扩展到包括公开可用的 lock()unlock() 成员函数,这些函数由锁定类型使用。
    • boost::try_mutex 已被删除,其功能被并入 boost::mutexboost::try_mutex 被保留为 typedef,但不再是一个单独的类。
    • boost::recursive_try_mutex 已被删除,其功能被并入 boost::recursive_mutexboost::recursive_try_mutex 被保留为 typedef,但不再是一个单独的类。
    • boost::detail::thread::lock_ops 已被删除。依赖于 lock_ops 实现细节的代码将不再有效,因为它已被删除,因为现在互斥锁类型具有公开的 lock()unlock() 成员函数,不再需要该实现细节。
    • 不再提供带有第二个 bool 类型参数的 scoped_lock 构造函数。在以前的 boost 版本中,boost::mutex::scoped_lock some_lock(some_mutex,false); 可用于创建一个与互斥锁关联但不锁定它的锁对象。现在,此功能已被以 boost::defer_lock_type 作为第二个参数的构造函数替换:boost::mutex::scoped_lock some_lock(some_mutex,boost::defer_lock);
    • 损坏的 boost::read_write_mutex 已被 boost::shared_mutex 替换。
  • Wave: 来自 Hartmut Kaiser 的符合标准的 C99/C++ 预处理器功能的实现,封装在一个易于使用的迭代器接口后面。亮点
    • 添加了在发生错误后继续预处理的可能性。
    • 向 wave::context 对象添加了宏自检 API。
    • 为库添加了线程支持。
    • 将整体性能提高了高达 30%。
    • 更改并统一了预处理器钩子接口(这是一个接口破坏性更改!),添加了几个新的预处理器钩子函数。
    • 添加了序列化支持。
    • 添加了新示例(例如:Hannibal - Danny Havenith 的部分 C++ 解析器)。
    • 添加了基于 Ben Hansons Lexertl 库的新词法分析器。
    • 修复了大量其他错误和问题。
  • Xpressive: 来自 Eric Niebler 的正则表达式库,可以使用字符串或表达式模板编写,并能以上下文无关文法的强大功能递归地相互引用和自身引用。亮点:
    • 为静态正则表达式添加了语义动作。语义动作是在正则表达式的某部分匹配时执行的代码。
    • 为静态正则表达式添加了自定义断言。自定义断言是一个布尔谓词,可以参与正则表达式的匹配。
    • 为将静态或动态正则表达式嵌入到动态正则表达式中添加了命名正则表达式。这可以用于创建动态正则表达式语法。
    • 为动态正则表达式添加了命名捕获,类似于 Perl。

支持的编译器

此版本中正式支持以下编译器:

  • HP aC++ A.06.14 on HP-UX
  • Darwin GCC 4.01。
  • GNU GCC 最多到 4.2.1 版本,在 Linux 和 Solaris 上。
  • Intel C++ 9.1 on Linux。
  • Intel C++ 10.1 on Windows。
  • Microsoft Visual C++ 7.1 和 8 on Windows (Visual Studio .NET 2003 和 2005)。

此外,以下编译器应该也得到了很好的支持,但它们不是 1.35 版本的发布标准的一部分:

  • IBM Visual Age 9.0 on AIX。
  • Intel C++ 10 及更高版本 on Linux。
  • GNU GCC 4.3 及更高版本 on Linux 和 Solaris。
  • Microsoft Visual C++ 9 (Visual Studio .NET 2008)。

鸣谢

Beman Dawes 管理了此版本。