Instalando Facebook Folly através do Conan

Esse blog post tem o objetivo de apresentar o projeto Facebook Folly e sua complexa cadeia de dependências, bem como o seu uso. Também irá apresentar Conan como uma solução para a sua instalação e de suas dependências.

[ Hits: 3.135 ]

Por: Uilian Ries em 03/12/2018 | Blog: https://uilianries.github.io


O que é Folly



Folly [1] é o acrônimo para Facebook Open Source Library, um projeto C++ que vem sendo desenvolvido junto a comunidade e tornou-se bastante popular no Github, com mais de 11 mil likes e 2 mil forks. O projeto foi apresentado em 2012 através do Facebook [2], trazendo como objetivo uma biblioteca completa, focada em facilidade para uso, velocidade no desenvolvimento e complemento para soluções do mundo real. Folly também foi apresentado ao mundo através das edições do CppCon, como na apresentação "Experiences with Facebook's C++ Library" [3], além de possuir um vasta documentação através de seu repositório no Github [4].

[1] https://github.com/facebook/folly
[2] https://www.facebook.com/notes/facebook-engineering/folly-the-facebook-open-source-library/10150864656793920/
[3] https://www.youtube.com/watch?v=GDxb21kEthM
[4] https://github.com/facebook/folly/tree/master/folly/docs

Falar é Fácil, me mostre o código

Para ilustrar o uso do Folly, vamos utilizar um projeto exemplo com o objetivo imprimir uma string utilizando Folly Futures [1]:

#include <folly/Format.h>
#include <folly/futures/Future.h>
#include <folly/executors/ThreadedExecutor.h>
#include <folly/FBString.h>

static void print_uri(const folly::fbstring& value) {
    const auto authority = folly::format("Callback Future: {}", value);
    std::cout << authority << std::endl;
}

int main() {
    folly::ThreadedExecutor executor;
    folly::Promise<std::string> promise;
    folly::Future<std::string> future = promise.getSemiFuture().via(&executor);
    folly::Future<folly::Unit> unit = std::move(future).thenValue(print_uri);
    promise.setValue("Hello World!");
    std::move(unit).get();
    return EXIT_SUCCESS;
}

O código acima apenas deverá imprimir a mensagem "Callback Future: Hello World!", logo após a callback da future for executada.

Future nada mais é do que representação do resultado de uma computação assíncrona que pode ainda não estar disponível. Uma vez concluída, ela conterá o resultado da operação realizada. Neste caso, Folly Future é capaz de chamar uma callback após a sua conclusão, sendo a própria mensagem.

Para que possamos construir este projeto exemplo, iremos utilizar CMake através do arquivo CMakeLists.txt:

cmake_minimum_required(VERSION 3.1.3)
project(folly_example CXX)

find_package(Folly CONFIG REQUIRED)

add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} Folly::folly)
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 14)

Agora que temos o código exemplo e o script de construção, precisamos do ambiente necessário para construir o projeto, incluindo a biblioteca Folly e suas dependências.

[1] https://code.fb.com/developer-tools/futures-for-c-11-at-facebook/

As dependências de Folly

Embora Folly seja um projeto excelente para ambientes C++, ele possui uma complexa estrutura de dependências:
Linux: Instalando Facebook Folly através do Conan
Este gráfico de dependências pode ser gerado através do comando:

conan info folly/2018.11.12.00@bincrafters/stable --graph index.html

Como observado, Conan listou 11 outros projetos diretamente relacionados a Folly, incluindo a biblioteca Boost. Logo é possível perceber o quão difícil e demorado poderá ser a tarefa de preparar o ambiente para utilizar Folly.

O próprio projeto lista como resolver suas dependências [1] nas plataformas Linux, Windows e OSX. Contudo, no Linux será obrigatório utilizar a versão oferecida pela distribuição e nem sempre será a desejada. No Windows ainda existe a opção de utilizar Vcpkg [2], contudo será necessário aguardar a construção de todas as dependências antes de poder compilar qualquer código exemplo.

[1] https://github.com/facebook/folly#dependencies
[2] https://github.com/Microsoft/vcpkg

    Próxima página

Páginas do artigo
   1. O que é Folly
   2. Conan para o resgate
   3. Construindo o projeto
Outros artigos deste autor

Gerenciando pacotes para C/C++ com Conan

Leitura recomendada

Tutorial SFML

Bug afeta todas as distros

lib cURL - Trabalhe com URLs em C

Dynamic libraries com libtool

A duplicação do buffer de saída na chamada de sistema fork() do Linux

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts