Facebook开源 C++11 组件库,真香!

Folly是Facebook open source library的缩写,提供了类似 Boost 和 std 库的功能。包括散列、字符串、向量、内存分配、位处理等,满足大规模高性能的需求。

逻辑设计

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

所有符号都在顶级命名空间中定义folly,当然宏除外。宏名称为 ALL_UPPERCASE 并且应以FOLLY_. 命名空间folly定义了其他内部命名空间,例如internal或detail。用户代码不应依赖于这些命名空间中的符号。

Folly 也有一个experimental目录。这一名称主要意味着我们认为 API 可能会随着时间的推移发生重大变化。通常,此代码仍在大量使用并且经过良好测试。

Folly安装下载

folly 支持 gcc (5.1+)、clang 或 MSVC。它支持在 Linux(x86-32、x86-64 和 ARM)、iOS、macOS 和 Windows (x86-64) 上运行。你可以使用以下命令下载安装:

wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz && \
tar zxf release-1.8.0.tar.gz && \
rm -f release-1.8.0.tar.gz && \
cd googletest-release-1.8.0 && \
cmake . && \
make && \
make install

构建测试

默认情况下,构建测试作为CMake all目标的一部分是禁用的。要构建测试,请在配置时将-DBUILD_TESTS=ON指定为CMake。

Ubuntu 16.04 LTS

需要以下软件包(随意剪切和粘贴下面的 apt-get 命令):

sudo apt-get install \g++ \cmake \libboost-all-dev \libevent-dev \libdouble-conversion-dev \libgoogle-glog-dev \libgflags-dev \libiberty-dev \liblz4-dev \liblzma-dev \libsnappy-dev \make \zlib1g-dev \binutils-dev \libjemalloc-dev \libssl-dev \pkg-config \libunwind-dev

Folly 依赖需要从源代码安装的fmt。以下命令将下载、编译和安装 fmt。

git clone https://github.com/fmtlib/fmt.git && cd fmtmkdir _build && cd _build
cmake ..make -j$(nproc)
sudo make install

如果需要高级调试功能,请使用

sudo apt-get install \libunwind8-dev \libelf-dev \libdwarf-dev

在 folly 目录(例如 checkout 根目录或存档解包根目录)中,运行:

mkdir _build && cd _buildcmake ..make -j $(nproc)make install # with either sudo or DESTDIR as necessary

目前,Folly已经在Github上标星17.6K,累计分支4K(阅读Folly的代码对C++程序员成长也有很大帮助,希望这个项目你会喜欢。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

undertow ssl_SSL与WildFly 8和Undertow

undertow ssl我一直在研究WildFly 8的一些安全性主题,偶然发现了一些没有很好记录的配置选项。 其中之一是用于新的Web子系统Undertow的TLS / SSL配置。 有很多关于较旧的Web子系统的文档,并且确实仍然可以使用,但是这里是使用新方法进行配置…

C++对象的动态建立

C对象的动态建立和释放在C中,如果定义的对象是静态的,在程序运行过程中,对象所占的空间是不能随时释放的。为提高内存空间的利用率,希望在需要用到对象时才建立对象,在不需要用该对象时就撤销它,释放它所占…

java字符连接字符串数组_Java中连接字符串的最佳方法

java字符连接字符串数组最近有人问我这个问题–在Java中使用运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗。 这些是我要研究的方法: 使用运算符 使用StringBuilder 使用StringBuffer…

C 构造函数重载

C 用参数初始化表对数据成员初始化在C 中,构造函数的函数可以通过体内赋值语句对数据成员实现初始化,C 还提供另一种初始化数据成员的方法,用参数初始化表来实现对数据成员的初始化。这种方法不在函数体内对数据成员初始化,而是在…

乐播投延迟很高_大屏也要高刷新!华为4K@120智慧屏初体验,屏幕软件都够硬

买电视就是买屏幕,华为智慧屏也不例外。可参数大而全的旗舰产品往往都有着相当高昂的售价,假如你不愿意将就千元级别的画质,希望电视能坚持更长时间,却又没有足以点满所有技能树的预算……华为新出的S系列智慧屏,大概正…

java常见性能优化_十大最常见的Java性能问题

java常见性能优化Java性能是所有Java应用程序开发人员都关心的问题,因为快速使应用程序与使其正常运行同等重要。 史蒂文海恩斯(Steven Haines)使用他在Java性能问题上的个人经验得出的结论是, 大多数问题都有共同的根本原因 。 因…

为甚 html 显示为源码,显示字符串作为美化HTML源代码

我正在开发一个ASP.NET MVC Web应用程序。在一个页面上,我有一个字符串,如下所示:This is some text !对于预览模式,我使用Html.Raw(Model.MyText),文本显示为呈现的HTML:此是一些文字!我现在想…

C语言 | 链表概述

C语言链表概述链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构,是根据需要开辟内存单元。链表有一个“头指针”变量,它存放一个地址,该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部…

jooq_jOOQ与Hibernate:何时选择哪个

jooqHibernate已成为Java生态系统中的事实上的标准,事实上, 如果标准对您很重要 ,并且如果您将JCP与ISO,ANSI,IEEE等置于同一级别,那么Hibernate也是实际的JavaEE标准实现。 本文的目的不是讨论标准&#…

C语言 | 循环语句总结

C语言循环的嵌套一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环体中还可以嵌套循环,这就是多层循环。3种常用循环语句:while语句、do...while语句和for语句可以相互嵌套。C语言循环的比较3种循环语句都可以用来处理同一…

账户的配置使您无法使用该计算机,2个方法解决“user profile service服务未能登录无法加载用户配置文件”...

win8/10系统:启动电脑显示windows标志时,长按电源键强行关机,重复此操作三次,系统将会进入“自动修复”。然后在“自动修复”界面中,选择“高级选项”>“疑难解答”>“高级选项”>“启动设置”>“重启”&a…

C语言 | 内部与外部函数

C语言函数的声明和定义一个函数一般由两部分组成:声明部分执行语句C语言对变量而言,声明与定义的关系稍微复杂一些,在声明部分出现的变量有两种情况:一种是需要建立存储空间的。另一种是不需要建立存储空间的。前者称为定义性声明…

获取客户端ip_代理IP工具能否解决反爬?

互联网已成了生活中的部分,从事互联网的工作者,避免不了需要去一些网站上进行爬取需要的数据来达到自己产品或者业务上的需求。比如反爬策略,但是,使用代理IP工具一定可以解决反爬虫策略吗?一、不同的网站有不同的反爬…

C语言 | 结构体数组

C语言结构体数组概述一个结构体变量中可以存放一组有关联的数据,如一个学生的学号、姓名、成绩等数据,如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与之前介绍的数值型数组的不同之处在于每个数…

html弹窗代码y\/n,Nodejs扩展,实现消息弹窗(示例代码)

模块的C代码 node_gtknotify.cc#include #include #include #include #include using namespace v8;class GtkNotify : node::ObjectWrap{public:GtkNotify(){}~GtkNotify(){}std::string title;std::string icon;static Persistent persistent_function_template;static void …

C语言 | 结构体指针

C语言指向结构体变量的指针在C语言中,指向结构体对象的指针变量既可以指向结构体变量,也可指向结构体数组中的元素。指针变量的基类型必须与结构体变量的类型相同。C语言中允许 (*p).num用p->num来代替 ->代表一个箭头 p-&g…

C语言 | 变量的存储方式

C语言动态存储方式与静态存储方式静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式;动态存储方式是在程序运行期间根据需要进行动态的分配存储空间的方式。内存中的供用户使用的存储空间可以分为3部分,程序区静态存储区动态存储区全局变量…

设计模式装饰者模式_装饰者模式如何拯救了我的一天

设计模式装饰者模式在工作中,我正在处理庞大的Java代码库,该代码库是由许多不同的开发人员在15年的时间里开发的。 并不是所有的事情都由书来完成,但是同时我通常无法重构遇到的每一个奇怪的事物。 尽管如此,仍可以每天采取提高代…

初学者选黑卡还是微单_明日之镜 十年索尼微单和他的镜头王国

2010年索尼微单诞生,与之一同而来的还有全新的E卡口。十年间,E卡口从APS-C走向了全画幅,从静态影像走向了专业摄像。并且准瞬间通过机器与机器、镜头与镜头架起了消费级与专业级的桥梁。想来一个卡口创作无限界大抵就是如此吧。起源一枚扫街用…

C语言 | 字符数组

C语言字符数组的定义字符数组是用来存放字符数据的数组,字符数组中的一个元素存放一个字符,定义字符数组的方法和定义数值型数组的方法类似。//例子:char character[10];C语言字符数组的初始化C语言对字符数组初始化,最容易理解的…