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: 505 ]

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

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

lib cURL - Trabalhe com URLs em C

Desenvolvendo para microcontroladores em GNU/Linux

Parâmetros interessantes do scanf e do printf em C

SDL - Ótimo para criação de jogos

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário