Boost C++ 库

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

2008 年 5 月审查向导状态报告

新闻

2007 年 12 月 7 日 - Forward 库被接受 - 等待 SVN

12 月 16 日 - 无序容器库被接受 - 已加入 SVN

12 月 21 日 - Factory 库被接受 - 等待 SVN

2008 年 1 月 13 日 - Switch 库被有条件接受 - 等待提交进行小型审查

1 月 18 日 - Singleton 库被拒绝 - 等待重新提交,John Torjo 已自愿管理下次审查

1 月 30 日 - Flyweight 库被接受 - 等待 SVN

2 月 13 日 - Logging 库被拒绝 - 等待重新提交进行新的审查,John Torjo 已经重新提交,Gennadiy Rozental 再次自愿管理审查

2 月 27 日 - 浮点实用程序库被接受 - 等待 SVN

3 月 14 日 - Proto 库被接受 - 作为 Xpressive 的一个组件存在,但尚未作为一个单独的库

4 月 20 日 - Egg 审查完成 - 结果待定

5 月 7 日 - Scope Exit 库被接受 - 等待 SVN

旧问题

2005 年 10 月接受的 binary_int 库尚未提交到 SVN。强烈建议作者联系审查向导

2007 年 4 月接受的 Quantitative Units 库尚未提交到 SVN

2007 年 5 月有条件接受的 Globally Unique Identifier 库尚未提交进行小型审查和完全接受

2007 年 8 月接受的 Time Series 库尚未提交到 SVN

2007 年 2 月接受的 Accumulators 库已加入 SVN

2007 年 10 月接受的 Exception 库已加入 SVN

审查经理尚未提交 Scope Exit 审查报告。John Phillips 担任了替代审查经理并提交了一份报告

对于仍在等待进入 SVN 的库,请准备好并将它们添加到代码库中。开发人员在制作库方面做了很多工作,所以不要错过与他人分享这些工作的机会。另请注意,审查流程页面已更新,其中包含关于库提交者权利和责任的部分。

对于 Scope Exit 审查,我们要公开向 Alexander Nasonov 道歉,因为这份报告迟迟没有提交。审查向导将努力确保这种情况不再发生。

一般公告

一如既往,我们需要经验丰富的审查经理。在过去的几个月中,进行了大量的审查,但是高质量提交的流程也同样庞大,因此,如果可能,请管理审查,否则请确保查看审查时间表并参与。请查看需要经理的库列表并查看其描述。一般来说,审查经理是活跃的 Boost 参与者或库贡献者。如果您能担任其中任何一个的审查经理,请分别发送电子邮件给 Ron Garcia 或 John Phillips,“garcia at cs dot indiana dot edu”和“phillips at mps dot ohio-state dot edu”。

此报告的链接将发布到 www.boost.org。如果您希望我们在发布之前对此报告进行任何修改或补充,请发送电子邮件给 Ron 或 John。

如果您是库作者,并计划在接下来的 3-6 个月内提交库进行审查,请向 Ron 或 John 发送您的库的简短描述,我们会将其添加到下面的“正在构建的库”中。我们知道有很多库即将完成,但我们很难跟踪所有这些库。请随时告知我们您的进度。

审查队列

  • 有限状态机
  • 属性映射(快速通道)
  • 图(快速通道)
  • 词法分析器
  • 线程安全信号
  • Boost.Range(更新)
  • 移位指针
  • 数据流信号
  • 日志记录
  • Futures (Braddock Gaskill)
  • Futures (Anthony Williams)
  • Join (Yigong Liu)
  • Pimpl (Vladimir Batov)

有限状态机

作者 Andrey Semashev
审查经理 Martin Vuille
下载 Boost 沙盒库
描述

Boost.FSM 库是 FSM(代表有限状态机)编程概念的实现。该库的主要目标是

  • 简单性。使用此库创建状态机应该非常简单。
  • 性能。状态机基础结构不应该非常耗时和占用内存,以便适用于更多用例。
  • 可扩展性。开发人员可能希望向现有状态机添加更多状态。开发人员还应该能够以最少的代码修改为机器指定其他转换和事件。

属性映射(快速通道)

作者 Andrew Sutton
审查经理 Jeremy Siek
下载 http://svn.boost.org/svn/boost/sandbox/graph-v2
描述

对属性映射库的一些添加和修改,包括

  • 一个常量值属性映射,对自然无权图很有用。
  • 一个无操作写入属性映射,当您必须提供一个参数,但只是不关心输出时很有用。
  • 有关详细信息,请参阅更改日志

图(快速通道)

作者 Andrew Sutton
审查经理 Jeremy Siek
下载 http://svn.boost.org/svn/boost/sandbox/graph-v2
描述

对图库的一些添加和修改,包括

  • 两个新的图类(无向和有向),旨在使新开发人员更容易使用该库
  • 一套图度量,包括度中心性和紧密中心性、平均测地线距离、偏心率和聚类系数。
  • 一种访问有向图中所有循环的算法(Tiernan 在 1970 年代提出的)。它也适用于无向图,但会报告两次循环(每个方向一次)。
  • 一种访问图中所有派系的算法(Bron&Kerbosch)。适用于有向和无向图。
  • 派生图度量半径和直径(来自偏心率)以及周长和周长(来自 Tiernan)以及派系数(来自 Bron&Kerbosch)。
  • 一个 exterior_property 类,有助于隐藏外部属性的一些怪异之处。
  • 新算法的运行时和编译时测试。
  • 大量的文档
  • 图核,由 David Gleich(斯坦福大学)实现
  • 确定性图生成器 - 能够在顶点集上创建或导出特定类型的图(例如,星图、轮图、棱镜图等)。还可以向其中添加其他几种特定类型,但我还没有时间。

词法分析器

作者 Ben Hanson
审查经理 Eric Neibler
下载 Boost 沙盒库
描述 受“flex”启发的可编程词法分析器生成器。与 flex 一样,它通过使用正则表达式进行编程,并将状态机输出为利用等价类进行压缩的多个 DFA。

线程安全信号

作者 Frank Hess
审查经理 需要志愿者
下载 Boost 沙盒库
描述 Boost.Signals 的线程安全实现,它进行了一些接口更改以适应线程安全,主要是在自动连接管理方面。

Boost.Range(更新)

作者 Neil Groves
审查经理 需要
下载 Boost 沙盒库
描述 范围库的重要更新,包括范围适配器。

移位指针

作者 Phil Bouchard
审查经理 需要
下载 Boost 沙盒库
描述 智能指针通常针对特定资源(内存使用、CPU 周期、用户友好性等)进行优化,具体取决于用户需要充分利用什么。此智能指针的主要目的是同时分配引用计数器(或所有者)和对象本身,以便简化动态内存管理,从而加快内存映射并降低成本。

数据流信号

作者 Stjepan Rajko
审查经理 需要
下载 http://dancinghacker.com/code/dataflow/
描述 Dataflow 是一个用于数据流编程的通用库。数据流程序通常可以表示为一个图,其中顶点表示处理数据的组件,边表示组件之间的数据流。因此,可以通过更改组件和/或连接轻松地重新配置数据流程序。

日志记录

作者 John Torjo
审查经理 Gennadiy Rozental
下载 http://torjo.com/log2/
描述 如果使用得当,日志记录是一个非常强大的工具。除了帮助调试/测试之外,它还可以向您展示您的应用程序是如何使用的。Boost 日志记录库正好可以做到这一点,它支持许多场景,从非常简单的(将所有内容转储到一个目标)到非常复杂的(多个日志,一些启用/一些未启用,级别等)。它具有一个非常简单灵活的接口,可以高效地过滤消息,具有线程安全性,格式化程序和目标,可以轻松操作日志,根据您的应用程序的需求找到最佳的记录器/过滤器类,您可以定义自己的宏等等!

Futures

作者 Braddock Gaskill
审查经理 需要
下载 http://braddock.com/~braddock/future/
描述 boost.future 库的目标是提供一个明确的 future 实现,它具有众多实现、提案和学术论文中最好的特性,希望避免在相关概念(协程、活动对象、asio 等)的库中出现多个不兼容的 future 实现。该库希望探索最佳 future 概念的组合实现。

Futures

作者 Anthony Williams
审查经理 需要
下载 http://www.justsoftwaresolutions.co.uk/files/n2561_future.hpp(代码) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2561.html(描述)
描述

本文提出了一种返回缓冲区,它在一个(子)线程中获取一个值(或异常),并在另一个(控制)线程中提供该值。此缓冲区本质上提供两个接口

  • 一个用于赋值的接口,如类 promise,以及
  • 一个用于等待、查询和从缓冲区中检索值(或异常)的接口,如类 unique_future 和 shared_future。unique_future 提供移动语义,其中值(或异常)只能检索一次,而 shared_future 提供复制语义,其中值可以任意多次检索。

使用 promise 和 future 的典型过程如下所示

  • 控制线程创建一个 promise,
  • 控制线程从 promise 中获取关联的 future,
  • 控制线程启动子线程,
  • 子线程调用实际函数并将返回值赋给 promise,
  • 控制线程等待 future 准备好,
  • 控制线程从 future 中检索值。

还提出了一个 packaged_task,它包装一个可调用对象并提供另一个可以在其自身线程中启动的可调用对象,并将返回值(或异常)赋给可以通过 future 类之一访问的返回缓冲区。

使用 packaged_task 的典型过程如下所示

  • 控制线程使用可调用对象创建一个 packaged_task,
  • 控制线程从 packaged_task 获取关联的 future,
  • 控制线程启动子线程,该子线程调用 packaged_task,
  • packaged_task 调用可调用函数并赋值返回值,
  • 控制线程等待 future 准备好,
  • 控制线程从 future 中检索值。

请注意,我们处于一种不寻常的位置,队列中同时有两个目标相同的库。审查向导希望讨论进行这两次审查的最佳方式,以便为 Boost 做出最好的补充。

Join

作者 Yigong Liu (刘奕功)
审查经理 需要
下载 http://channel.sourceforge.net/
描述 Join 是一个基于连接演算的异步、基于消息的 C++ 并发库。它既适用于多线程应用程序,也适用于异步、基于事件的应用程序的编排。它遵循 Comega 的设计和实现,并使用 Boost 设施构建。它提供了一个高级并发 API,其中包含异步方法、同步方法和和弦(“连接模式”),用于定义同步、异步和并发。

指针指向实现 (Pimpl)

作者 Vladimir Batov
审查经理 需要
下载 Boost 沙盒库 http://www.ddj.com/cpp/205918714 (文档)
描述 Pimpl 惯用法是一种简单而强大的技术,通过接口和实现的分离以及实现隐藏来最大程度地减少耦合。该库为 Pimpl 惯用法提供了一种便捷、灵活且通用的部署技术。它看似完整且应用广泛,但却简洁、易用。

开发中的库

如果您目前正在开发并打算提交审查的库,请告知我们。