Apresentamos o Craby, uma ferramenta que permite integrar módulos baseados em Rust com TurboModules em C++ puro no React Native.
Veja a documentação: https://craby.rs
GitHub: https://github.com/leegeunhyeok/craby
O que é o Craby?
Craby é uma ferramenta de desenvolvimento que permite escrever módulos nativos de alto desempenho em Rust, mantendo segurança de tipos em toda a stack TypeScript - Rust - C++. Sem as camadas específicas de plataforma do React Native TurboModule (ObjCTurboModule/JavaTurboModule), ele se integra diretamente com TurboModules em C++ puro para extrair o máximo desempenho.
Desempenho
Comparação de benchmark com outras soluções (veja o benchmark):
- 20 a 80 vezes mais rápido que ExpoModules
- 15 a 20 vezes mais rápido que TurboModules padrão
- 25% a 30% mais rápido que NitroModules (baseado em Swift/Kotlin, não em C++)
Este é um teste de throughput extremo (100 mil chamadas), e os resultados podem variar em ambientes reais de uso, então use apenas como referência.
Principais recursos
- Geração automática de código: ao definir a API em TypeScript, os bindings Rust/C++ são gerados automaticamente
- Segurança de tipos: checagem de tipos em tempo de compilação entre TypeScript, Rust e C++
- Zero-Cost FFI: minimiza o overhead de interoperabilidade Rust-C++ por meio de cxx
- API simples: foque apenas na implementação em Rust, e o restante fica por conta do Craby
Exemplo de uso
// Definição do schema do módulo (TypeScript)
interface Spec extends NativeModule {
add(a: number, b: number): number;
}
// Implementação real do módulo (Rust)
#[craby_module]
impl CalculatorSpec for Calculator {
fn add(&mut self, a: Number, b: Number) -> Number {
a + b
}
}
Todo o código de bridging é gerado automaticamente pelo Craby, e o usuário só precisa implementar o módulo real em Rust.
Para mais detalhes, consulte a documentação/o repositório no GitHub, e feedbacks diversos são sempre bem-vindos!
5 comentários
Que projeto legal. Já dei uma estrela!!
Monstro, Geunhyeok…
Tem muita gente realmente incrível por aí..
Uau... por acaso houve algum motivo específico que levou você a criar essa ferramenta? Eu também queria tentar fazer algo assim, então fiquei curioso para saber que tipo de motivação as pessoas costumam ter para criar esse tipo de coisa.
Recentemente surgiu a necessidade de migrar para a New Architecture, e, ao analisar a implementação interna do TurboModule, tudo começou com a ideia de que “se abordássemos dessa forma, haveria potencial suficiente”!