问题标签 [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.
c++ - Windows 上的愚蠢
有没有人真正成功地在 MSVC 上使用 Folly(例如 fbvector 等)类?
我找不到任何有意义的信息,例如,它因为找不到 folly-config.h 而无法编译,而我在网上找到的唯一东西是一个 github 修订版,它“被删除,因为它是由 Configure 自动创建的”和信息关于这个配置是什么以及如何启动它无处可寻。
c++ - 建立 facebook 愚蠢
不能制造愚蠢。具有下一个文件夹结构:
/flint/双重转换/src
/燧石/愚蠢/愚蠢/
其中 /flint/folly 包含自述文件和许可证。在自述文件中,我使用 scons 设置了双重转换,使用导出标志
从第二个愚蠢的目录中,没有任何工作:
也尝试过像 /home/username/flint/double-conversion/ 这样的绝对路径,但这也不起作用。有什么建议么?
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 to
folly::usingJEMallocSlow()'collect2: 错误: ld 返回 1 退出状态
为了解决这个问题,我需要包含哪个库?
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 基础设施?
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
无论是否启用预编译头选项,都会发生这些错误。
c++ - 无法导入愚蠢/facebook c++ lib
我目前正在尝试使用folly/facebook c++ 库中的 atomic_hashmaps,但是在安装 folly 之后,如果我只需要类似的 lib
g++ 编译器抛出以下异常:
我正在编译我的 C++ 代码:
这是愚蠢的问题还是我的错?
c++ - Loki 和 Folly C++ 库之间有什么关系?
我注意到 Andrei Alexandrescu 展示了他的“ScopeGuard”机制的两个版本——一个在 C++11 之前,一个在 C++11 之后;并且第一个版本是 Loki 库的一部分,而第二个版本是 Facebook 的愚蠢库的一部分 -直到最近,Alexandrescu 才被使用(感谢@JerryCoffin 指出那条消息)。但是Loki 网站并没有说明这种联系,Loki维基百科页面也没有。愚蠢的 Readme.md也没有- 愚蠢的资源也没有。
那么这些库是否与我上面描述的相关?
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) ....
谢谢。
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 SIZEstd::vector<>::resize()
- 然后只提交一批新的页面,在 PT 中只分配新的 PTE,不重新分配已经使用的内存,也不将数据从旧内存复制到新内存
总体:
这种方法的优点是具有较大的未提交区域folly::vector<>
:我们总是只分配新的内存部分,从不复制旧数据。
folly::vector<>
方法优于:std::vector<>
有时我们不需要分配新内存,但总是应该将旧数据复制到新内存中。
c++ - 使用范围保护时如何避免警告?
我正在使用愚蠢的范围保护,它正在工作,但它会生成一个警告,指出该变量未使用:
编码:
如何避免这样的警告?