Boost C++ 库

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

2009 年 12 月评审向导状态报告

新闻

多边形库已接受

Boost 1.40 发布
新库:无。修订库:Accumulators,Asio,Circular Buffer,Filesystem,Foreach,Function,Fusion,Hash,Interprocess,Intrusive,MPL,Program Options,Proto,Python,Serialization,Unordered,Xpressive

几何库已接受

Boost 1.41 发布
新库:Property Tree。修订库:DateTime,Filesystem,Iostreams,Math,Multi-index Containers,Proto,Python,Regex,Spirit,System,Thread,Unordered,Utility,Wave,Xpressive

MSM 库正在评审中

约束值评审 - 评审结果待定

较早的问题

于 2007 年 8 月接受的时间序列库尚未提交到 SVN。

浮点实用程序库尚未提交到 SVN。它计划与 Boost.Math 库集成。

于 2008 年 1 月被临时接受的 Switch 库尚未提交进行迷你评审和完全接受。

于 2008 年 9 月被临时接受的 Phoenix 库尚未提交进行迷你评审和完全接受。

对于仍在等待进入 SVN 的库,请准备好它们并放入存储库中。开发者们为制作这些库付出了很多努力,所以不要错过与他人分享这些工作的机会。

一般公告

和往常一样,我们需要有经验的评审管理员。评审队列正在大幅增长,但我们只有很少的志愿者。因此,如果可能,请管理评审,如果不能,请务必关注评审计划并参与其中。请查看需要管理员的库列表,并查看它们的描述。一般来说,评审管理员是活跃的 boost 参与者或库贡献者。如果您可以担任其中任何一个库的评审管理员,请分别发送电子邮件给 Ron Garcia 或 John Phillips,他们的邮箱地址分别是 “garcia at osl dot iu dot edu” 和 “phillips at mps dot ohio-state dot edu”。

我们还面临评审人员短缺的问题。虽然我们都理解时间压力和完成有偿工作的需求,但 Boost 的优势基于您提交的详细且知情的评审。最近的一项努力是试图确保至少有五个人承诺在评审期开始前提交评审。考虑为此志愿服务,甚至尽早花时间创建评审。没有规定说您只能在评审期间进行评审工作。

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

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

包含的评审队列不是经典的队列。它更像是一个等待评审的库的无序列表。因此,一旦开发人员准备就绪,并且评审管理员与向导和开发人员一起安排评审,队列中的任何库都可以被评审。它不是 FIFO。

评审队列

  • 词法分析器
  • 移位指针
  • 日志记录
  • 日志
  • 连接
  • Pimpl
  • 任务
  • 字节序
  • 转换
  • 排序
  • GIL.IO
  • AutoBuffer
  • 字符串转换
  • 移动
  • 容器
  • 区间容器
  • 类型特征扩展
  • 线程间
  • 位域
  • 无锁

词法分析器

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

移位指针

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

日志记录

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

日志

作者Andrey Semashev
评审管理员需要
下载Boost Vault
描述该库旨在帮助向应用程序添加日志记录功能。它为许多广泛使用的功能提供了开箱即用的支持,例如基于属性的格式化和过滤,将日志发送到系统日志服务器或 Windows 事件日志,或者只是将日志存储到文件中。它还为从设置文件初始化库提供了基本支持。该库还可以用于更广泛的任务,并实现收集和处理统计信息或通知用户有关应用程序事件。

连接

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

Pimpl

作者Vladimir Batov
评审管理员需要
下载
描述Pimpl 惯用法是一种简单但稳健的技术,可通过分离接口和实现,然后隐藏实现来最大程度地减少耦合。该库为 Pimpl 惯用法提供了一种方便、灵活且通用的部署技术。它看似完整且广泛适用,但同时又非常小巧、简单且易于使用。

任务

作者

Oliver Kowalke

评审管理员

需要

下载

Boost Vault

描述

以前称为线程池。该库提供: * 线程创建策略

  • 确定工作线程的管理
  • 池中固定的一组线程
  • 按需创建工作线程(取决于上下文)
  • 让工作线程在特定空闲时间后超时
  • 通道策略:管理对排队任务的访问
    • 具有高水位线和低水位线的有界通道,用于排队任务
    • 具有无限数量排队任务的无界通道
    • 生产者和消费者线程之间的交会同步移交
  • 排队策略:确定如何从通道中删除任务
    • FIFO
    • LIFO
    • 优先级队列(分配给任务的属性)
    • 智能插入和提取(例如,用最新的任务删除具有特定属性的最旧的任务)
  • 任务可以链接,并且还支持任务的延迟提交(感谢 Braddocks 未来库)。

  • 从提交函数返回一个任务对象。如果任务是协作的(意味着它的代码中有一些中断点 ->this_thread::interruption_point() ).

字节序

作者Beman Dawes
评审管理员需要
下载http://mysite.verizon.net/beman/endian-0.10.zip
描述

转换

作者

Vicente Botet

评审管理员

需要

下载

Boost Vault

描述

不相关类型之间的通用显式转换。

Boost.Conversion 提供
  • 一个通用的convert_to函数,用户可以对其进行专门化,以在不相关类型之间进行显式转换。
  • 一个通用的assign_to函数,用户可以对其进行专门化,以在不相关类型之间进行显式赋值。
  • 之间的转换std::complex显式可转换类型。
  • 之间的转换std::pair显式可转换类型。
  • 之间的转换boost::optional显式可转换类型。
  • 之间的转换boost::rational显式可转换类型。
  • 之间的转换boost::interval显式可转换类型。
  • 之间的转换boost::chrono::time_pointboost::ptime.
  • 之间的转换boost::chrono::durationboost::time_duration.

排序

作者

Steven Ross

评审管理员

需要

下载

Boost Vault

描述

一组 3 个模板化的混合基数/基于比较的排序算法,它们提供了比 std::sort 更优的最好情况和平均情况性能:integer_sort,它对支持右移(默认为 >>)和比较(默认为 <)运算符的固定大小数据类型进行排序。float_sort,它通过安全地将标准浮点数转换为整数来对它们进行排序。string_sort,它对可变长度的数据类型进行排序,并针对 8 位字符字符串进行了优化。

所有 3 个算法的运行时均为 O(n(k/s + s)),其中 k 是数据类型中的位数,s 是一个常数,并且内存开销有限(对于实际输入,以 kB 为单位)。在测试中,根据处理器、编译器优化和数据分布,integer_sort 比 std::sort 快 35% 到 8 倍。在 x86 处理器上,float_sort 大约比 std::sort 快 7 倍。string_sort 大约比 std::sort 快 2 倍。

GIL.IO

作者Christian Henning
评审管理员需要
下载GIL Google 代码库
描述boost::gil 的 I/O 扩展,允许读取和写入各种图像格式(tiff、jpeg、png 等)。此评审还将包括工具箱扩展,该扩展向 gil 添加一些常用功能,例如新的颜色空间、算法等。

AutoBuffer

作者Thorsten Ottosen
评审管理员需要
下载这里
描述Boost.AutoBuffer 提供了一个容器,用于高效的动态本地缓冲区。此外,该容器可以用作 std::vector 的替代品,提供更大的灵活性,有时还提供更好的性能。

字符串转换

作者

Vladimir Batov

评审管理员

需要

下载

Boost Vault

描述

该库在字符串到类型和类型到字符串的转换领域采用 boost::lexical_cast 的方法,建立在过去 boost::lexical_cast 的经验之上,并将该转换功能进一步推进,以额外提供:

  • 抛出和非抛出转换失败行为;
  • 当转换失败时,要返回的默认值的支持;
  • 两种类型的转换失败检查 - 基本检查和更好/更安全的检查;
  • 基于标准 I/O 流和标准(或用户定义的)基于 I/O 流的操控器(如 std::hex、std::scientific 等)的格式化支持;
  • 区域设置支持;
  • 支持 boost::range 兼容的基于 char 和 wchar_t 的字符串容器;
  • 目标类型没有默认可构造性要求;
  • 统一整合任何类型到类型转换的一致框架。

它是一个重要的工具,广泛应用于需要大量配置文件或需要处理/准备大量数据的应用,例如 XML 等。

移动

作者Ion Gaztanaga
评审管理员需要
下载http://svn.boost.org/svn/boost/sandbox/move/ 和在线文档:http://svn.boost.org/svn/boost/sandbox/move/libs/move/doc/html/index.html
描述在 C++0x 中,移动语义是通过引入右值引用来实现的。它们允许我们实现 `move()` 操作,而无需冗余代码或运行时开销。Boost.Move 是一个库,它提供的工具不仅可以在支持右值引用的编译器中实现移动语义,也可以在符合 C++03 标准的编译器中实现。

容器

作者Ion Gaztanaga
评审管理员需要
下载http://www.boostpro.com/vault/index.php?action=downloadfile&filename=boost.move.container.zip&directory=Containers&
文档http://svn.boost.org/svn/boost/sandbox/move/libs/container/doc/html/index.html
描述Boost.Container 库实现了几个知名的容器,包括 STL 容器。该库的目标是为不具备标准容器功能的或为符合 C++03 标准的编译器提供最新的标准草案功能。

区间容器库

作者

Joachim Faulhaber

下载

http://www.boostpro.com/vault/index.php?action=downloadfile&filename=itl_3_2_0.zip&directory=Containers

文档

http://herold-faulhaber.de/boost_itl/doc/libs/itl/doc/html/index.html

评审管理员

需要

描述

区间模板库 (Itl) 提供了区间和两种区间容器:Interval_sets 和 interval_maps。Interval_sets 和 maps 可以像元素集合或映射一样使用。然而,当元素以连续块(区间)出现时,它们在空间和时间上效率更高。这在许多问题领域中很常见,尤其是在处理与日期和时间相关的问题的领域中。

区间容器允许与 interval_sets 求交集,以便进行分割操作。例如,您可能希望将一个区间容器与一个月份网格求交集,然后遍历这些月份。

最后,如果添加的区间与 interval_map 中存储的区间重叠,interval_maps 可以提供关联值的聚合。此功能称为重叠聚合。下面通过示例说明:

typedef set<string> guests;
interval_map<time, guests> party;
guests mary; mary.insert("Mary");
guests harry; harry.insert("Harry");
party += make_pair(interval<time>::rightopen(20:00, 22:00),mary);
party += make_pair(interval<time>::rightopen_(21:00, 23:00),harry);
// party now contains
[20:00, 21:00)->{"Mary"}
[21:00, 22:00)->{"Harry","Mary"} //guest sets aggregated on overlap
[22:00, 23:00)->{"Harry"}

从示例中可以看出,interval_map 既有分解行为(在时间维度上),也有累积行为(在关联值上)。

类型特征扩展

作者

Frederic Bron

评审管理员

需要

下载

http://svn.boost.org/trac/boost/browser/sandbox/type_traits

描述

添加此功能的目的是添加类型特征,以检测类型 T 和 U 是否在 <、<=、>、>=、== 或 != 运算符的意义上可比较,即当 t 的类型为 T 而 u 的类型为 U 时,t<u 是否有意义(<=、>、>=、==、!= 同理)。

添加了以下特征:

is_equal_to_comparable<T,U> is_greater_comparable<T,U> is_greater_equal_comparable<T,U> is_less_comparable<T,U> is_less_equal_comparable<T,U> is_not_equal_to_comparable<T,U>

名称基于标准模板库的相应名称(<functional> 头文件,标准第 20.3.3 节)。

代码具有以下属性: * 如果 t<u 有意义并且返回一个可转换为 bool 的值,则返回 true。 * 如果 t<u 没有意义,则返回 false。 * 如果 t<u 有意义但返回 void,则会发生编译时错误(一种避免编译时错误的方法是使用运算符技巧返回 true,但这意义不大,因为返回 false 会更好)。

InterThreads

作者

Vicente J. Botet Escriba

评审管理员

需要

下载

Boost Vault

描述
Boost.InterThreads 扩展了 Boost.Threads,添加了一些功能:
  • 线程装饰器:thread_decorator 允许定义设置/清理函数,这些函数只会被线程调用一次:在线程函数执行之前设置,在线程退出时清理。
  • 线程特定的共享指针:这是 thread_specific_ptr 的扩展,可以从其他线程访问此线程特定上下文。由于它是共享的,因此存储的指针是 shared_ptr 而不是原始指针。
  • 线程保持活动机制:此机制允许检测未通过定期调用 keep_alive_point 来证明其处于活动状态的线程。当线程被声明为死亡时,将调用用户提供的函数,默认情况下会中止程序。
  • 线程元组:定义一个线程组,其中线程数量是静态已知的,并且线程是在构造时创建的。
  • set_once:一个同步器,允许只设置一次变量,并向等待该变量值的任何一方发出通知。
  • thread_tuple_once:boost::thread_tuple 的扩展,允许使用 set_once 同步器来连接第一个完成的线程。
  • thread_group_once:boost::thread_group 的扩展,允许使用 set_once 同步器来连接第一个完成的线程。

(thread_decorator 和 thread_specific_shared_ptr)基于 Roland Schwarz 编写的原始 threadalert 实现。

Boost.InterThreads 扩展了 Boost.Threads,添加了线程设置/清理装饰器、线程特定的共享指针、线程保持活动机制和线程元组。

位域

作者

Vicente J. Botet Escriba

评审管理员

需要

下载

http://svn.boost.org/svn/boost/sandbox/bitfield,文档位于 http://svn.boost.org/svn/boost/sandbox/bitfield/libs/integer/doc/index.html

描述
可移植的位域特征。Boost.Bitfield 由以下部分组成:
  • 一个通用的位域特征类,提供通用的 getter 和 setter 方法。
  • 一个 BOOST_BITFIELD_DCL 宏,使位域特征和位域 getter 和 setter 函数的定义更加容易。

无锁

作者

Tim Blechmann

评审管理员

需要

下载

http://www.boostpro.com/vault/index.php?action=downloadfile&amp;filename=boost_lockfree-241109.zip&amp;directory=Concurrent%20Programming&amp;

文档

http://tim.klingt.org/boost_lockfree/

描述

boost.lockfree 提供了无锁数据结构的实现。无锁数据结构可以被多个线程访问,而无需使用阻塞同步原语(如锁)。无锁数据结构可以用于实时系统,在实时系统中,阻塞算法可能会导致最坏情况执行时间过长,从而避免优先级反转或提高多处理器机器的可伸缩性。

boost.lockfree 提供:
  • boost::lockfree::fifo,一个无锁 FIFO 队列
  • boost::lockfree::stack,一个无锁堆栈
代码可以从我的个人 git 仓库获取:

正在开发的库

持久化

作者

Tim Blechmann

描述

一个基于 Boost.Serialization 的库,它提供对持久对象的访问,其接口尽可能接近访问内存中的常规对象。

  • 对象所有权概念,等同于 Boost.SmartPtr 使用的概念:shared、weak、scoped (和 raw)
  • ACID 事务,包括崩溃后的恢复和“可序列化”隔离级别
  • 并发事务、嵌套事务、分布式事务
  • 并发访问容器:STL 容器,其节点被实现为持久对象,可以在不将容器移动到内存的情况下访问。只有当 2 个线程同时更改同一个容器节点时,才会重复修改容器的并发事务。
  • 可以通过其他事务资源进行扩展,例如基于即将推出的 Boost.Rdb 库的对象关系映射器。可以将多个资源组合到一个数据库中,它们之间可以进行分布式事务。

请告知我们您目前正在开发并打算提交审核的任何库。

请参阅 http://svn.boost.org/trac/boost/wiki/LibrariesUnderConstruction 以获取当前正在开发的库的列表。