问题标签 [folly]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
2619 浏览

c++ - Windows 上的愚蠢

有没有人真正成功地在 MSVC 上使用 Folly(例如 fbvector 等)类?

我找不到任何有意义的信息,例如,它因为找不到 folly-config.h 而无法编译,而我在网上找到的唯一东西是一个 github 修订版,它“被删除,因为它是由 Configure 自动创建的”和信息关于这个配置是什么以及如何启动它无处可寻。

0 投票
3 回答
3972 浏览

c++ - 建立 facebook 愚蠢

不能制造愚蠢。具有下一个文件夹结构:

/flint/双重转换/src

/燧石/愚蠢/愚蠢/

其中 /flint/folly 包含自述文件和许可证。在自述文件中,我使用 scons 设置了双重转换,使用导出标志

从第二个愚蠢的目录中,没有任何工作:

也尝试过像 /home/username/flint/double-conversion/ 这样的绝对路径,但这也不起作用。有什么建议么?

0 投票
1 回答
927 浏览

c++ - 关于与 facebook 愚蠢库链接时的编译问题

我使用下面给出的以下链接构建了 facebook 愚蠢库

https://github.com/facebook/folly

编写此代码后,只需编译它..当我编译时,得到以下问题..

syscon@syscon-OptiPlex-3020:~/Documents/work/folly/folly-master$ g++ -o stl stl.cpp -std=c++11 -lboost_system

/tmp/cc2WeDlr.o: 在函数folly::usingJEMalloc()':stl.cpp:(.text._ZN5folly13usingJEMallocEv[_ZN5folly13usingJEMallocEv]+0x2d): undefined reference tofolly::usingJEMallocSlow()'collect2: 错误: ld 返回 1 退出状态

为了解决这个问题,我需要包含哪个库?

0 投票
2 回答
1111 浏览

facebook - 如何使用 Proxygen 和 Folly 发送 HTTP 分块响应以模拟视频流?

我正在编写一个基于 Facebooks Proxygen 的 HTTP 视频流服务器。没有计划的寻求。使用proxygen::ResponseBuilder我能够将 webm 编码的视频块作为 HTTP 响应发送,即分块传输编码正在工作。proxygen::ResponseBuilder::sendWithEOM()我的问题是,Proxygen甚至在发送响应标头之前都会等待。我希望它在每次调用proxygen::ResponseBuilder::send().

evb->runInLoop()我尝试使用和从 EventBaseThread 执行的 lambda 运行 ResponseBuilder 调用evb->runInEventBaseThread()

此代码是从onRequest()my 的方法调用的RequestHandler。我试图在ResponseBuilder::send()不将其包装成的情况下进行调用evb->runInLoop(),但是带有 Folly v0.42.0 的 Proxygen v0.25.0 禁止ResponseBuilder::send()使用断言从另一个线程调用。我从这里删除了这个断言:https ://github.com/facebook/folly/blob/v0.42.0/folly/io/async/EventBase.cpp#L491 。

现在模拟流正在工作,但如果有并行请求,它就会崩溃。我想它不应该像这样使用,这就是断言的用途。但也许有人知道如何为我的用例正确使用 Proxygen 基础设施?

0 投票
2 回答
3012 浏览

c++ - std库中的Visual Studio编译错误

我正在尝试按照此处提供的说明在 Visual Studio 2015 RC 中松散地构建 Facebook 愚蠢: https ://github.com/jbandela/folly/tree/vc11

我希望通过 2015 年扩展的 C++11 支持,我可能会比以前更轻松。我一直在以一个不错的剪辑解决问题,但我目前遇到了一组对我来说没有意义的编译错误。这是第一个错误的编译输出的顶部:

这是它带给我该错误位置的来源,再次在 std 命名空间的 xstring 中:

我收到的另一个错误示例:

来源:

我很困惑这些和其他 219 错误是如何与 std 库本身相关的。我通常从 Linux/g++ 构建,所以我不熟悉 Visual Studio 构建环境。我可能做一些简单的错误。像这样的错误可能是什么原因?


更新 1

添加更多信息。我在没有提升的情况下复制了这个,所以“未知的编译器版本”警告消失了。我还从编译中获得了更多输出:


更新 2

无论是否启用预编译头选项,都会发生这些错误。

0 投票
0 回答
560 浏览

c++ - 无法导入愚蠢/facebook c++ lib

我目前正在尝试使用folly/facebook c++ 库中的 atomic_hashmaps,但是在安装 folly 之后,如果我只需要类似的 lib

g++ 编译器抛出以下异常:

我正在编译我的 C++ 代码:

这是愚蠢的问题还是我的错?

0 投票
0 回答
210 浏览

c++ - Loki 和 Folly C++ 库之间有什么关系?

我注意到 Andrei Alexandrescu 展示了他的“ScopeGuard”机制的两个版本——一个在 C++11 之前,一个在 C++11 之后;并且第一个版本是 Loki 库的一部分,而第二个版本是 Facebook 的愚蠢库的一部分 -直到最近,Alexandrescu 才被使用(感谢@JerryCoffin 指出那条消息)。但是Loki 网站并没有说明这种联系,Loki维基百科页面也没有。愚蠢的 Readme.md也没有- 愚蠢的资源也没有。

那么这些库是否与我上面描述的相关?

0 投票
2 回答
321 浏览

c++11 - 运行时用于 json 反序列化的模板函数类型转换

我想编写一个函数,将数组的 json 表示反序列化为 std::vector。我正在使用的 json 库是 Facebook 的愚蠢库的一部分。我想实现以下目标,但不幸的是它不起作用:

在上面的代码中, jsonField 是数组字段的表示。所以代码只是尝试循环遍历数组;然后对于每个元素;它将尝试推回通用向量:向量。问题是代码无法编译,因为它会抱怨它不能从 std::string 转换为 int; 当 T=int;

我不确定如何编写这样的通用函数而不需要实现 4 个方法重载函数。static bool deserializeHelper(std::string fieldName, vector< int >& structField, const folly::dynamic& jsonObj) ....

谢谢。

0 投票
1 回答
2412 浏览

c++ - 为什么我们需要使用 folly::fbvector 而不是 std::vector 和分配器,它最初保留大的未提交区域?

众所周知,如果我们将元素 push_back 到std::vector<>,并且如果向量中分配的整个内存都被占用,则std::vector<>保留当前内存大小的 2X(分配 2X 大小的新内存),调整向量大小并将旧数据复制到新内存。

我们可以对其进行优化,Facebook 在 folly-library 中完成了此操作(FBVector 是 Facebook 的 std::vector 的插入式实现。它针对可重定位类型和 jemalloc https://github.com/facebook/folly/进行了特殊优化blob/master/folly/FBVector.h#L21)。

即当vector<>没有足够的内存来 push_back 新元素时,我们分配更多的内存,但不是 2 倍(不同的次数:1.3 - 1.5 次

说明:https ://github.com/facebook/folly/blob/master/folly/docs/FBVector.md

下面的图形求解器显示,选择 k = 1.5(蓝线)允许在 4 次重新分配后重用内存,选择 k = 1.45(红线)允许在 3 次重新分配后重用内存,选择 k = 1.3(黑线)允许仅在 2 次后重用重新分配。

在此处输入图像描述

但是为什么我们需要使用folly::fbvector<>而不是std::vector<>使用我们的自定义分配器VirtualAllocEx()(如下所示:我需要使用 VirtualAlloc/VirtualAllocEx?),或者在 linux https://stackoverflow.com/a/2782910/ 1558037,其中:

  • std::vector<>::reserve()- 最初保留大的未提交的虚拟地址区域(分配 WMA,但不在 PT 中分配任何 PTE),例如最初分配 16 GB 的虚拟区域并且每次内存不足时提交内存(分配 PTE - 分配物理区域)等于向量的 1 x SIZE
  • std::vector<>::resize()- 然后只提交一批新的页面,在 PT 中只分配新的 PTE,不重新分配已经使用的内存,也不将数据从旧内存复制到新内存

总体

这种方法的优点是具有较大的未提交区域folly::vector<>我们总是只分配新的内存部分,从不复制旧数据。

folly::vector<>方法优于:std::vector<>有时我们不需要分配新内存,但总是应该将旧数据复制到新内存中。

0 投票
2 回答
1049 浏览

c++ - 使用范围保护时如何避免警告?

我正在使用愚蠢的范围保护,它正在工作,但它会生成一个警告,指出该变量未使用:

编码:

如何避免这样的警告?