BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Facebook utilizou C++ para desenvolver o aplicativo Moments para Android e iOS

Facebook utilizou C++ para desenvolver o aplicativo Moments para Android e iOS

Um dos aplicativos mais recentes do Facebook, o Moments, está utilizando C++ para compartilhar sua lógica de negócios em iOS e Android. Os engenheiros do Facebook Ashwin Bharambe, Zack Gomez e Will Ruben explicam quais fatores influenciaram essa escolha e quais os resultados.

Inicialmente, os engenheiros do Facebook decidiram mover a lógica do servidor para a aplicação cliente, com o objetivo de focar exclusivamente na aplicação cliente e fazer o ciclo de desenvolvimento-execução-teste o mais curto possível. A desvantagem desta escolha foi o crescimento do código necessário para as duas plataformas inicialmente escolhidas: iOS e Android.

Dentre as muitas alternativas disponíveis para compartilhar código entre as plataformas, os engenheiros do Facebook decidiram escrever o código de interface gráfica (UI) na plataforma específica, e a lógica de negócios em código compartilhado usando C++. A linguagem C++ possibilita escrever aplicações de alto desempenho, embora não tenha abstrações de alto nível, e permite que o programador trate o gerenciamento de memória. Ainda assim, os programadores do Facebook foram capazes de implementar rapidamente código memory-safe com alto desempenho, usando as funcionalidades modernas do C++, tal como: std::shared_ptr, lambdas e auto declarations.

Os engenheiros do Facebook se esforçaram para manter a camada da API C++ simples através de algumas decisões fundamentais:

  • Codificação no estilo funcional, o que resulta na conversão de objetos de dados raw em view models imutáveis por padrão;
  • Fluxo de dados em uma única direção, métodos para realizar as transformações necessárias de view models exigidas por específicas views;
  • Camada de cache, quando o profilling mostrou que era apropriado, para evitar calcular mais uma vez resultados intermediários inalterados.

Na plataforma Android, há a questão adicional de geração de bindings para código específico da plataforma. Para isso, os engenheiros usaram Djinni do Dropbox para converter view models de C++ para Java. Também foi reescrito o gerador de código Djinni para atender melhor a abordagem funcional que foi escolhida para o projeto, e para otimizar o garbage collector. Já na plataforma iOS, o Objective-C++ pode ser utilizado para integrar perfeitamente com código C++.

Esta abordagem tornou possível compartilhar a maior parte de regras de negócios do aplicativo Moments entre iOS e Android, o que representa cerca de um terço da base de código em cada plataforma. E, por fim, os engenheiros do Facebook notaram que graças a esta abordagem "tem sido possível criar novas características com muito menos trabalho e menos bugs". Podendo "calcular de forma mais flexível o tempo de engenharia entre as duas plataformas, o que permite realizar releases simultâneos em ambas as plataformas".

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT