folly-ios 2016.10.31.00

folly-ios 2016.10.31.00

Wade0317 维护。



 
依赖项
boost-for-react-native>= 0
DoubleConversion>= 0
glog>= 0
 

folly-ios 2016.10.31.00

  • 作者
  • wade0317

Folly:Facebook 开源库

什么是 folly

Folly 是一个以实用性和效率为宗旨设计的 C++11 组件库。它包含 Facebook 广泛使用的各种核心库组件。特别是,它通常是 Facebook 其他开源 C++ 工作的依赖项,也是那些项目可以共享代码的地方。

它补充了(而不是与)如 Boost 和当然 std 这样的产品。事实上,我们只有在我们需要的东西既不可用,或者不符合所需性能配置时才开始定义自己的组件。我们努力从 folly 中删除当 std 或 Boost 弃用时的情况。

性能问题贯穿 Folly 的大部分内容,有时会导致设计比其他情况更为独特(例如,请参阅 PackedSyncPtr.hSmallLocks.h)。在大规模下的良好性能是 Folly 中的一个统一主题。

逻辑设计

Folly 是一组相对独立的组件,其中一些像几个符号一样简单。没有任何内部依赖项的限制,这意味着给定的 folly 模块可以使用任何其他 folly 组件。

所有符号都在顶级命名空间 folly 中定义,当然不包括宏。宏名称都是大写的,应该以 FOLLY_ 前缀。命名空间 folly 定义了诸如 internaldetail 这样的其他内部命名空间。用户代码不应依赖于这些命名空间中的符号。

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.cppfolly/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