概述:Abseil已在Google历经十多年的开发,它的目的是为Google编程人员在各种项目上的工作需求提供支持,这些项目包括Protocol Buffers、gRPC和TensorFlow等。
Google公开了其项目内部使用的一系列C++库,随后还会公开其Python库。
Abseil已在Google历经十多年的开发,它的目的是为Google编程人员在各种项目上的工作需求提供支持,这些项目包括Protocol Buffers、gRPC和TensorFlow等。Google评价Abseil为:
- 它是从Google内部代码块中抽取出来的一系列最基础的软件库。作为基本的组成部分,这些软件库支撑了几乎全部Google在运行的项目。以前这些API是零零散散地嵌入在Google的大部分开源项目中,现在我们将它们规整在一起,形成这样一个全面的项目。
- Abseil是Google代码库的最基本构建模块,其代码经过了生产环节测试,此后还会继续得到完全的维护。
最初,Abseil提供的抽象并非C++ 14或C++ 17的组成部分,但最终它们已被添加到C++标准中。例如,Google提供一个称为StringPiece的类型,随后C++ 17也添加了一个称为std::string_view的相近类型。为了与新的C++ 17类型具有一致的API,Google将StringPiece重构为absl::string_view。从底层机制上看,如果17以前的版本,那么string_view默认为Google的实现。
使用Abseil的优点在于可以访问一些目前依然尚未添加到标准中的C++特性,并且一旦这些特性被添加到C++标准中,Google保证会重构这些特性为默认使用标准实现。Google鼓励开发人员使用Abseil,并提及已有超过两亿五千万行的C++代码使用它,并且几乎所有从头开始构建的项目都使用了它。这意味着,Abseil已被Google广为使用,并出于与项目需求同步的考虑而得以频繁维护。
Abseil中包括如下的库:
Abseil的代码采用Apache许可,已发布在GitHub上。其Python版本的软件库将随后发布。
来源:https://www.evget.com/article/2017/10/9/26962.html
最近 Google 开源了其内部多年使用的 C++ 代码库 Abseil 作为 C++ 标准库的补充,并会对其进行持续更新,本文对其进行简要介绍。
一句话概括,这个库的特点是用 C++ 11 的代码实现了许多 C++ 14 和 C++ 17 的特性,所以你的编译器也要支持 C++ 11(gcc 4.8+/clang 3.3+,不同平台略有差异)。
需要注意一点的是 Google 内部代码是不支持异常(Excepton)的,C++ 异常的优劣之处有许多讨论(知乎上的讨论),不用异常可以在一定程度上利于编译器优化,这里主要可能还是历史支持原因。如果你的项目是支持异常的建议要好好测试一下,具体参考下 abseil / Abseil Fundamentals 。
Abseil 简要组成部分如下:
- base Abseil Fundamentals :包含初始化代码和其它部分依赖的代码。除了 C++ 标准库外不依赖外部代码
- algorithm :C++ <algorithm> 库的增强
- container :STL 风格容器
- debugging :内存泄露检查
- memory :智能指针和内存管理
- meta :用 C++11 兼容代码支持 C++14 和 C++17 版本的 <type_traits> 库
- numeric :支持 C++11 兼容的 128 位整数
- strings :string 相关函数增强
- synchronization :同步原语和抽象支持
- time :时间方面的计算
- types :非容器类型的工具类型
一些使用要点:
- 不要使用编译版本的库,不保证 ABI 二进制级别的兼容
- 不会频繁更新 API 接口,如果更新会提供工具,请使用工具或指导进行更新(毕竟谷歌内部的代码库有超过250M行,不可能全部手动更新)
- 共享库的 dynamic unloading 可能不被支持,同时不是所有代码都支持动态载入
- 尽量使用命名空间前缀 absl
- 支持基本的异常,但自定义的异常可能不被完整支持
- 至少五年的支持(哈哈,想起了 google reader)
- 需要使用 Bazel (类似于CMake,最早是用来支持 TensorFlow 开发的工具)进行编译,这个可能会影响现有代码的构建方式
另外 Google 还开源了一份 python 代码库 abseil-py 。
更多内容参见如下链接:
[1] 选择 abseil 的原因
[2] 兼容性指导
[3] abseil / Design Notes :设计理念,现在还只有两篇文章,后续应该会更新
[4] https://abseil.io/tips/ : 这里会每周介绍一些谷歌内容的 C++ tips
来源:https://zhuanlan.zhihu.com/p/29940200