O time do Expo revelou os detalhes arquiteturais do Kolibri, a nova biblioteca de ponte entre Kotlin e C++ desenvolvida para alimentar o Expo Modules 2.0 no Android. Construída como uma alternativa de alto desempenho ao tradicional fbjni, a solução acelera chamadas nativas em até 51 vezes.

Comparativo de latência de chamadas entre Kotlin e C++: o Kolibri aproxima o overhead do JNI puro e supera amplamente o fbjni. Fonte: Expo.

Otimizações na raiz da comunicação JNI

Historicamente, o Java Native Interface (JNI) é o principal gargalo de desempenho em módulos nativos no Android. Bibliotecas tradicionais como o fbjni introduzem custos adicionais ao verificar exceções em todas as operações e buscar o ambiente JNIEnv em cada chamada.

O Kolibri resolve essas ineficiências por meio de três componentes integrados:

  • Passagem de ponteiros via compilador: Um plugin do compilador Kotlin repassa o ponteiro C++ diretamente como argumento numérico, dispensando consultas reflexivas em memória.
  • Buffers binários compartilhados: Objetos complexos do JavaScript são transferidos para o Kotlin em um único buffer binário sequencial, reduzindo a latência de trânsito em até 5 vezes em comparação à instanciação objeto por objeto.
  • Gerenciamento por escopos (scopes): A liberação de memória dos objetos híbridos fica atrelada ao ciclo de vida do runtime JS, dispensando referências globais individuais no coletor de lixo do Java.

A novidade já faz parte da base do Expo Modules 2.0 e tem detalhes documentados no blog de engenharia da Expo.