Folly:Facebook 开源库
folly
?
什么是 Folly 是一个以实用性和效率为宗旨设计的 C++11 组件库。它包含 Facebook 广泛使用的各种核心库组件。特别是,它通常是 Facebook 其他开源 C++ 工作的依赖项,也是那些项目可以共享代码的地方。
它补充了(而不是与)如 Boost 和当然 std
这样的产品。事实上,我们只有在我们需要的东西既不可用,或者不符合所需性能配置时才开始定义自己的组件。我们努力从 folly 中删除当 std
或 Boost 弃用时的情况。
性能问题贯穿 Folly 的大部分内容,有时会导致设计比其他情况更为独特(例如,请参阅 PackedSyncPtr.h
、SmallLocks.h
)。在大规模下的良好性能是 Folly 中的一个统一主题。
逻辑设计
Folly 是一组相对独立的组件,其中一些像几个符号一样简单。没有任何内部依赖项的限制,这意味着给定的 folly 模块可以使用任何其他 folly 组件。
所有符号都在顶级命名空间 folly
中定义,当然不包括宏。宏名称都是大写的,应该以 FOLLY_
前缀。命名空间 folly
定义了诸如 internal
或 detail
这样的其他内部命名空间。用户代码不应依赖于这些命名空间中的符号。
Folly 还有一个名为 experimental
的目录。这个标识主要表明我们认为 API 可能会随着时间而大幅改变。通常情况下,这段代码仍在大量使用,并且经过了良好的测试。
物理设计
Folly 最高级别使用的是 Boost 和其他框架一样经典的“滴答声”模式 folly/folly
。第一个目录作为库的安装根目录(可能带有类似 folly-1.0/
的版本号),第二个目录用于包含文件时区分库,例如 #include <folly/FBString.h>
。
目录结构是扁平的(模仿命名空间结构),即我们没有复杂的目录层次结构(未来版本可能有所改变)。experimental
子目录包含用于 Folly 内部以及可能在 Facebook 内部使用,但尚不稳定供客户端使用的文件。您的代码不应该使用 folly/experimental
目录下的文件,以免在更新 Folly 后出现错误。
folly/folly/test
子目录包含了所有组件的 unittests,通常每个 ComponentXyz.*
对应 ComponentXyzTest.cpp
。folly/folly/docs
目录包含文档。
其中有什么内容?
由于 Folly 的结构相当扁平,查看其中的内容最佳方法是查看顶级 folly/
目录下的头文件。您还可以检查 docs
文件夹中的文档,从 概述 开始。
Folly 已发布在 Github 上,网址为 https://github.com/facebook/folly
构建说明
依赖项
folly 需要gcc 4.8+ 以及支持 C++11 的 boost 版本。
请从 https://googletest.googlecode.com/files/gtest-1.7.0.zip 下载 googletest,并将其解压到 folly/test 子目录下。
Ubuntu 12.04
这个版本比较老,需要升级很多。然而,由于Travis CI运行在12.04上,因此提供了folly/build/deps_ubuntu_12.04.sh
,用于升级所有必需的软件包。
Ubuntu 13.10
需要以下软件包(您可以直接复制下面的apt-get命令)
sudo apt-get install \
g++ \
automake \
autoconf \
autoconf-archive \
libtool \
libboost-all-dev \
libevent-dev \
libdouble-conversion-dev \
libgoogle-glog-dev \
libgflags-dev \
liblz4-dev \
liblzma-dev \
libsnappy-dev \
make \
zlib1g-dev \
binutils-dev \
libjemalloc-dev \
libssl-dev
如果需要高级调试功能
sudo apt-get install \
libunwind8-dev \
libelf-dev \
libdwarf-dev
Ubuntu 14.04 LTS
如上所述,对于Ubuntu 13.10,需要上述软件包以及
sudo apt-get install \
libiberty-dev
上述软件包对于Ubuntu 13.10和Ubuntu 14.04就足够了。
在folly目录中运行
autoreconf -ivf
./configure
make
make check
sudo make install
OS X (Homebrew)
folly作为一个Formula可用,可以通过brew install folly
构建版本。
您还可以使用folly/build/bootstrap-osx-homebrew.sh
构建代码的master
分支。
cd folly
./build/bootstrap-osx-homebrew.sh
make
make check
OS X (MacPorts)
使用MacPorts安装必需的软件包
sudo port install \
autoconf \
automake \
boost \
gflags \
git \
google-glog \
libevent \
libtool \
lz4 \
lzma \
scons \
snappy \
zlib
下载并安装double-conversion
git clone https://github.com/google/double-conversion.git
cd double-conversion
cmake -DBUILD_SHARED_LIBS=ON .
make
sudo make install
下载并使用以下参数安装folly
git clone https://github.com/facebook/folly.git
cd folly/folly
autoreconf -ivf
./configure CPPFLAGS="-I/opt/local/include" LDFLAGS="-L/opt/local/lib"
make
sudo make install
其他Linux发行版
-
double-conversion (https://github.com/google/double-conversion)
下载并构建 double-conversion。您可能需要告诉 configure 如何找到它。
在 double-conversion 目录下执行
ln -s src double-conversion
在 folly 目录下执行
./configure LDFLAGS=-L$DOUBLE_CONVERSION_HOME/ CPPFLAGS=-I$DOUBLE_CONVERSION_HOME/
在 folly 目录下执行
LD_LIBRARY_PATH=$DOUBLE_CONVERSION_HOME/ make
-
额外的平台特定依赖项
Fedora 21 64位
- gcc
- gcc-c++
- autoconf
- autoconf-archive
- automake
- boost-devel
- libtool
- lz4-devel
- lzma-devel
- snappy-devel
- zlib-devel
- glog-devel
- gflags-devel
- scons
- double-conversion-devel
- openssl-devel
- libevent-devel
可选
- libdwarf-dev
- libelf-dev
- libunwind8-dev